自定义监控
用户自定义监控也就是自定义键值,系统自带的键值无法满足需求的情况下,可以根须需求自定义键值,只有在agent端设置键值,server才能使用键值
格式
ini
在zabbix的子配置文件中编写
UserParameter=<key>,<command>
key:键值名称
command:执行的命令或脚本路径
无数据传递自定义键值
ini
无数据传递
cd /etc/zabbix/zabbix_agentd.d
vim free_mem.conf
UserParameter= free_mem,free -m| awk '/^Mem/{print $3}'
UserParameter= 键值名,执行的命令,或者脚本的路径
systemctl restart zabbix-agent //重启服务
server端测试
yum -y install zabbix-get
zabbix_get -s 10.12.153.172 -p 10050 -k "free_mem"
zabbix_get -s ip -p 端口 -k "参数文件名"
有数据传递自定义键值
ini
cd /etc/zabbix/zabbix_agentd.d
vim memory.stats.conf
UserParameter=memory.stats[*],cat /proc/meminfo | awk '/^$1/{print $$2}'
UserParameter=键值名[*], 命令 | 裁剪 '/第一列为变量/需要裁剪的数据'
分析:$$2:表示awk的参数$2
注意:$1是调用前边的[*],位置参数,第一个参数
systemctl restart zabbix-agent //重启服务
server端测试
zabbix_get -s 10.12.153.172 -p 10050 -k "memory.stats[MemTotal]"
zabbix_get -s ip -p 端口 -k "参数文件名[参数]"
例如监控程序的状态
监控php-fpm状态
ini
agent端安装php-fpm,nginx,设置关联
yum -y install php-fpm
vim /etc/php-fpm.d/www.conf //更改php-fpm配置文件
user = nginx
group = nginx
pm.status_path = /php-fpm-status #php-fpm 的状态监测页面
ping.path = /ping #ping 接口,存活状态是否ok
ping.response = pong #响应内容pong
systemctl start php-fpm //重启php-fpm
yum -y install nginx
vim /etc/nginx/nginx.conf //更改nginx配置文件
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~* /(php-fpm-status|ping) {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
include fastcgi_params;
allow 127.0.0.1; #因为这个页面很重要,所有需加访问控制
deny all;
access_log off; #访问这个页面就不用记录日志了
}
systemctl start nginx
ini
//自定义用户监控
cd /etc/zabbix/zabbix_agentd.d/
vim php_status.conf //自定义键值监控
UserParameter=php-fpm.stats[*],curl -s http://127.0.0.1/php-fpm-status | awk '/^$1/{print $$NF}'
systemctl restart zabbix-agent //重启agent服务
ini
server访问
zabbix_get -s 客户端ip -p 10050 -k "php-fpm.stats[pool]"
php-fpm显示内容 | |
---|---|
参数 | 说明 |
pool | FPM 进程池的名称 |
proccess manager | 进程管理器类型------static、dynamic 或 ondemand。 |
start time | 进程池最后一次启动的日期/时间。 |
start since | 进程自启动以来的秒数。 |
accepted conn | 服务的请求总数 |
listen queue | 当前等待空闲进程的请求(backlog)总数。 |
max listen queue | 监听队列在任一时间看到的最大请求数。 |
listen queue len | 监听队列的最大允许数量。 |
idle processes | 当前空闲(等待请求)的进程数。 |
active processes | 当前正在处理请求的进程数。 |
total processes | 当前进程总数。 |
max active processes | 并发活动进程的最大数量。 |
max children reached | 是否达到了最大进程数?如果是,则值显示为 1 ,否则为 0 。 |
slow requests | 达到配置 request_slowlog_timeout的请求总数。 |
监控mysql主从状态
获取主从状态脚本
ini
#!/bin/bash
SQL=$(mysql -uroot -p'0' -e 'show slave status\G' 2>/dev/null |grep "Slave_SQL_Running"|awk 'NR==1{print $2}')
IO=$(mysql -uroot -p'0' -e 'show slave status\G' 2>/dev/null |grep "Slave_IO_Running"|awk 'NR==1{print $2}')
if [[ ${SQL} = "Yes" && ${IO} = "Yes" ]];then
echo 1
else
echo 0
fi
编写自定义监控文件
ini
vim /etc/zabbix/zabbix_agentd.d/mysql.conf
UserParameter=mysql_status,/etc/zabbix/zabbix_agentd.d/my.sh
systemctl restart zabbix-agent //重启agent服务
服务端访问
ini
zabbix_get -s 客户端ip -p 10050 -k "mysql_status"
监控nginx状态
nginx设置监控页面
vim /etc/nginx/nginx.conf
location /nginx-status {
stub_status on;
access_log /var/log/nginx/nginxstatus.log; //设置日志文件的位置
}
nginx -s reload
编写自定义监控文件
ini
vim /etc/zabbix/zabbix_agentd.d/nginx.conf
UserParameter=nginx.Active.connections,curl -s 127.0.0.1/nginx-status |awk 'NR==1{print $NF}'
UserParameter=nginx.accepts.requests,curl -s 127.0.0.1/nginx-status |awk 'NR==3{print $1}'
UserParameter=nginx.handled.requests,curl -s 127.0.0.1/nginx-status |awk 'NR==3{print $2}'
UserParameter=nginx.requests,curl -s 127.0.0.1/nginx-status |awk 'NR==3{print $3}'
UserParameter=nginx.reading,curl -s 127.0.0.1/nginx-status |awk 'NR==4{print $2}'
UserParameter=nginx.writing,curl -s 127.0.0.1/nginx-status |awk 'NR==4{print $4}'
UserParameter=nginx.waiting,curl -s 127.0.0.1/nginx-status |awk 'NR==4{print $6}'
UserParameter=nginx.uv,sudo awk '{print $1}' /var/log/nginx/access.log|sort | uniq -c |wc -l
UserParameter=nginx.pv,sudo awk '{print $7}' /var/log/nginx/access.log|wc -l
UserParameter=nginx.busy.url,sudo awk '{print $7}' /var/log/nginx/access.log|sort | uniq -c |sort -n -k 1 -r|head -1 |awk '{print $2}'
UserParameter=nginx.most.ip,sudo awk '{print $1}' /var/log/nginx/access.log|sort | uniq -c |sort -n -k 1 -r|head -1 |awk '{print $2}'
systemctl restart zabbix-agent //重启agent服务
服务端访问
ini
zabbix_get -s 客户端ip -p 10050 -k "mysql_status"