我们在做自定义监控项的时候,一个一个取比较麻烦,取出一个数值,就要把该数值相关信息以一定格式写入/etc/zabbix/zabbix_agentd.d/下的配置文件里,当遇到需要取很多数值的时候,这样的操作会很繁琐,当有一种简单方法可以取很多数值的时候,这样叠加这些感觉效率又很低,所以我们可以采取脚本取数值的方式去取我们要监控的数值。

目录

用脚本自定义监控项

1、书写脚本进行取值

2、修改zabbix客户端配置文件

3、zabbix创建模板及监控项

4、关联至被监控主机

监控MySQL状态信息

1、使用脚本定义监控项

2、服务端创建MySQL监控模板

3、添加触发器

4、配置图形

5、关联至被监控的主机

6、测试并查看数据 


用脚本自定义监控项

我们先以Nginx为例,当Nginx取的值比较多时,可以用脚本方式使我们的条例清晰

1、书写脚本进行取值

[root@Web01 ~]# cat /etc/zabbix/zabbix_agentd.d/nginx.sh
#!/bin/sh
case $1 in
	active)
	curl -s 127.0.0.1:88/nginx_status|awk 'NR==1{print $NF}'
	;;
	accepts)
	curl -s 127.0.0.1:88/nginx_status|awk 'NR==3{print $1}'
	;;
	handled)
	curl -s 127.0.0.1:88/nginx_status|awk 'NR==3{print $2}'
	;;
	requests)
	curl -s 127.0.0.1:88/nginx_status|awk 'NR==3{print $3}'
	;;
	*)
	echo "Usage: $0 [active|accepts|handled|requests]"
esac
[root@Web01 ~]# chmod +x /etc/zabbix/zabbix_agentd.d/nginx.sh    #增加执行权限

2、修改zabbix客户端配置文件

[root@Web01 ~]# cat /etc/zabbix/zabbix_agentd.d/nginx.conf
UserParameter=nginx.[*],sh /etc/zabbix/zabbix_agentd.d/nginx.sh $1

#用[*]实现可以自定义内容的效果,zabbix自带的监控端口就是这个原理,可以自己填端口
#经测试里面的脚本必须使用sh运行,用绝对路径+给可执行权限不行,不知道zabbix之前版本行不行,反正5.0版本不行

 3、zabbix创建模板及监控项

zabbix 脚本执行命令失败 zabbix自定义脚本_脚本自定义监控项

zabbix 脚本执行命令失败 zabbix自定义脚本_运维_02

4、关联至被监控主机

zabbix 脚本执行命令失败 zabbix自定义脚本_zabbix_03

成功监控! 

zabbix 脚本执行命令失败 zabbix自定义脚本_zabbix_04

监控MySQL状态信息

我们此次监控MySQL尝试使用脚本自定义监控项,监控MySQL状态信息

通过命令查看MySQL状态信息是show global status,通过awk取值进行监控

[root@DB01 ~]# mysql -uroot -e 'show global status'
+------------------------------------------+-------------+
| Variable_name                            | Value       |
+------------------------------------------+-------------+
| Aborted_clients                          | 0           |
| Aborted_connects                         | 18926       |
| Access_denied_errors                     | 0           |
| Aria_pagecache_blocks_not_flushed        | 0           |
| Aria_pagecache_blocks_unused             | 15737       |
| Aria_pagecache_blocks_used               | 0           |
| Aria_pagecache_read_requests             | 0           |
......
Threads_connected          # 连接数
Com_select                 # 查询总量
Com_insert                 # 插入总量
Com_update                 # 更新总量
Com_delete                 # 删除总量
Bytes_received             # 流入总流量
Bytes_sent                 # 流出总流量
Slow_queries               # 慢查询总量

1、使用脚本定义监控项

[root@DB01 ~]# cat /etc/zabbix/zabbix_agentd.d/mysql.sh
mysql -uroot -e 'show global status;'|grep -w $1|awk '{print $NF}'
[root@DB01 ~]# cat /etc/zabbix/zabbix_agentd.d/mysql.conf
UserParameter=mysql.[*],sh /etc/zabbix/zabbix_agentd.d/mysql.sh $1

#服务端测试
[root@Zabbix ~]# zabbix_get -s 172.16.1.51 -k mysql.[Threads_connected]
1

2、服务端创建MySQL监控模板

zabbix 脚本执行命令失败 zabbix自定义脚本_zabbix_05

zabbix 脚本执行命令失败 zabbix自定义脚本_脚本自定义监控项_06

其他自定义的值可以根据需求自行添加,此处省略......

再添加个zabbix自带的端口监控

zabbix 脚本执行命令失败 zabbix自定义脚本_zabbix 脚本执行命令失败_07

最终完成添加

zabbix 脚本执行命令失败 zabbix自定义脚本_zabbix 脚本执行命令失败_08

3、添加触发器

zabbix 脚本执行命令失败 zabbix自定义脚本_zabbix监控_09

4、配置图形

zabbix 脚本执行命令失败 zabbix自定义脚本_运维_10

5、关联至被监控的主机

zabbix 脚本执行命令失败 zabbix自定义脚本_脚本自定义监控项_11

zabbix 脚本执行命令失败 zabbix自定义脚本_zabbix监控_12

6、测试并查看数据 

zabbix 脚本执行命令失败 zabbix自定义脚本_zabbix 脚本执行命令失败_13

如果添加了上面我列举的那些监控项,可以通过运行下面的脚本生成出一些数据

[root@web02 ~]# cat mysql.sh
for i in `seq 100`
do
mysql -uroot -e "create database IF NOT EXISTS db;
use db;
DROP TABLE IF EXISTS test${i};
create table test${i}(id int);
insert into db.test${i} values (123456);
select * from db.test${i};
delete from test${i} where id=123456;"
done

我是koten,10年运维经验,持续分享运维干货,感谢大家的阅读和关注!