当前位置:

小白踩坑Zabbix logrt[]监控日志文件关键句

访客 2024-01-05 587 0

逐渐更新

一、服务器配(置简单带过,网上教程很多)

服务器RHEL8

zabbixserver端:版本5.4.9。别人配好了,端口防火墙开好了,我直接拿来用,怎么配置的不知道...

zabbixagent端:版本5.4.4。自己配制的,但是端口防火墙是已经就开好了的

agent端服务器没连公网,无法通过命令直接安装,我去别人装好了agent的服务器上拷贝了rpm文件运行了一把。我觉得是没装上,但是启动服务居然启动成功了?!按照网上教学简单配置了conf文件,把agent设置成Active按照别人已经添加好的Host和网上教学添加了Host坑:权限(zabbix没权限进入log文件夹读取log)填坑:用了以下这位大哥的方法成功解决项目采坑日志——zabbixagent执行脚本,提示Permissiondeniedhttp://t.csdn.cn/2cdLc

二、Zabbix页面端配置(没有Admin权限)

暂时只用了logrt[],只说logrt[],其他不会,用到的时候再学吧...

regexp,AKAregularexpression,正则表达式,坑了我了,由于没有Zabbix页面端admin权限就没法使用zabbix自带的正则表达式test功能,就只能蒙着来(主要还是不会,不然两秒钟也就写完了),正则表达式具体怎么写这里就不赘述了,网上一搜一大把,还有在线工具可以用,学起来就还挺方便。

首先看logrt[]模板:

logrt[file_regexp,<regexp>,<encoding>,<maxlines>,<mode>,<output>,<maxdelay>,<options>,<persistent_dir>]

就不逐一解释每个参数都什么意思了,zabbix官网上有。

坑一:item的toomanyparameters

填坑一:比如agent端5.4.4最多支持9个参数,由于手残多敲了一个逗号,导致变成了10个参数,然后就会有这个红“i”出现在info栏,鼠标放上面就会有toomanyparameters。注意检查agent版本可支持的参数是什么有多少个。

如果你写了<encoding>参数又写了<options>参数,然后这两个参数之间的参数都留默认值,那么,就要把这两个参数之间的“,”都敲出来!具体参数留空即可。

比如:logrt[file_regexp,regexp,encoding,,,,,options]

如果你写了<encoding>参数然后后面所有参数都要留默认值那么这个参数后面的“,”就都不用敲出来!

比如:logrt[file_regexp,regexp,encoding]

如果你没按照这个规则写,并且“,”写多、少了,都有可能出现toomanyparameters的红i

坑二:正则表达式的双引号“”

填坑二:如果你在可以使用正则表达式的参数里没有用到正则表达式则可以不用把参数放在双引号“”里。

比如:logrt[/home/zabbix32/test.log,error]

如果你在可以使用正则表达式的参数里使用了正则表达式则必须把参数放在双引号“”里。

比如logrt["/home/zabbix32/test[0-9].log","largeresultbufferallocation.*Entries:([0-9])"]

总结起来一个字就是,file_regexp,<regexp>那个用了正则表达式那个就“”起来,没用就不“”。

坑三:正则表达式的空格

填坑三:针对<regexp>这个参数,在不用正则表达式的情况下是可以直接识别空格这个符号的。

比如logrt["/home/zabbix32/test[0-9].log",largeresultbufferallocation]这里zabbix会去log的每一行里找largeresultbufferallocation这段话进行匹配并将整行返回给你比如的比如Thisisalargeresultbufferallocation会匹配成功并返回整行比如的比如largeresultbufferallocationinmemory也会匹配成功并返回整行比如的比如Thisisalargeresultbufferallocationinmemory还会匹配成功并返回整行

总结,如果需要匹配的关键字只有单纯的一句话,就不用像我似的花一个来小时查怎么用正则表达式写空格了。直接把句子写出来就行了...

坑四:正则表达式匹配多行

填坑四:例如需要匹配log内如下文本,注意单词之间都是用空格隔开的,然后DOWN之后还有多个空格,然后才是新启一行

server1api1DOWNserver2api2DOWNserver3api3DOWNserver4api4DOWNserver5api5DOWN

一次性匹配所有行的正则表达式为:

api1.*DOWN.*\n.*api2.*DOWN.*\n.*api3.*DOWN.*\n.*api4.*DOWN.*\n.*api5.*DOWN

其中\n表示新起一行然后.*表示通配符,其他都是关键字了

我首先尝试了匹配api1.*DOWN与api2.*DOWN与api3.*DOWN......但经过多方查证后正则表达式内没有单独表示”与“的通配符,所以需要换个角度思考。

坑五:item正则表达式无法返还多行内容

填坑五:如坑四所说,经过正则表达式在线工具测试的填坑四内的正则表达式可以匹配多行。但是,写在zabbix的item里之后,latestdata里没有任何返回值。虽然暂时没有查到任何资料明确表示item的返回值无法将匹配到的多行内容返还,但是测试结果的确是就算在保存item时没有报错提示说正则表达式写的有问题,但是latestdata返还值是空的。估计可以通过使用userparameters来返还多行?还没试,不知道。

真·填坑五:书接上文,我监控的APP需要设置crontab跑一个checkstatus.sh,.sh内用>>将checkappstatus命令结果输出到一个txt文件内。来了来了,开始了啊~checkappstatus命令给的结果是多行的,如坑四。我的想法是通过item一次性返还所有行的内容,然后通过trigger加以分析并作出对应action。结果踩进了坑五。在zabbix官网和Forum和support翻阅各种资料,除了创建多个item分别匹配多行,没人给出更好的方法,甚至有个大哥在一个十年前的帖子里回复说“这都十年了啊!还这德行”,我心一凉,这咋办呢这?!突然之间,天昏地暗,世界可以突然什么都没有。我想起了...可以在.sh里输出到txt的时候把命令结果转换到同一行。又是一痛搜索,发现了tr,可以将换行符\n替换为其他字符,然后输出的结果就都挤在一行里了。再创建一个item随便匹配这一行里随便那个固定的内容并返回,这样就实现了内个Forum里十年来都没解决的问题。同时也填上了一次返回“多行”内容这个坑。

坑n:待定

小技巧一、zabbix内生成关键字的正则表达式

在写item里的logrtkey的时候如果不确定需要匹配的关键字的正则表达式怎么写,可以先去triggers里新建一个trigger,然后在expression区域选择add,我个人一般会在condition弹出窗口内的function下拉菜单内选择find(),然后再V框里输入需要生成正则表达式的关键字,其他选项随便写,然后点insert,这时候zabbix就会自动生成关键字的正则表达式,然后拿着这个正则表达式贴在item的key里就好了,当然我知道zabbix自带正则表达式测试功能,但是我这不没有权限用不了么,只能曲线一把了。

发表评论

  • 评论列表
还没有人评论,快来抢沙发吧~