Zabbix自定义监控项与触发器
文章目录
- Zabbix自定义监控项与触发器
- 资源列表
- 基础环境
- 前言
- 一、什么是zabbix的Key值
- 二、获取远程Key值
- 2.1、获得主机的Key值
- 2.2、被监控端安装Agent
- 2.3、zabbix_get命令获取Agent数据举例
- 2.3.1、zabbx_get获取cpu核心数
- 2.3.2、获取目标主机系统和内核版本参数
- 2.3.3、查看目标端口是否开启
- 2.3.4、查看进程是否开启
- 2.3.5、查看磁盘剩余空间
- 2.3.6、查看当前网卡流量
- 2.3.7、获取目标主机内存值
- 三、Zabbix自定义key值
- 3.1、添加Nginx模块支持
- 3.1.1、安装nginx
- 3.1.2、添加nginx_status模块
- 3.2、测试首付能够获取到Nginx状态
- 3.3、添加监控脚本
- 3.3.1、添加脚本
- 3.3.2、重启zabbix-agent
- 3.4、修改agent端参数以支持自定义key值
- 3.5、Zabbix_get测试
- 3.6、Zabbix Web端添加监控
- 3.6.1、添加告警媒介
- 3.6.2、设置报警发送给用户
- 3.6.3、添加模块
- 3.6.4、为模板添加监控项
- 3.7、验证自定义监控
- 3.7.1、为主机关联新创建的模板
- 3.7.2、为该主机添加新的监控图形
- 3.7.3、验证自定义监控数据和图形
- 3.8、为nginx监控创建触发器及邮件报警测试
- 3.8.1、为模板添加触发器
- 3.8.2、添加告警动作和操作
- 3.8.3、触发报警
资源列表
操作系统 | 配置 | 主机名 | IP |
---|---|---|---|
CentOS 7.9 | 2C4G | zbx | 192.168.93.101 |
CentOS 7.9 | 2C4G | server01 | 192.168.93.102 |
CentOS 7.9 | 2C4G | server02 | 192.168.93.103 |
基础环境
- 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
- 关闭内核安全机制
setenforce 0
sed -i "s/^SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config
前言
- 当我们需要获取某台主机上的数据时,直接利用zabbix提供的模板可以很方便的获得需要的数据,但是有些特别的数据,利用这些现有模板或监控项是无法实现的,例如网站状态信息的监控、mysql数据库主从状态等信息 。这时就需要自己定义键值和监控项,以满足企业对检测数据的需要。
一、什么是zabbix的Key值
- Zabbix中内置了很多监控参数(Key),我们可以通过在客户端配置文件中定义Key,获取监控对象中的系统、CPU、网络、内存、文件系统等信息。
- Key(键)是zabbix标记item的键,是一种标识符。利用Key可以定义一个监控对象,那么这个监控对象肯定是采集数据的,但是采集数据的时候可能存在很多节点与server交互,那么需要具体哪个采集节点,就可以用Key进行采集。
二、获取远程Key值
2.1、获得主机的Key值
- 监控项(Itens)就是监控指标获取数据的方式、数据类型、更新数据的时间间隔、历史数据保留时间、趋势数据保留时间、监控项的分组等指标。另外一个概念是监控指标,用key表示,它是构成监控项的一个元素,在一个主机/模板中必须是唯一的。
- zabbix agent是利用Key获取主机监控数据的,在每个agent端的监控项上,都可以找到zabbix客户端对应的许多key值。
- “数据采集”——>“主机”——>“监控项”,可以看到每台主机的监控项中,为了采集对应的主机信息,都有一个键值,利用这个键值,Zabbix就可以获取对应的数据。
2.2、被监控端安装Agent
- 所有Agent主机都要操作,
rpm -ivh pcre2-10.23-2.el7.x86_64.rpm
rpm -ivh zabbix-agent-6.4.8-release2.el7.x86_64.rpm
- 修改配置文件
# server01
[root@server01 ~]# vim /etc/zabbix/zabbix_agentd.conf
Server=192.168.93.101
ServerActive=192.168.93.101
Hostname=server01
[root@server01 ~]# systemctl start zabbix-agent.service
[root@server01 ~]# systemctl enable zabbix-agent.service
# server02
[root@server02 ~]# vim /etc/zabbix/zabbix_agentd.conf
Server=192.168.93.101
ServerActive=192.168.93.101
Hostname=server02
[root@server02 ~]# systemctl start zabbix-agent.service
[root@server02 ~]# systemctl enable zabbix-agent.service
2.3、zabbix_get命令获取Agent数据举例
2.3.1、zabbx_get获取cpu核心数
[root@zbx ~]# zabbix_get -s 192.168.93.102 -k system.cpu.num
2
2.3.2、获取目标主机系统和内核版本参数
[root@zbx ~]# zabbix_get -s 192.168.93.102 -k system.uname
Linux server01 3.10.0-1160.71.1.el7.x86_64 #1 SMP Tue Jun 28 15:37:28 UTC 2022 x86_64
2.3.3、查看目标端口是否开启
[root@zbx ~]# zabbix_get -s 192.168.93.102 -k net.tcp.port[,22]
1
# 回显结果解释
1:开启
0:关闭
2.3.4、查看进程是否开启
[root@zbx ~]# zabbix_get -s 192.168.93.102 -k proc.num[sshd]
4
# 回显结果解释
如果开启,将会显示对应的进程数
2.3.5、查看磁盘剩余空间
[root@zbx ~]# zabbix_get -s 192.168.93.102 -k vfs.fs.size[/,pfree]
96.086125
2.3.6、查看当前网卡流量
[root@zbx ~]# zabbix_get -s 192.168.93.102 -k net.if.out[ens33,bytes]
177208
# 回显结果解释
在不同时间执行两次命令,用后面的减去前面的,除以两者之间的时间,得到速率
2.3.7、获取目标主机内存值
[root@zbx ~]# zabbix_get -s 192.168.93.102 -p 10050 -k vm.memory.size[total]
3953922048
三、Zabbix自定义key值
- 使用zabbix agent自带的key值,我们已经可以监控到很多数据了,但是仍然有一些数据,是agent的key值没有的。对于这些特俗的需求,就要求我们自定义key值。
3.1、添加Nginx模块支持
- 提前监控server01
3.1.1、安装nginx
- 在server01执行即可
[root@server01 ~]# yum -y install epel-release.noarch
[root@server01 ~]# yum -y install nginx
[root@server01 ~]# cd /etc/nginx/
[root@server01 nginx]# cp nginx.conf.default nginx.conf
cp:是否覆盖"nginx.conf"? y
3.1.2、添加nginx_status模块
- 编辑如下参数,添加nginx_status模块
[root@server01 nginx]# vim /etc/nginx/nginx.conf
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#####################################################################
location /nginx_status {
stub_status on;
access_log off;
allow 192.168.93.0/24;
allow 127.0.0.1;
deny all;
}
#####################################################################
# 检查配置文件语法是否有错
[root@server01 nginx]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@server01 nginx]# echo "test" > /usr/share/nginx/html/index.html
[root@server01 nginx]# systemctl start nginx
[root@server01 nginx]# systemctl enable nginx
3.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启动到现在共处理了多少个连接
handled:Nginx启动到现在共成功创建16449此握手
requests:Nginx总共处理了多少次请求
Reading:Nginx读取到客户端的Header信息数
Writing:Nginx返回给客户端的Header信息数
Waiting:Nginx已经处理完正在等候下一次请求指令的驻留链接,开启
3.3、添加监控脚本
3.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
3.3.2、重启zabbix-agent
[root@server01 ~]# chmod +x /etc/zabbix/nginx-status.sh
[root@server01 ~]# systemctl restart zabbix-agent.service
3.4、修改agent端参数以支持自定义key值
[root@server01 ~]# vim /etc/zabbix/zabbix_agentd.conf
# 默认352行,进行修改
UnsafeUserParameters=1
# 默认361行,取消注释进行修改
UserParameter=nginx_status[*],/etc/zabbix/nginx-status.sh $1
# 备注
UnsafeUserParameters=1:启用自定义Key功能
UserParameter:指定脚本
nginx_status:为Key值名称。[*]里面写脚本参数,没有可以不写。/etc/zabbix/nginx-status.sh $1路径为脚本所在路径。
[root@server01 ~]# systemctl restart zabbix-agent.service
3.5、Zabbix_get测试
[root@zbx ~]# zabbix_get -s 192.168.93.102 -k nginx_status[accepts]
2
3.6、Zabbix Web端添加监控
3.6.1、添加告警媒介
-
“告警”——>“媒介”——>选中“Email”,
-
测试发送邮件,记得启动Email
3.6.2、设置报警发送给用户
- 点击“用户”——>“用户”——>点击“Admin”用户——>点击“报警媒介”——>点击类型下面的“添加”选项卡
3.6.3、添加模块
- “数据采集”——>“模板”——>“创建模板”,创建一个名为Nginx状态的模板
3.6.4、为模板添加监控项
- 点击“数据采集”,再点击“模板”选项后,找到刚刚创建名为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]
3.7、验证自定义监控
3.7.1、为主机关联新创建的模板
- “数据采集”——>“主机”,为该主机关刚才创建的模板。
3.7.2、为该主机添加新的监控图形
- “数据采集”——>“主机”——>“图形”,点击“创建图标”创建nginx active图形
- 备注:其他监控的图形创建方式一样,此处不在一一列举
3.7.3、验证自定义监控数据和图形
- “检测”——>“主机”,查看server01的检测数据,以及新添加的图形
3.8、为nginx监控创建触发器及邮件报警测试
3.8.1、为模板添加触发器
-
点击“数据采集”按钮,再点击“模板”选项,然后点击“nginx-status”模板,选择"触发器"选项,点击“创建触发器”按钮
-
添加表达式,点击“添加”按钮,在弹出界面里架空项选择nginx主机的“nginx active”监控项,功能选择“last-最后(最近)的 T 值,结果大于 N”,N填写为3,再点击“插入”按钮。这里的意思是当Nginx的活跃链接大于3时,触发报警。
3.8.2、添加告警动作和操作
-
“告警”——>“动作”——>“触发器动作”,点击创建动作按钮
-
添加触发条件,条件选择触发器,并指定上一步中创建的触发器
-
设置触发器的操作,指定触发后发送报警信息的的接收用户。
3.8.3、触发报警
-
模拟多个用户访问网站,使得链接数大于设定的报警阈值,并观察邮箱的报警邮箱
-
使用脚本,分别在不同的4太主机上执行,进行访问网站,模拟多用户访问网站
cat >> ./nginx-active.sh << EOF
while true
do
curl 192.168.93.102 # IP写为Nginx的IP
done
EOF
- 可能需要等待几分钟才会发送邮件