Zabbix自定义监控项与触发器

news2024/11/14 12:10:27

        当我们需要获取某台主机上的数据时,直接利用 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 核心数
[root@ZBX ~]# zabbix get -s 192.168.10.101 -k system.cpu.num
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)查看目标主机端口是否开启
[root@zBX ~]# zabbix_get -s 192.168.10.101 -k net.tcp.port[,22]
1

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

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

备注:

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

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

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

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

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

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

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

三、Zabbix 自定义 key 值

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

1.添加Nginx模块添加

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

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

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

[root@server01 ~]# curl 127.0.0.1/nginx status
Active connections:1
server accepts handled requests
1 1 1
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)添加脚本
[root@server01 ~]# vim /etc/zabbix/nginx-status.sh
#/bin/bash 
NGINX_PORT=80 
NGINX_COMMAND=$1 
nginx_active(){ 
/usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk '/Active/ {print $NF}' 
}
nginx_reading(){ 
/usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk '/Reading/ {print $2}' 
}
nginx_writing(){ 
/usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk '/Writing/ {print $4}' 
}
nginx_waiting(){ 
/usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk '/Waiting/ {print $6}'
}
nginx_accepts(){ 
/usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk 'NR==3 {print $1}' 
}
nginx_handled(){ 
/usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk 'NR==3 {print $2}' 
}
nginx_requests(){ 
/usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk 'NR==3 {print $3}' 
}
case $NGINX_COMMAND in 
active) 
nginx_active; 
;; 
reading) 
nginx_reading; 
;; 
writing) 
nginx_writing; 
;; 
waiting) 
nginx_waiting; 
;; 
accepts) 
nginx_accepts; 
;; 
handled) 
nginx_handled; 
;; 
requests) 
nginx_requests; 
;; 
*) 
echo $"USAGE:$0 {active|reading|writing|waiting|accepts|handled|requests}" 
esac 

[root@server01 ~]# chmod+x /etc/zabbix/nginx-status.sh

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

[root@server01 ~]# vim /etc/zabbix/zabbix agentd.confUnsafe
UserParameters=1
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)触发报警

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

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

cat <<EOF>fangwenjiaoben.sh
while true
do
curl 192.168.10.101
done
EOF

四、监控 MySQL 主从复制

1.部署 mysq1 主从复制

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

(3)主机 104当slave
[root@server02 ~]# vim /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
server-id=22
[root@server02 ~]# systemctl start mariadb
[root@server02 ~]# mysqladmin -uroot password'pwd123
[root@server02 ~]# mysql -uroot -ppwd123
MariaDB [(none)]> change master to
master host='192.168.10.101',master user='root',master password='pwd123',master logfile='master-bin.000001',master log pos=385;
MariaDB [(none)]> start slave;
MariaDB [(none)]> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.10.101
                  Master_User: root
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master-bin.000003
          Read_Master_Log_Pos: 522
               Relay_Log_File: mariadb-relay-bin.000003
                Relay_Log_Pos: 530
        Relay_Master_Log_File: master-bin.000003
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 522
              Relay_Log_Space: 1111
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 11
1 row in set (0.00 sec)

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

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

3.编写脚本获取数据

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

4.Zabbix get 测试

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

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

5.添加监控模板

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

6.为模板添加监控项

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

7.为主机关联模板

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

8.为模板添加触发器

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

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

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

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

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

9.测试

关闭 mysq1 从节点的 slave 进程

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

观察报警信息

五、监控网站关键词

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

1.创建测试页面

[root@server01 ~]# vim /usr/share/nginx/html/index.html
<html>
<body>
<p>nihao 黄 nihao</p>
<p>nihao 赌 nihao</p>
<p>nihao 毒 nihao</p>
</body>
</html>

2.编写检索脚本

[root@server01 ~]#vim /etc/zabbix/gic.sh
#/bin/bash
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 值

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

4.在管理界面添加模板

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

5.为模板添加监控项

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

6.将模板关联到主机

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

7.为模板添加触发器

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

8.Zabbix_get 测试

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

