zabbix自定义监控,自定义图表。

zabbix server:
hostname=Zabbix server

ip:192.168.100.7

 

zabbix agent:

hostname=host3

ip:192.168.100.3

 

目前状态如下,使用的全是zabbix自带的监控插件,在某些情况下,我们自己的一些应用,或者系统上的一些值无法被zabbix监控,这时,需要自定义一些监控项,监控项可以直接使用shell命令,bash脚本,开发语言来生成,最终结果是需要返回一个值,交给zabbix进行监控,然后进行一系列操作,下面,跟随本文开始配置。

 

 

 

自定义监控:

#在zabbix agent端通过某种手段取得值,然后zabbix_agent把值传给server端,或者server端自己来取,server端通过这个值,进行分析判断,建立图表,根据值的变化做报警等。

 

情况1:服务器上存在nginx服务(如下),监听端口8219,zabbix不提供此端口监控,需要自定义一个监控项来监控此端口的可用性。

[root@host3 [17:49:02]~]#netstat -antp |grep nginx
tcp        0      0 0.0.0.0:8219                0.0.0.0:*                   LISTEN      15246/nginx         

 

新建如下脚本

#echo $?    必须存在,显示的结果就是这个脚本返回的结果。

[root@host3 [17:52:29]~]#cat /shell/nginx_status.sh
curl \-'I' localhost:8219/abc \--connect-timeout 2 &>/dev/null
echo $?

执行此脚本测试

#返回的值是0代表本地的8219端口是可以正常连接的。

[root@host3 [17:52:31]~]#bash /shell/nginx_status.sh 
0

编辑zabbix_agentd.conf 配置文件,增加下方配置。

#关键词 UserParameter 定义一个key=nginx_status ,values=(key后方命令的结果`echo  $?`)       

#key

#定义完毕后,重启zabbix_agentd 服务,才可生效

[root@host3 [17:58:08]~]#cat /usr/local/zabbix/etc/zabbix_agentd.conf |grep nginx
UserParameter=nginx_status,bash /shell/nginx_status.sh

 

Server端可用命令连接Agent端来获取这个值,看是否可以正常获取到数据,这个步骤正常进行后,再添加到网页端上,进行监控。

#-s 指定agent端地址,-k指定key

[root@Centos7 bin]# ./zabbix_get  -s 192.168.100.3  -k nginx_status
0

 

server端可以正常获取值后,在网页端上添加针对这个值的监控。

 

根据监控项查看是否获取到了对应的结果。

 

 

 

情况2 : 记录mysql的连接数信息,后根据此图做图表。

 

编辑agent配置文件,并重启agentd端

#Threads 代表连接数

[root@host3 [20:55:12]~]#mysqladmin -uroot -pnihao123! status
Uptime: 86 Threads: 1 Questions: 12 Slow queries: 0 Opens: 15 Flush tables: 1 Open tables: 8 Queries per second avg: 0.139

[root@host3 [20:57:08]~]#cat /usr/local/zabbix/etc/zabbix_agentd.conf  | grep mysql
UserParameter=mysql_Threads,mysqladmin -uroot -pnihao123! status |awk '{print $4}'

 

 

#使用zabbix_get命令来检查key是否设置成功,看是否有values,这一步建议是必须做的,且这个例子下,你可以自己完成,熟悉下命令。

 

添加监控项

 

 

 

 

 

情况3 : 监控系统的tcp连接条数,记录TIME_WAIT ,ESTABLISHED等连接状态的连接数。

 

 

编辑获取连接数脚本

#  2>/dev/null 默认启动zabbix agentd进程的不是root用户,导致执行netstat命令时,是看不到进程名称的,会报一个权限不足,但是还是会把我们有权限看的给打印出来,我们只需要看状态码,所以把权限不足错误给关闭。

#根据$1 传入的位置变量来过滤连接状态,总结并返回行数,代表有多少条这样的连接

#如果$1为空,就返回0,不执行查询操作

[root@host3 [20:16:17]/shell]#cat /shell/tcp.sh
#!/bin/bash
if [ ! $1 ];
then
echo 0
exit
fi
netstat -'antp' 2>/dev/null   |awk '{print $6}'| grep $1 |wc -l

 

编辑agentd端配置文件,并重启agentd端。

#  key[*]      获取key时可附带参数,将作为获取values时传入的位置参数,从而被脚本读取

[root@host3 [19:58:21]/usr/local/zabbix/etc]#cat zabbix_agentd.conf |grep tcp
UserParameter=tcp_status[*],bash /shell/tcp.sh  $1

 

 

 

server端,获取key 测试.

[root@Centos7 bin]# ./zabbix_get  -s 192.168.100.3 -k "tcp_status[ESTABLISHED]"
3
[root@Centos7 bin]# ./zabbix_get  -s 192.168.100.3 -k "tcp_status[TIME_WAIT]"
33

 

在网页端添加监控项

查看获取到的values

#values 是0因为我们没有传入任何位置参数给脚本,脚本判断没有位置参数就返回一个0,那么怎么定义位置参数传入脚本呢-在看完此例子后接着阅读下方的自定义图表

 

 

 

 自定义图表:

1.通过mysql连接数来制作第一个图表。

查看图表

 

 

2.创建监控多种连接状态的图表。

#调整之前的connect_status(tcp_status) 监控

原有:

现有:

#传入位置参数:ESTABLISHED ,代表,查询ESTABLISHED的连接数。

#ESTABLISHED是一种连接状态,如果要获取更多的连接状态的条数,再创建一个一样的监控项,只需要改传入的参数。

 

 

添加监控项:

#同时添加2个监控

 

查看监控

 

 

 

这里还有一些个小知识点:

1.你可以看到上图中的connect_status[ESTABLISHED] 现在的值是9,代表有9个ESTABLISHED(已建立的)连接,但是系统中,实际看一下已建立连接,一直是少一个的。

[root@host3 [21:51:15]/shell]#netstat -antp |grep ESTABLISHED |wc -l
8

 

因为目前已建立的连接是8个,当zabbix-server请求获取数据时,会向agent建立连接,建立连接后,server端执行此命令后会看到9个已建立连接(把自己跟agent端建立的连接也计算在内),计算机计算速度很快,当你去agent上去手动查看有多少连接时,这个连接已经是TIME_OUT状态了。

 

2.上图中的connect_status[TIME_WAIT]值最大的时候是12,但是突然一下就降为2以下。

在主动模式中,server端会频繁的向agent端请求数据,每次都是开启一个新的连接,而且是一直在请求,那么这种情况,你可能会想到通过设置长连接来保持连接就行了,但是,很抱歉,zabbix不支持长连接~

无奈,软件不支持长连接,只能让我们的系统来延长连接时间了。

net.ipv4.tcp_keepalive_time = 1800  #tcp连接时间保持1800秒
net.ipv4.tcp_tw_recycle = 1         #回收TIME_WAIT占用的连接
[root@host3 [22:06:14]/shell]#tail -2 /etc/sysctl.conf 
net.ipv4.tcp_keepalive_time = 1800
net.ipv4.tcp_tw_recycle = 1
[root@host3 [21:40:57]/shell]#sysctl -p
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.ipv4.tcp_keepalive_time = 1800
net.ipv4.tcp_tw_recycle = 1

 

 

 

posted @ 2018-12-21 22:09  xiaodai12138  Views(973)  Comments(0Edit  收藏  举报