1

我希望能够从许多日志文件中提取数据。然后将提取的数据发送到 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 样式的日志,而我的没有遵循任何标准。

问候

亚历山德罗

4

2 回答 2

0

Zabbix 的人似乎听了我的祈祷:

http://blog.zabbix.com/zabbix-2-2-features-part-7-value-extracting-from-logfiles-and-more/2272/#more-2272

于 2013-05-08T15:34:57.170 回答
0

Zabbix 2.0 改进了日志文件监控,请参见此处

格式:

log[file,<regexp>,<encoding>,<maxlines>,<mode>]

对于正则表达式,您可以在日志文件的每一行中指定一个单词。

对于模式,skip告诉 Zabbix 不要处理旧数据。

例子:

log[logfile,processed,,,skip]

您也可以编写脚本,只需将运行的每个脚本的最后行号存储在文件中,并将其作为变量存储在脚本中。然后做这样的事情:

tail -n +$line_number logfile | awk '{print $3}'

您可以使用 wc 获取最后一行号:

wc -1 logfile > /tmp/number_file

您需要为此 +1,这样您就不会两次解析最后一行。

可能值得将所有值存储在文件中,将主机名和项目键添加到每一行,然后使用zabbix_sender

希望有帮助。

于 2012-07-28T08:52:50.413 回答