zabbix监控中间件服务

zabbix监控Nginx

自定义nginx访问量的监控项,首先要通过脚本将各种状态的值取出来,然后通过zabbix监控。找到自定义脚本上传到指定目录/etc/zabbix/script/

在zbx-client客户端主机操作

bash 复制代码
#创建目录,然后将脚本上传到该目录

mkdir /etc/zabbix/script/

cd /etc/zabbix/script

chmod +x ngx_status.sh

#脚本内容主要是利用函数定义nginx状态页面的各个字段,然后结合awk进行取值,最后在通过case语句控制脚本输出
cat /etc/zabbix/script/ngx_status.sh
#定义Nginx status页面
ngx_status="http://127.0.0.1/status"
#判断status页面是否存活
ngx_status_code() {
    http_code=`curl -o /dev/null -s -w %{http_code}${ngx_status}`
    if [ ${http_code} == "200" ];then
    	return 1
    else
    	echo "Nginx status is not running."
    fi
}
#获取当前活动用户的连接数量
active() {
    ngx_status_code || curl -s ${ngx_status} | grep "Active" | awk '{print $NF}'
}
#获取接受的客户端连接数量
accepts() {
    ngx_status_code || curl -s ${ngx_status} | awk NR==3 | awk '{print $1}'
}
#获取处理的连接总数量
handled() {
    ngx_status_code || curl -s ${ngx_status} | awk NR==3 | awk '{print $2}'
}
#获取客户端请求的总数量
requests() {
    ngx_status_code || curl -s ${ngx_status} | awk NR==3 | awk '{print $3}'
}

#获取正在读取请求标头的当前连接数量
reading() {
	ngx_status_code || curl -s ${ngx_status} | grep "Reading" | awk '{print $2}'
}
#获取正在将响应写回到客户端的当前连接数量
writing() {
	ngx_status_code || curl -s ${ngx_status} | grep "Writing" | awk '{print $2}'
}
#获取当前正在等待响应的客户端连接数量
waiting() {
	ngx_status_code || curl -s ${ngx_status} | grep "Waiting" | awk '{print $2}'
}
#使用位置变量控制脚本输出
case $1 in
        active)
        	active;;
        accepts)
        	accepts;;
        handled)
        	handled;;
        requests)
        	requests;;
        reading)
        	reading;;
        writing)
        	writing;;
        waiting)
        	waiting;;
        *)
        	echo "Unknown options"
