我希望能够从许多日志文件中提取数据。然后将提取的数据发送到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 但由于某种原因它无法正常工作且尚未维护。
您是否知道可以跟踪日益增长的日志文件或Pythonic方法的优秀实用程序?
我似乎记得syslog-ng或rsyslog有这方面的东西,但我认为它们只适用于syslog风格的日志,而我的不遵循任何标准。
此致
的Alessandro
答案 0 :(得分:0)
Zabbix 2.0改进了日志文件监控,请参阅here。
格式:
log[file,<regexp>,<encoding>,<maxlines>,<mode>]
对于正则表达式,您可以指定日志文件的每一行中的单词。
对于模式,跳过告诉Zabbix不要处理旧数据。
示例:
log[logfile,processed,,,skip]
您也可以编写脚本,只需将每个脚本运行的最后一行存储在一个文件中,并将其作为变量存储在脚本中。然后做这样的事情:
tail -n +$line_number logfile | awk '{print $3}'
您可以使用wc获取最后一个行号:
wc -1 logfile > /tmp/number_file
您需要+1,因此您不会解析最后一行两次。
可能值得将所有值存储在文件中,将主机名和项目键添加到每一行,并使用zabbix_sender。
希望有所帮助。
答案 1 :(得分:0)