![设置 rsyslog 从两个网络设备进行记录](https://linux22.com/image/1472645/%E8%AE%BE%E7%BD%AE%20rsyslog%20%E4%BB%8E%E4%B8%A4%E4%B8%AA%E7%BD%91%E7%BB%9C%E8%AE%BE%E5%A4%87%E8%BF%9B%E8%A1%8C%E8%AE%B0%E5%BD%95.png)
我的网络上有 2 个 VOIP 设备(ht502 和 ht704),它们都能够将其日志信息作为系统日志数据发送。接收器是 Raspbian 上的一个小树莓派。
我想配置 syslog 以接收来自两个 VOIP 设备的消息并将它们存储到各自的(不同的)日志文件中。到目前为止,我还没有做到这一点。
我启用了 syslog(通过取消注释以下几行/etc/rsyslog.conf
):
$ModLoad imudp
$UDPServerRun 514
$ModLoad imtcp
$InputTCPServerRun 514
我创建了/etc/rsyslog.d/
如下两个文件。
ht704.conf
$template NetworkLog, "/var/log/ht704.log"
:fromhost-ip, isequal, "192.168.11.160" -?NetworkLog
ht502.conf
$template NetworkLog, "/var/log/ht502.log"
:fromhost-ip, isequal, "192.168.11.162" -?NetworkLog
注意各自不同的 IP 地址。
并重新启动服务:
service rsyslog restart
但事实证明,所有输出都存在于/var/log/ht502.log
文件中。
例子:
Nov 7 19:05:39 HT-502 [00: 0B:82:42:31:62]: [1.0.14.1] NAT::checkNAT: detected NAT environment for account 1
Nov 7 19:05:39 HT-502 [00: 0B:82:42:31:62]: [1.0.14.1] NAT::addPortMapping(STUN), iport = 49260
Nov 7 19:05:39 HT704 [00: 0B:82:65:DD:1C] [1.0.5.10]:System uptime: 1846
Nov 7 19:05:39 HT704 [00: 0B:82:65:DD:1C] [1.0.5.10]:System memory: 13213696/724992/0/794624
Nov 7 19:05:40 HT-502 [00: 0B:82:42:31:62]: [1.0.14.1] SIPClientTransaction::sendRequest: Request 15 is sent
Nov 7 19:05:40 HT-502 [00: 0B:82:42:31:62]: [1.0.14.1] SIPStack(0)::run: Active transactions: 2
最重要的是,我实际上刚刚注意到来自 VOIP 设备的消息也意外地出现在/var/log/messages
和中/var/log/syslog
。我认为它们不应该出现在那里。或者应该出现吗?
知道缺少了什么吗?
答案1
总结:
您的模板互相干扰(尽管它们似乎没有被其他.conf
文件继承,但它们是相冲突的 - 您的猜测和我的一样好)。
改名 NetworkLog
每个文件都有一个唯一的名称。
添加 & ~
作为最后ht704.conf
一行ht502.conf
替代方案(清洁剂):
创建一个包含以下内容的单个.conf
文件:/etc/rsyslog.d/
:fromhost-ip, isequal, "192.168.11.160" /var/log/ht704.log & ~ :fromhost-ip, isequal, "192.168.11.162" /var/log/ht502.log & ~
使用格式化程序示例:
$template RFC3164fmt,"<%PRI%>%TIMESTAMP% %HOSTNAME% %syslogtag%%msg%" :fromhost-ip, isequal, "192.168.11.160" /var/log/ht704.log;RFC3164fmt :fromhost-ip, isequal, "192.168.11.162" /var/log/ht502.log;RFC3164fmt & ~
长版本:
最近,我发现自己很难理解这些文件的优先级和语法,并在谷歌搜索时发现了这个问题。我想链接到文档,但我发现它很难解析,而且似乎已经有动力在这里进行改进: https://github.com/rsyslog/rsyslog-doc 因此,大多数建议都来自经验证据(我尝试过的东西)。
今天:
FILENAME
中的 s按/etc/rsyslog.d
字母顺序操作[排序规则相关](即为什么默认值为50-default.conf
)。例如,我试图根据相同的规则/条件(:fromhost-ip,
等)获得具有不同格式的多个输出文件;答案是让第一的文件读取(按字母顺序/排序)做任何事情并排除( STOP
)& ~
同时呈现不同的输出到第二文件(按字母顺序/排序)和**包括STOP
(& ~
)。本例中第一个文件名为10-ddwrt.conf
,第二个文件名为15-ddwrt.conf
。
希望这能有所帮助,请随意改进。我特别没有深入研究“新”语法,因为它与旧版本的 不兼容rsyslog
。