9.添加告警动作和操作

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

10.查看触发的告警信息

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2125730.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

上门家政做饭系统小程序开发概览

上门做饭系统是一种融合了现代科技手段的创新餐饮服务模式&#xff0c;旨在为用户提供便捷且个性化的上门烹饪体验。通过互联网技术&#xff0c;这一系统连接了专业的私人厨师与有需求的家庭或个人&#xff0c;让高品质的餐饮服务更加触手可及。编辑&#xff1a;qawsed2466 核心…

【C++】优先级队列反向迭代器的实现

一、优先级队列&#xff1a; 优先级队列&#xff08;priority queue&#xff09;是一种容器适配器&#xff0c; 它默认使用vector作为其底层存储数据的容器&#xff0c;在vector上又使用了堆算法将vector中元素构造成堆的结构&#xff0c;因此priority_queue就是堆&#xff0c;…

Rust 助力无服务器构筑云计算新引擎

引言 今年 Amazon Lambda 迎来了它的第一个十周年。在过去的十年里&#xff0c;无服务器架构改变了软件开发的方式&#xff0c;简化了应用程序的部署和扩展&#xff0c;成为云计算的新引擎。而在众多支持无服务器技术的编程语言中&#xff0c;Rust 以其卓越的安全性和高性能成…

项目管理工作流是什么?项目管理工作流管理实战技巧!

项目管理工作流是指在协作过程中通过限制任务状态的流转进行流程控制的一种方式。项目从启动到完成所经历的一系列有序、可控的步骤和流程&#xff0c;它详细描述了项目执行过程中各项任务和活动的顺序、依赖关系、责任人以及完成标准等&#xff0c;是项目成功执行的重要保障。…

java设计模式 桥接模式

桥接模式&#xff08;Bridge Pattern&#xff09;是一种结构型设计模式&#xff0c;旨在将抽象部分与其实现部分分离&#xff0c;使它们都可以独立地变化。桥接模式通过将继承改为组合&#xff0c;实现了在不修改现有类的情况下&#xff0c;动态地切换和扩展抽象类与其具体实现…

Windows 平台安装 Nacos 2.x

环境准备 64 位操作系统&#xff0c;Windows 10 / Linux Centos 7JDK 1.8 安装包下载 安装包下载官方地址&#xff1a;https://github.com/alibaba/nacos/releases 启动 将安装包解压到安装的目录下&#xff0c;改名为 nacos-2.0.4。然后进行到 bin 目录下&#xff0c;打开…

数据集 Look into Person (LIP) 是最流行的单人人体语义分割 >> DataBall

开源数据集 Look into Person (LIP) 是最流行的单人人体语义分割 深度学习 Look into Person (LIP) 是最流行的单人人体分割数据集&#xff0c;它使用像素级注释进行注释&#xff0c;具有19个语义人体部分标签和一个背景标签。LIP包含50,462个带注释的图像&#xff0c;分为30,4…

CAN集线器(工业级、隔离式)

型号&#xff1a; MS-HUB-C 概述 MS-HUB 是一款可通过一路 CAN &#xff0c;一路 RS-232为主口扩展出 7 路 CAN 从口的工业级光电隔离型 CAN 分配器。可以有效的实现 CAN 网络的中继、扩展与隔离。采用先进的自动流控技术自动侦测CAN 信号流向。MS-HUB 具备光电隔离功能&#x…

UEFI学习笔记(二):edk2构建编译流程

UEFI入门&#xff08;二&#xff09;&#xff1a;edk2项目编译流程 一、Build流程框架Build的三个阶段&#xff1a;1、Autogen2、Make3、ImageGen 二、编译构建步骤&#xff1a;1. 安装依赖工具2. 初始化构建环境3. 配置工具链和目标4. 定义平台配置5. 构建并编译 三、uefi-too…

怎么通过Java实现和数据库的连接???(附带练习)

