【企业级监控】Zabbix监控网站并发连接数

Zabbix自定义监控项与触发器

资源列表

操作系统配置主机名IP
CentOS 7.92C4Gzbx192.168.93.101
CentOS 7.92C4Gserver01192.168.93.102
CentOS 7.92C4Gserver02192.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

在这里插入图片描述

  • 可能需要等待几分钟才会发送邮件
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值