好吧,先来一个小故事,
我们有一个Tomcat实例作为一种“网关”连接到多个服务提供者。 如果Tomcat实例无法连接到给定的提供程序,则会生成错误。 这些错误存储在日志文件中。
问题是我们需要监视的文件不仅仅是一个给定的string,我们需要使用几个正则expression式来过滤所有无意义的东西,以便我们不会在凌晨3点醒来,因为用户忘记了他的密码。 ;)
我已经尝试创build一个坐在Zabbix和Tomcat之间的python脚本,但是日志文件(每天轮换)超过200MB,这太CPU密集(100%15秒以上)。 我试图添加一个“睡眠(0.000005)”来减慢它的速度,但现在需要很长时间(> 1分钟),仍然使用25%的CPU …
总而言之,这个解决scheme掩盖了这个问题,我想和你们联系,看看你们是否知道更好的解决scheme,或者其他什么可能有用的方法。
(1)Zabbix可以自己处理正则expression式。 您可以使用正则expression式与zabbix代理监视日志。
https://www.zabbix.com/documentation/1.8/manual/log_file_monitoring
(2)使用'nice'命令可以降低脚本的CPU使用率优先级。
http://linux.die.net/man/1/nice
除此之外,需要更详细的信息。 *机器规格(CPU,MEM,存储设备等)* python脚本的来源
那么最后,我们用一个过于复杂的Python脚本去完成这个工作,直到有更可行的东西出现。
为了给你一个这个“脚本”有多复杂的概念,下面是它必须存在的MINIMUM文件/文件夹:
/usr/local/bin/tomcat_log_alert.py (755) /usr/local/bin/tomcat_ack_errors.py (755) /etc/${COMPANY}/tomcat-log-alert.conf (644) /etc/cron.d/tomcat-log-alert (644) /var/log/${COMPANY}/tomcat_errors/ (755) /var/log/${COMPANY}/tomcat_errors_ack/ (755) /etc/zabbix/zabbix_agentd.d/tomcat-log-alert.conf (644)
我真的不希望成为这个压裂创可贴的唯一维护者。
以下值得一看:
logrobot autonda /prod/tomcat/error.log 60m 'tomcat errors' 'password forgotten|failed login' 1 2 -show
上面的命令将在日志文件中search任何包含“tomcat错误”的行。 从它find的行中,它将删除所有包含以下内容的行:
以上只是search一个日志文件的定义条目。 如果要search多个日志文件以查找条目,会发生什么情况?
你可以尝试这样的事情:
logrobot automul /prod/tomcat/error.log_MULTIPLE 60m 'tomcat errors' 'password forgotten|failed login' 1 2 -show
我可能会稍微rest一下,所以你应该检查这些网站中的任何一个以获得确切的用法: