我将 rsyslog 配置为在 UDP/514 上侦听来自环境中其他设备的系统日志,但我有某些日志无法通过正常的 UDP/TCP 系统日志发送,唯一的方法是在以下情况下发送实际的日志文件:它使用 SCP 进行轮换。
我已经将所有 rsyslog 配置为按 UDP 连接的预期工作,但现在我试图弄清楚如何让 rsyslog 处理使用 SCP 复制的日志文件,并将它们包含在通过 syslog 端口接收到的文件中。
我已设置服务器将文件复制到临时位置/scp_tmp/[source_ip_address]/syslog.log
,并且我已阅读有关 imfile 的文档,并且我确信如何让 rsyslog 读取文件并将其输出到预期文件,但存在的问题是我需要设置属性fromhost-ip
以[source_ip_address]
使我现有的模板能够正常工作。
我知道如何从 Bash 中的路径中提取此属性/值,但是有没有办法在 rsyslog 中执行此操作? rsyslog.conf 是否允许命令替换?
笔记:
- 我遇到此问题的原因是服务器生成的日志不包含主机名,并且格式无法更改,因为它们来自配置灵活性有限的软件。
- 运行 rsyslogd 8.2004.0
- 运行 RHEL 6.10
答案1
您无法更改标准属性,例如fromhost-ip
.但是,您可以将局部变量设置为字符串并将其用作属性。例如
template(name="abc" type="string" string="note %$.myvar%")
set $.myvar = "this-value";
此外,imfile 允许您检索文件名元数据如果您使用以下选项addMetadata
:
input(type="imfile"
File="/my/logs/*.log"
addMetadata="on")
文件名放在变量中$!metadata!filename
。
因此,如果您将配置更改为默认设置
set $.myvar = $fromhost-ip;
并仅覆盖它imfile
,然后您可以在规则中使用if $.myvar
而不是,并且对所有输入都有通用规则。if $fromhost-ip