【发布时间】:2012-07-27 15:16:14
【问题描述】:
我希望能够从多个日志文件中提取数据。然后将提取的数据发送到 zabbix。
举个例子,假设一个(巨大的)日志文件包含像
这样的信息date: processed 566766 lines
date: processed 324523 lines
date: processed 546747 lines
date: processed 005643 lines
我希望能够将此数据发送到 Zabbix。
使用 awk 我会简单地做类似的事情
cat logfile | awk '/processed \d+ lines/ { system("zabbix command " $3) }'
我的问题是因为文件很大,而且我不想要重复的数据,我需要找到一种方法来从上次运行时中断的地方开始读取日志文件
所以它需要记住它直到上次读取的点,并开始只处理新添加的行。
我尝试了 fetchlog,但由于某种原因它不起作用并且没有得到维护。
您知道可以跟踪不断增长的日志文件的好实用程序,还是 Python 式的方法?
我似乎记得 syslog-ng 或 rsyslog 对此有所帮助,但我认为它们仅适用于 syslog 样式的日志,而我的没有遵循任何标准。
问候
亚历山德罗
【问题讨论】:
-
您是否考虑过 logrotate 每天轮换日志?您计划多久将数据发送到监控系统?
-
每隔几分钟。不幸的是,轮换不是一种选择。
-
所以感兴趣的数据“日期:已处理的 566766 行”分散在文件周围?无论如何,鉴于您的所有限制,我认为您必须计划在文件创建时只解析一次,然后将感兴趣的数据发送到可以根据您的日程安排将其发送到 zabbix 的进程。在此处和其他地方阅读有关 mkfifo 的信息,这可能会有所帮助。但是您仍然有一个问题,有一天,该日志文件对于操作系统来说会变得太大,并且必须清零并重新启动。然后你必须获得新的日志文件的新句柄。祝你好运!
标签: python bash logging zabbix