zoukankan      html  css  js  c++  java
  • 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
     
  • 相关阅读:
    在简单地形上小车运动轨迹的数学表达(一)
    结尾
    第十四章 多线程编程
    第十五章 进程池与线程池
    第十章 信号
    第十一章 定时器
    第十三章 多进程编程
    第八章 高性能服务器程序框架
    KMP 专场 POJ2752
    约瑟夫问题 双链表实现
  • 原文地址:https://www.cnblogs.com/xiaodai12138/p/10159217.html
Copyright © 2011-2022 走看看