Python脚本实现Zabbix多行日志监控过程解析
通过使用zabbix日志监控我发现一个问题例如oracle的日志有报错的情况,通常不会去手动清理这样的话当第二次有日志写进来的时候zabbix的机制是回去检查全部日志,这样的话之前已经告警过的错误日志,又会被检查到,这样就会出现重复告警,而且zabbix的日志监控只能读到匹配当前行关键字的数据,感觉不太灵活,比如我想要匹配到的关键字之后再当前关键字的下N行再去匹配另一个关键字这个时候就比较麻烦,在这里给大家推荐一个有效,便捷解决的方式。
通过Python脚本实现日志监控要求1记录脚本检查日志位置,避免下次触发脚本的时候出现重复告警2关键字匹配支持正则3支持多个关键字查询,例如第一个关键字匹配到当之后在这个关键字的下N行再去匹配第二个关键字具体传参格式
python3npar.py/u03/z.txt'(ORA-|REEOR),(04030|02011)'2
第一个参数是日志路径第二个参数是关键字第三个参数为匹配到第一个表达式这种的关键字后再去地N(2)行去匹配第二个关键词(04030|02011)具体脚本实现如下
importos importsys logtxt="logtxt.txt" defread_txt(files,start_line): data=[] data.append("") withopen(str(files)+"","r", encoding='UTF-8')asf: forlineinf.readlines(): line=line.strip('\n')#去掉列表中每一个元素的换行符 data.append(line) #记录本次的行数 wirte_log(len(data)-1) iflen(data)>start_line: returndata[start_line-1:] else: print("开始行数大于文本文件总行数!") defwirte_log(lines): globallogtxt withopen(logtxt,"w")asfile:#”w"代表着每次运行都覆盖内容 file.write(str(lines)) defread_log(): globallogtxt ifnotos.path.exists(logtxt): withopen(logtxt,"w")asfile:#”w"代表着每次运行都覆盖内容 file.write(str(1)) withopen(logtxt+"","r",encoding= 'UTF-8')asf: s_lines=f.readlines() print("从第"+str(s_lines[0])+"行开始") returns_lines[0] defdeal_read_log(files,keyword, interval_line): keywords=keyword.replace("(","").replace( ")","").replace("'","").replace('"', '"').split(',') start_keywords=keywords[0].split("|") end_keywords=keywords[1].split("|") start_line=read_log() lines_data=read_txt(files,int( start_line)) for_line=1 while(for_line接下来就是添加监控了
在agent的conf文件里面添加UserParameter
到这里监控就完成了
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。