很多同行都推荐了一个运维系统zabbix,我也开始将服务器监控逐渐迁移到zabbix上了,越使用越觉得zabbix好用,特别是discovery功能,真是好东东啊!

   起因是部署服务的同事,发给我了一份监控需求,总共有13个redis、9个memcache、30+个tomcat、8个nginx需要监控,看着长长的单子,我觉得这就是个杯具啊!特别是某些机器上装了2~4个redis,用过cacti监控redis的都知道,除了第一个能多选,后面的只能一个个添加图形,这要是挨个点下来,手都得断了,当然会用cacti脚本的牛人是能搞定的,可惜我不是牛人啊!

   果断转移到zabbix,用discovery创建监控。不废话了,以监控nginx为例,跟大家分享下。

第一步:建Template


使用zabbix discovery和traps批量监控nginx、redis等_discovery

图片其他部分都是默认,而且涉及公司信息,就不贴出来了


第二步:建discovery

使用zabbix discovery和traps批量监控nginx、redis等_监控_02

第三步:建item prototypes

使用zabbix discovery和traps批量监控nginx、redis等_服务器_03

   这是其中一个数值,其余的类似,没贴的部分都是默认

第四步:加trigger、加graph,和加item都类似,我就偷个懒,不贴图了

第五版:把要监控的nginx所在的服务器link刚才的Template,也不用我贴图了吧



   页面上的操作就这些了,下面就该写脚本了。因为要给公司服务器信息保密,我就不贴脚本了。其实脚本都很简单,大家分分钟就能写出来。

第一个脚本:既然是要通过traps添加,肯定得有个发送traps的脚本喽,这个脚本很简单:先产生这样的输出:

{
"data":[
       {"{#NGX_PORT}":"12001"},

       {"{#NGX_PORT}":"12002"}

    ]
}'

再用zabbix_sender发送到zabbix server

/usr/local/zabbix/bin/zabbix_sender -c /usr/local/zabbix/etc/zabbix_agentd.conf -k nginx.port.discovery -v -s $nginxhost -o $portstr

执行这个脚本,然后在host里就能看见创建的item,trigger,graph了。

   注意,每次你修改了template,就得重新执行一次这个脚本,这样host里的item等才能更新。


第二个脚本:获得nginx status数据,并用zabbix_sender发送

curl $nginxsta_url获得数据,并生成这样一个txt:

   hostname nginx.write[12001] values

   .....

再用zabbix_sender 发送这个txt即可。这样发送数据的效率比较高,当监控项多的时候就很明显了。

然后把这个脚本放到crontab里,5分钟执行一次,然后就等着看图吧。


   贴上两个模版,希望对大家有用