JDBC 今日目标 掌握JDBC的的CRUD理解JDBC中各个对象的作用掌握Druid的使用 1&#xff0c;JDBC概述 在开发中我们使用的是java语言&#xff0c;那么势必要通过java语言操作数据库中的数据。这就是接下来要学习的JDBC。 1.1 JDBC概念 JDBC 就是使用Java语言操作关系型数据库的…

STL-stack/queue/deque(容器适配器)

目录 ​编辑 STL-stack 150. 逆波兰表达式求值 stack queue std::stack deque 性能测试 结构 STL-stack 栈的压入、弹出序列_牛客题霸_牛客网输入两个整数序列&#xff0c;第一个序列表示栈的压入顺序&#xff0c;请判断第二个序列是否可能为该栈的弹出顺序。假。题目…

TESSY创建以及设计一个测试用例

我们以tessy5.1 IDE为例&#xff0c;给大家展示编写一个测试用例的过程。 还不会创建工程的&#xff0c;可以参考以下这篇文章&#xff1a; TESSY创建单元测试或集成测试工程_tessy 集成测试-CSDN博客 接下来我们以这个作为开始状态进行介绍 1、添加源文件 2、添加头文件路径…

存储型XSS漏洞

1.介绍 存储型XSS攻击是一种常见的网络攻击&#xff0c;也称为持久型XSS攻击。与反射型XSS攻击不同&#xff0c;存储型XSS攻击将恶意代码存储在服务器端或数据库中&#xff0c;当其他用户访问该网页时&#xff0c;恶意代码会被执行&#xff0c;导致用户的信息被窃取或造成其他…

Redis相关命令详解

目录 一、认识Redis 二、string 1、重要知识 2、基础命令 3、Key值的设置 三、list 1、重要知识 2、存储结构 3、基础命令 4、list的应用场景 四、hash 1、重要知识 2、基础命令 五、set 1、重要知识 2、基础命令 3、具体应用 六、zset 1、重要知识 2、…

“禁塑行动·我先行”广州绿葆网络发展有限公司与辽宁省慈善联合总会共谱环保新篇章

2024年9月9日&#xff0c;在国家大力推进生态文明建设、全面实施禁塑令政策的大背景下&#xff0c;农工同心公益基金“禁塑行动我先行”公益捐赠辽宁省启动仪式在辽宁省成功举办。此次活动由辽宁省慈善联合总会、农工党辽宁省委会主办&#xff0c;辽宁省慈善联合总会农工同心公…

MUR2060CT-ASEMI快恢复二极管MUR2060CT

编辑&#xff1a;ll MUR2060CT-ASEMI快恢复二极管MUR2060CT 型号&#xff1a;MUR2060CT 品牌&#xff1a;ASEMI 封装&#xff1a;TO-220AB 安装方式&#xff1a;插件 批号&#xff1a;最新 恢复时间&#xff1a;35ns 最大平均正向电流&#xff08;IF&#xff09;&#…

噪声的消除

开关电源的干扰一般是几十K到几百K&#xff1a; 【电源噪声查不出来&#xff1f;不用上板子&#xff0c;滤波器仿真就能搞定】https://www.bilibili.com/video/BV12v411r798?vd_source3cc3c07b09206097d0d8b0aefdf07958 村田消除噪声的仿真软件&#xff1a; SimSurfing - 村…

Kafka原理剖析之「Topic创建」

一、前言 Kafka提供了高性能的读写&#xff0c;而这些读写操作均是操作在Topic上的&#xff0c;Topic的创建就尤为关键&#xff0c;其中涉及分区分配策略、状态流转等&#xff0c;而Topic的新建语句非常简单 bash kafka-topics.sh \ --bootstrap-server localhost:9092 \ // …

QT设置闹钟超时播报

头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QTimerEvent> #include<QTime> #include<QTextToSpeech>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic…

mysql 之 information_schema

information_schema 是 MySQL 中的一个特殊数据库&#xff0c;它提供了关于 MySQL 服务器中所有数据库、表、列、索引、存储过程、函数、触发器等对象的元数据信息。information_schema 是一个只读数据库&#xff0c;主要用于查询数据库的结构信息&#xff0c;而不是存储用户数…