• Zabbix自定义监控项与触发器


            当我们需要获取某台主机上的数据时,直接利用 zabbix 提供的模板可以很方便的获得需要的数据,但是有些特别的数据,利用这些现有的模板或监控项是无法实现的,例如网站状态信息的监控、mysql数据库主从状态等信息。这是就需要自己定义键值和监控项,以满足企业对检测数据的需要。

    一、什么是zabbix的key值

            Zabbix 中内置了很多监控参数(Key),我们可以通过在客户端配置文件中定义 key,获取监控对象中的系统、CPU、网络、内存、文件系统等信息。
            Key(键)是 zabbix 标记 item 的键,是一种标识符。利用 key 可以定义一个监控对象,那么这个监控对象肯定是采集数据的,但是采集数据的时候可能存在很多节点与 server 交互,那么需要具体采集哪个节点,就可以用 key 进行采集。

    二、获取远程 key 值

    1.获得主机的 key 值

            监控项(Itens)就是监控指标获取数据的方式、数据类型、更新数据的时间间隔、历史数据保留时间、趋势数据保留时间、监控项的分组等指标。另外一个概念是监控指标,用 key 表示,它是构成监控项的一个元素,在一个主机/模板中必须是唯一的。
            zabbix agent 是利用 key 值获取主机监控数据的,在每个 agent 端的监控项上,都可以找到 zabbix客户端对应的许多 key 值。
            “数据采集”-->“主机”-->“监控项”,可以看到每台主机的监控项中,为了采集对应的主机信息,都有一个键值,利用这个键值,Zabbix就可以获取对应的数据。

    2.zabbix get 命令获取 Agent 数据举例

    (1)zabbix get 获取 cpu 核心数
    1. [root@ZBX ~]# zabbix get -s 192.168.10.101 -k system.cpu.num
    2. 1
    (2)获取目标主机系统和内核版本等参数
    [root@ZBX ~]# zabbix get -s 192.168.10.101 -k system.unameLinux localhost,localdomain 3,10,0-1160.e17.x86 64 #1 SMP Mon Oct 19 16:18:59 UTC 2020x86 64
    (3)查看目标主机端口是否开启
    1. [root@zBX ~]# zabbix_get -s 192.168.10.101 -k net.tcp.port[,22]
    2. 1

    备注:
    1 为开启,0 为关闭

    (4)查看进程是否开启
    1. [root@ZBX ~]# zabbix get -s 192.168.10.101 -k proc.num[sshd]
    2. 9

    备注:

    如果开启,显示对应的进程数

    (5)查看进程是否开启
    1. [root@ZBX ~]# zabbix get -s 192.168.10.101 -k proc.num[sshd]
    2. 9

    备注:
    如果开启,显示对应的进程数

    (6)查看磁盘剩余空间
    1. [root@ZBX ~]# zabbix get -s 192.168.10.101 -p 10050 -k vfs.fs.size[/,pfree]
    2. 97.051317
    (7)查看当前网卡流量
    1. [root@ZBX ~]# zabbix_get -s 192.168.10.101 -k net.if.out[ens33,bytes]
    2. 796888

    备注:
    在不同时间执行两次这个命令,用后面的减去前面的,除以两者之间的时间,得到速率

    (8)获取目标主机内存值
    1. [root@ZBX ~]# zabbix get -s 192.168.10.101 -p 10050 -k vm.memory.size[total]
    2. 3953934336

    备注:
    获取目标主机内存值

    三、Zabbix 自定义 key 值

            使用 zabbix agent 自带的 key 值,我们已经可以监控到很多数据了,但是仍然有一些数据,是 agent的 key 值没有的。对于这些特殊的需求,就要求我们自己定义 key 值。

    1.添加Nginx模块添加

    1. [root@server01 ~]# yum -y install nginx
    2. root@server01 ~l# cd /etc/nginx/
    3. root@server01 ~]# cp nginx.conf.default nginx.conf
    (1)添加 nginx status 模块
    [root@server01 ~l# vim /etc/nginx/nginx.conf

    1. [root@server01 ~]# echo "test"> /usr/share/nginx/html/index.html
    2. [root@server01 ~l# systemctl start nginx

    2.测试是否能够获取到 Nginx 状态

    1. [root@server01 ~]# curl 127.0.0.1/nginx status
    2. Active connections:1
    3. server accepts handled requests
    4. 1 1 1
    5. Reading:0 Writing:1 Waiting:0

    备注:
    Active connections :Nginx正处理的活动链接数1个。

    server :
            accepts:Nginx 启动到现在共处理了16449个连接。
            handled:Nginx启动到现在共成功创建16449次握手。
            requests:Nginx 总共处理了15422 次请求。
    Reading :Nginx 读取到客户端的 Header 信息数

    Writing :Nginx 返回给客户端的 Header 信息数

    Waiting :Nginx 已经处理完正在等候下一次请求指令的驻留链接,开启。

    3.添加监控脚本

    (1)添加脚本
    1. [root@server01 ~]# vim /etc/zabbix/nginx-status.sh
    2. #/bin/bash
    3. NGINX_PORT=80
    4. NGINX_COMMAND=$1
    5. nginx_active(){
    6. /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk '/Active/ {print $NF}'
    7. }
    8. nginx_reading(){
    9. /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk '/Reading/ {print $2}'
    10. }
    11. nginx_writing(){
    12. /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk '/Writing/ {print $4}'
    13. }
    14. nginx_waiting(){
    15. /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk '/Waiting/ {print $6}'
    16. }
    17. nginx_accepts(){
    18. /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk 'NR==3 {print $1}'
    19. }
    20. nginx_handled(){
    21. /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk 'NR==3 {print $2}'
    22. }
    23. nginx_requests(){
    24. /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk 'NR==3 {print $3}'
    25. }
    26. case $NGINX_COMMAND in
    27. active)
    28. nginx_active;
    29. ;;
    30. reading)
    31. nginx_reading;
    32. ;;
    33. writing)
    34. nginx_writing;
    35. ;;
    36. waiting)
    37. nginx_waiting;
    38. ;;
    39. accepts)
    40. nginx_accepts;
    41. ;;
    42. handled)
    43. nginx_handled;
    44. ;;
    45. requests)
    46. nginx_requests;
    47. ;;
    48. *)
    49. echo $"USAGE:$0 {active|reading|writing|waiting|accepts|handled|requests}"
    50. esac
    [root@server01 ~]# chmod+x /etc/zabbix/nginx-status.sh

    4.修改 agent 端参数以支持自定义 key 值

    1. [root@server01 ~]# vim /etc/zabbix/zabbix agentd.confUnsafe
    2. UserParameters=1
    3. UserParameter=nginx status[*],/etc/zabbix/nginx-status.sh $1

    备注:
    UnsafeUserParameters=1:启用自定义key功能

    UserParameter:指定脚本
            nginx_status 为 key 值名称。[*]里写脚本参数,没有可以不写。/etc/zabbix/nginx-status.sh $1 路径为脚本所在路径。

    [root@server01 ~l# systemctl restart zabbix-agent

    5.Zabbix_get 测试

    [root@zabbix ~]# zabbix get -s 192.168.10.101 -k nginx status[accepts]

    6.Zabbix Web 端添加监控

    (1)添加模板

    “数据采集”-->“模板”-->“创建模板”,创建一个名为 Nginx 状态的模板

    (2)为模板添加监控项

            点击“数据采集”,再点击“模板”选项后,找到刚刚创建名为 Nginx 状态的模板,点击“监控项后,再点击“创建监控项”按钮,创建出如下监控项。

    添加监控项
    监控项        nginx active        键值为        nginx status[active]
    监控项        nginx reading        键值为        nginx status[reading]
    监控项        nginx writing        键值为        nginx status[writing]

    监控项        nginx waiting        键值为        nginx status[waiting]
    监控项        nginx accepts        键值为        nginx status[accepts]
    监控项        nginx handled        键值为        nginx status[handled]
    监控项        nginx requests        键值为        nginx status[requests]

     

    7.验证自定义监控

    (1)为主机关联新创建的模板

    “数据采集”-->“主机”,为该主机关联刚才创建的模板。

    (2)为该主机添加新的监控图形

    “数据采集”-->“主机”-->“图形”,创建 nginx active 图形
    备注:
    其他监控项的图形创建方法一样,此处不在一一列举。

     (3)验证自定义监控数据和图形

    “检测”-->“主机”,査看 server01 的检测数据,以及新添加的图形。

    8.为 nginx 监控创建触发器及邮件报警测试

    (1)为模板添加触发器

            点击“数据采集”按钮,再点击“模板”选项,然后点击“nginx-status”模板,选择“触发器选项,点击“创建触发器”按钮
            添加表达式,点击“添加”按钮,在弹出界面里监控项选择 nginx 主机 的“nginx active监控项,功能选择“last-最后(最近)的 T 值,结果大于 N”,N 填写“5”,再点击“插入”按钮。这里的意思是当 Nginx 的活动连接大于 5 时,触发报警。

            注意:由于是实验环境,这里 N可以设置的小一些,便于验证结果,在生产环境中可以根据需求更改。

    (2)添加告警动作和操作

    “告警”-->“动作”-->“触发器动作”,点击创建动作按钮。

    添加触发条件,条件选项触发器,并指定上一步中创建的触发器。

    设置触发器的操作,指定触发后发送报警信息的接收用户。

    (3)触发报警

    模拟多个用户访问网站,使得连接数大于前面设定的报警阈值,并观察邮箱的报警邮件

    备注:
    小技巧:写个无限访问小脚本,在多台主机上执行此脚本,即可模拟出多个用户的连接。

    1. cat <<EOF>fangwenjiaoben.sh
    2. while true
    3. do
    4. curl 192.168.10.101
    5. done
    6. EOF

    四、监控 MySQL 主从复制

    1.部署 mysq1 主从复制

    (1)在两台主机(103 和 104)上安装
    [root@server01 ~]# yum -y install mariadb-server mysql
    (2)主机103当master
    1. [root@server01 ~]# vim /etc/my.cnf
    2. [mysqld]
    3. datadir=/var/lib/mysql
    4. socket=/var/lib/mysql/mysql.sock
    5. server-id=11
    6. log-bin=master-bin
    1. [root@server01 ~]# systemctl start mariadb
    2. [root@server01 ~]# mysqladmin -uroot password 'pwd123'
    1. [root@server01 ~]# mysql:-uroot -ppwd123
    2. MariaDB [(none)>grant replication slave on *.*to root@'%'identified by'pwd123';
    3. MariaDB [(none)>show master status;

    (3)主机 104当slave
    1. [root@server02 ~]# vim /etc/my.cnf
    2. [mysqld]
    3. datadir=/var/lib/mysql
    4. socket=/var/lib/mysql/mysql.sock
    5. server-id=22
    1. [root@server02 ~]# systemctl start mariadb
    2. [root@server02 ~]# mysqladmin -uroot password'pwd123
    3. [root@server02 ~]# mysql -uroot -ppwd123
    1. MariaDB [(none)]> change master to
    2. master host='192.168.10.101',master user='root',master password='pwd123',master logfile='master-bin.000001',master log pos=385;
    1. MariaDB [(none)]> start slave;
    2. MariaDB [(none)]> show slave status\G
    3. *************************** 1. row ***************************
    4. Slave_IO_State: Waiting for master to send event
    5. Master_Host: 192.168.10.101
    6. Master_User: root
    7. Master_Port: 3306
    8. Connect_Retry: 60
    9. Master_Log_File: master-bin.000003
    10. Read_Master_Log_Pos: 522
    11. Relay_Log_File: mariadb-relay-bin.000003
    12. Relay_Log_Pos: 530
    13. Relay_Master_Log_File: master-bin.000003
    14. Slave_IO_Running: Yes
    15. Slave_SQL_Running: Yes
    16. Replicate_Do_DB:
    17. Replicate_Ignore_DB:
    18. Replicate_Do_Table:
    19. Replicate_Ignore_Table:
    20. Replicate_Wild_Do_Table:
    21. Replicate_Wild_Ignore_Table:
    22. Last_Errno: 0
    23. Last_Error:
    24. Skip_Counter: 0
    25. Exec_Master_Log_Pos: 522
    26. Relay_Log_Space: 1111
    27. Until_Condition: None
    28. Until_Log_File:
    29. Until_Log_Pos: 0
    30. Master_SSL_Allowed: No
    31. Master_SSL_CA_File:
    32. Master_SSL_CA_Path:
    33. Master_SSL_Cert:
    34. Master_SSL_Cipher:
    35. Master_SSL_Key:
    36. Seconds_Behind_Master: 0
    37. Master_SSL_Verify_Server_Cert: No
    38. Last_IO_Errno: 0
    39. Last_IO_Error:
    40. Last_SQL_Errno: 0
    41. Last_SQL_Error:
    42. Replicate_Ignore_Server_Ids:
    43. Master_Server_Id: 11
    44. 1 row in set (0.00 sec)

    2.MySQL-slave 端开启自定义 key 值并设置

    1. [root@server02 ~]# vim /etc/zabbix/zabbix agentd.conf
    2. UnsafeUserParameters=1
    3. UserParameter=mysql.slave[*],/etc/zabbix/mysql-slave.sh

    3.编写脚本获取数据

    1. [root@server02 ~]# vim /etc/zabbix/mysql-slave.sh
    2. #!/bin/bash
    3. /usr/bin/mysql-ppwd123-uroot"showslavestatus\G'grep-E-e"slave Io Runninglslave SoL Running" awk '{print $2}'grep -c Yes
    1. [root@server02 ~]# chmod +x /etc/zabbix/mysql-slave.sh
    2. [root@server02 ~]# systemctl restart zabbix-agent

    4.Zabbix get 测试

    1. [root@zabbix ~]# zabbix get -s 192.168.10.102 -k mysql.slave[*]
    2. 2

    备注:
    Slave_IO_ Runningt 和Slave_SoL_Running 返回的yes 值为2

    5.添加监控模板

    “数据采集”-->“模板”,再点击“创建模板”按钮,进行创建模板操作。

    6.为模板添加监控项

    “数据采集”-->“模板”,点击刚才创建的模板,为此模板添加“监控项”信息,名称输入“mysql-slave”键值输入“mysql.slave[*]”,然后点击“添加”按钮。

    7.为主机关联模板

    为 server02 主机关联刚才创建的监控模板

    8.为模板添加触发器

            "数据采集”-->“模板”,找到刚才创建的模板 mysql-slave,点击“触发器”,再点击“创建触发器”。

            在监控项中点击“选择”按钮,选择前面创建的 mysql-slave 监控项,在功能处点击下拉菜单,选择“last-最后(最近)的 T 值”,结果为

    (1)添加告警动作和操作

    “告警”-->“动作”-->“触发器动作”

    条件选项触发器,并指定上一步中创建的触发器

    9.测试

    关闭 mysq1 从节点的 slave 进程

    1. [root@server02 ~]# mysql -uroot -ppwd123
    2. MariaDB [(none)l>stop slave;

    观察报警信息

    五、监控网站关键词

    监控网站关键词与监控 Nginx 大致相同,都是编写检索字段的脚本,然后 web 端添加监控。

    1.创建测试页面

    1. [root@server01 ~]# vim /usr/share/nginx/html/index.html
    2. <html>
    3. <body>
    4. <p>nihao 黄 nihao</p>
    5. <p>nihao 赌 nihao</p>
    6. <p>nihao 毒 nihao</p>
    7. </body>
    8. </html>

    2.编写检索脚本

    1. [root@server01 ~]#vim /etc/zabbix/gic.sh
    2. #/bin/bash
    3. curl -s http://192.168.10,101/index.htmllgrep -e 黄-e赌-e毒lwc -l
    [root@server01 ~]# chmod +x /etc/zabbix/gjc.sh

    3.开启 Agent 的自定义 key 值

    1. [root@server01 ~]# vim /etc/zabbix/zabbix agentd.conf
    2. UnsafeUserParameters=1
    3. UserParameter=nginx gjc*l,/etc/zabbix/gjc.sh
    [root@server01 ~]# systemctl restart zabbix-agent

    4.在管理界面添加模板

    “数据采集”-->“模板”,点击创建模板,在此界面配置“关键词检索模板”,添加模板相关信息。

    5.为模板添加监控项

    “数据采集”-->“模板”,找到刚才创建的模板,点击它的监控项,并创建监控项,键值为 nginx_gjc。

    6.将模板关联到主机

    “数据采集”-->“主机”,找到 nginx 的服务器,为此主机关联刚才创建的模板。

    7.为模板添加触发器

    “数据采集”-->“模板”,找到此模板,点击它的触发器,为此模板创建触发器。

    8.Zabbix_get 测试

    1. [root@zBX ~]# zabbix get -s 192.168.10.101 -k nginx gjc[*]
    2. 3

    9.添加告警动作和操作

    告警-->动作-->触发器动作,创建 server01 的告警动作和操作。

    10.查看触发的告警信息

    注意:
    如果有告警信息,但是不发送邮件,可以先把nginx 关掉,再打开,重新触发一。

  • 相关阅读:
    MySQL性能优化(硬件,系统配置,表结构,SQL语句)
    笔记本电脑恢复删除数据的5种方法
    【老生谈算法】matlab实现LMS算法的自适应滤波算法源码——自适应滤波
    uniapp的两个跳转方式
    2023.10月网络优化项目实战
    火车卖票---Ticketer类
    【数据结构】红黑树
    07 Tomcat 请求处理流程详解,Tomcat 请求流程设计架构
    【无标题】【教3妹学编程-算法题】2918. 数组的最小相等和
    Nginx 平滑升级方案 1.21.0升级至1.23.2
  • 原文地址:https://blog.csdn.net/henanchenxuyuan/article/details/142125372