很多同行都推荐了一个运维系统zabbix,我也开始将服务器监控逐渐迁移到zabbix上了,越使用越觉得zabbix好用,特别是discovery功能,真是好东东啊!
起因是部署服务的同事,发给我了一份监控需求,总共有13个redis、9个memcache、30+个tomcat、8个nginx需要监控,看着长长的单子,我觉得这就是个杯具啊!特别是某些机器上装了2~4个redis,用过cacti监控redis的都知道,除了第一个能多选,后面的只能一个个添加图形,这要是挨个点下来,手都得断了,当然会用cacti脚本的牛人是能搞定的,可惜我不是牛人啊!
果断转移到zabbix,用discovery创建监控。不废话了,以监控nginx为例,跟大家分享下。
第一步:建Template
图片其他部分都是默认,而且涉及公司信息,就不贴出来了
第二步:建discovery
第三步:建item prototypes
这是其中一个数值,其余的类似,没贴的部分都是默认
第四步:加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分钟执行一次,然后就等着看图吧。
贴上两个模版,希望对大家有用