我有一台机器,它可以汇总来自许多设备的系统日志数据,我保存了所有我想将设备日志记录到 /etc/hosts 中,这样它们都有我理解的名称。如果设备日志记录到我的机器,但不在 /etc/hosts 中,我希望有其他日志,这样我就可以找出该主机是什么并发出警报。
我必须收集发送到我设备的所有日志,将它们放在一个文件中,并进行最低限度的过滤,所以有时我每天要处理 12GB 以上的日志。由于日志的大小会随时间变化(每天轮换),我不想在 cronjob 中对日志执行 cat/tr/cut/grep 之类的操作。
syslog-ng 中还有其他功能、linux 技巧或 iptables 调整可以帮助识别来自未知主机的日志消息吗?
答案1
我不熟悉 syslog-ng(我使用 rsyslog 和其他程序)但我认为您真正应该拥有的是一个接收源 IP 或标识符的映射,并返回您想要调用的内容,大概也有一个您可以使用的默认值。
map-value-pairs:重命名值对以规范化日志模板和重写:格式化、修改和操作日志消息 > 使用重写规则修改消息 > map-value-pairs:重命名值对以规范化日志 map-value-pairs() 解析器允许您将现有的名称-值对映射到不同的名称-值对集。您可以批量重命名它们,使其易于用于日志规范化任务(例如,当您解析来自不同日志消息的信息并希望将它们转换为统一的命名方案时)。您可以使用普通的值对表达式,类似于基于值对的目标。
在 syslog-ng OSE 版本 3.10 及更高版本中可用。
Declaration: parser parser_name { map-value-pairs( <list-of-value-pairs-options> ); };
然后在模板中使用该地图的输出。
destination d_file { file("/var/log/${YEAR}.${MONTH}.${DAY}/messages" template("${HOUR}:${MIN}:${SEC} ${TZ} ${HOST} [${LEVEL}] ${MESSAGE}\n") template-escape(no)); };