esac
bash 复制代码
#修改zabbix agent配置文件,开启自定义监控功能
vim /etc/zabbix/zabbix_agentd.conf
...
311 Include=/etc/zabbix/zabbix_agentd.d/*.conf --自定监控路径
330 UnsafeUserParameters=1 --改为1为开启自定义监控功能,默认该功能为关闭状态
#进入自定义监控路径
cd /etc/zabbix/zabbix_agentd.d/
#创建自定义监控文件(文件名要求以 .conf结尾)
vim nginx_status.conf

UserParameter=nginx.active,bash
/etc/zabbix/script/ngx_status.sh active
UserParameter=nginx.accepts,bash
/etc/zabbix/script/ngx_status.sh accepts
UserParameter=nginx.handled,bash
/etc/zabbix/script/ngx_status.sh handled
UserParameter=nginx.requests,bash
/etc/zabbix/script/ngx_status.sh requests
UserParameter=nginx.reading,bash
/etc/zabbix/script/ngx_status.sh reading
UserParameter=nginx.writing,bash
/etc/zabbix/script/ngx_status.sh writing
UserParameter=nginx.waiting,bash
/etc/zabbix/script/ngx_status.sh waiting

#解释
UserParameter= #自定义监控固定格式
nginx.active #监控项名称

#重启zabbix-agent服务
systemctl restart zabbix-agent

获取监控项数据

zabbix server端操作

powershell 复制代码
#服务端下载zabbix-get软件包,用于在命令行获取客户端监控项的值
yum -y install zabbix-get
#获取客户端监控项(按照自己的环境修改IP)
zabbix_get -s 192.168.0.15 -k nginx.active --当前活动用户的连接数量
zabbix_get -s 192.168.0.15 -k nginx.accepts --接收的客户端连接总数量
zabbix_get -s 192.168.0.15 -k nginx.handled --处理的连接总数量
zabbix_get -s 192.168.0.15 -k nginx.requests --客户端请求的总数量
zabbix_get -s 192.168.0.15 -k nginx.reading --正在读取请求的连接数
zabbix_get -s 192.168.0.15 -k nginx.writing --将响应反回客户端的连接数
zabbix_get -s 192.168.0.15 -k nginx.waiting --客户端正在等待服务器的响应数量

接下来创建监控模板、应用集、监控项

当完成后,点击 添加(Add),新的监控项将出现在监控项列表中。

按照上述方法在将其余的监控项添加至模板中。最终的效果如下图:

绑定模板,转到 配置 主机 找到你的主机,把模板绑定到主机。

随后点击配置栏中的监测 (Monitoring) → 最新数据 (Latest data)以查看具体细节。

zabbix监控Redis

自定义监控项方法与nginx类似

bash 复制代码
#上传脚本到/etc/zabbix/script路径并添加执行权限
chmod +x redis_status.sh
#创建自定义监控项文件
vim /etc/zabbix/zabbix_agentd.d/custom_redis_status.conf
UserParameter=Redis.Info[*],/etc/zabbix/script/redis_statu
s.sh $1 $2
UserParameter=Redis.Status,(redis-cli -h 127.0.0.1 -p 6379 ping)2>/dev/null |grep -c PONG
bash 复制代码
#重启zabbix agent服务
systemctl restart zabbix-agent

接下来创建模板、应用集、监控项、绑定模板与前边的nginx一样,此处不在重复演示,最终效果如下图:

zabbix监控PHP

php-fpm 作为 PHP进程管理程序,我们也需要监控它的状态。

bash 复制代码
#查看php-fpm配置文件确保已经开启状态页面功能(搜索:status)
vim /etc/php-fpm.d/www.conf
...
121 pm.status_path = /php_status
bash 复制代码
#查看nginx配置文件确保可以访问php_status页面
vim /etc/nginx/conf.d/default.conf
...
location /php_status { #php状态页面
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME
/scripts$fastcgi_script_name;
include fastcgi_params;
}
  • 访问php状态页面:http://server_ip/php_status

  • pool:fpm池子名称,大多数为www

  • process manager:进程管理方式,值:static,dynamic orondemand

  • start time:启动日期,如果reload了php-fpm,时间会更新

  • start since:运行时长

  • accepted conn:当前池子接受的请求数

  • listen queue:请求等待队列,如果这个值不为0,那么要增加FPM的进程数量

  • max listen queue:请求等待队列最高的数量

  • listen queue len:socket等待队列长度

  • idle processes:空闲进程数量

  • active processes:活跃进程数量

  • total processes:总进程数量

  • max active processes:最大的活跃进程数量(FPM启动开始算)

  • max children reached:进程最大数量限制的次数,如果这个数量不为0,那说明你的最大进程数量太小了,需要设置大点

  • slow requests 当启用了php-fpm slow-log功能时,如果出现php-fpm慢请求这个计数器会增加,一般不当的Mysql查询会触发这个值

自定义监控项方法与nginx类似

bash 复制代码
#上传脚本到/etc/zabbix/script路径并添加执行权限

chmod +x phpfpm_status.sh
bash 复制代码
#创建自定义监控项文件

cat /etc/zabbix/zabbix_agentd.d/phpfpm_status.conf

UserParameter=phpfpm_status[*],/bin/bash

/etc/zabbix/script/phpfpm_status.sh "$1"
bash 复制代码
#重启zabbix agent服务

systemctl restart zabbix-agent

Zabbix Server获取监控项数据

bash 复制代码
#php-fpm运行时长
zabbix_get -s 192.168.0.15 -k phpfpm_status[start_since]
#当前接收的连接数
zabbix_get -s 192.168.0.15 -k phpfpm_status[accepted_conn]
#等待连接的请求数
zabbix_get -s 192.168.0.15 -k phpfpm_status[listen_queue]
#请求等待队列最高的数量
zabbix_get -s 192.168.0.15 -k
phpfpm_status[max_listen_queue]

zabbix监控MySQL

安装percona

powershell 复制代码
rpm -ivh percona-zabbix-templates-1.1.6-1.noarch.rpm
...
Scripts are installed to /var/lib/zabbix/percona/scripts --监控脚本安装路径
Templates are installed to /var/lib/zabbix/percona/templates --监控模板安装路径
#查看监控模板路径
ls /var/lib/zabbix/percona/templates 
userparameter_percona_mysql.conf --监控项配置文件
zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.6.xml --监控模板文件
#将自定义监控文件移动至/etc/zabbix/zabbix_agentd.d/自定义监控项
目录
mv /var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf /etc/zabbix/zabbix_agentd.d/

导入监控模板,验证模板是否可用,回到zabbix web界面通过 配置**→**** 模板****→**导入 将模板文件导入。

提示:默认会出现如上图问题,应为percona提供的监控模板由于版本2.0.9过低,而zabbix4.0以后版本就不支持2.0以下的模板,需要使高版本的模板。

通过配置****→****模板查看(搜索:mysql)具体信息

配置percona连接数据库

percona监控插件是php编写,通过php连接mysql数据库来获取相关的数据,需要为percona指定连接数据库的用户与密码。

powershell 复制代码
#修
改/var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php文件指定用户与密码
ls /var/lib/zabbix/percona/scripts/
get_mysql_stats_wrapper.sh --获取MySQL状态脚本
ss_get_mysql_stats.php --php连接MySQL数据库脚本
#修改php脚本指定连接数据库用户与密码
vim /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php
...
30 $mysql_user = 'root';
31 $mysql_pass = ''; 如果root用户没有密码,则留空即可
bash 复制代码
#重启zabbix agent服务
systemctl restart zabbix-agent

zabbix server 端命令行取值(具体值可

从/etc/zabbix/zabbix_agentd.d/userparameter_percona_mysql.conf监控项文件中查看)

bash 复制代码
zabbix_get -s 192.168.0.15 -k MySQL.Sort-scan

0

如果需要监控主从同步状态,需要修

改/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh脚本文件

将用户改为root即可(如果root用户没有设置密码,则不需要指定-p)。

回到web界面查看监控项状态。

具体取值数据可从 监测**→**最新数据 中查看

此时通过 监测**→**仪表板 查看时会发现一个问题通知,大致含义为主从状态为停止。

如果没有配置主从同步,通过 配置**→**** 主机****→**监控项,找到对应监控项关闭即可。

到此为止MySQL监控以完成。

有时间可以制作一个MySQL的监控模板(中文)只保留核心监控项目,没有必要的,停用掉!

查看监控项状态。

外链图片转存中...(img-FxnuItaS-1709728242025)

具体取值数据可从 监测**→**最新数据 中查看

此时通过 监测**→**仪表板 查看时会发现一个问题通知,大致含义为主从状态为停止。

外链图片转存中...(img-fiOs3lNX-1709728242026)

如果没有配置主从同步,通过 配置**→**** 主机****→**监控项,找到对应监控项关闭即可。

外链图片转存中...(img-9jHutmYm-1709728242026)

到此为止MySQL监控以完成。

有时间可以制作一个MySQL的监控模板(中文)只保留核心监控项目,没有必要的,停用掉!

相关推荐
有事没事实验室7 小时前
Node.js 路由与中间件
中间件·node.js
hello 早上好1 天前
消息顺序、消息重复问题
java·中间件
forestqq2 天前
zabbix平台无法删除已停用主机的处理案例
运维·服务器·zabbix
菜萝卜子3 天前
【Zabbix】Ansible批量部署ZabbixAgent
ansible·zabbix
is08153 天前
STM32 USB 设备中间件 tinyusb
stm32·嵌入式硬件·中间件
头发那是一根不剩了3 天前
信创缓存中间件TongRDS(Redis平替)安装、接入SpringBoot全流程
redis·缓存·中间件·tongrds
m0_659394003 天前
常见的中间件漏洞
中间件
东窗西篱梦5 天前
Zabbix 6.0 监控AWS全栈实战|EC2至Lambda的无缝监控
云计算·zabbix·aws
孙克旭_5 天前
day062-监控告警方式与Grafana优雅展示
linux·运维·zabbix·grafana
小周学学学6 天前
zabbix-agent静默安装
zabbix