zabbix监控nginx
监控nginx什么内容
- 1.监控
nginx
状态(stub_status
) - 2.监控进程存活,端口探测(简单检查类型,键值:
net.tcp.service
) - 3.监控
nginx
访问日志(建议使用elk
) - 4.监控
nginx
错误日志(设定触发器)
如何监控nginx状态
- 启用
nginx stub_status
状态模块 - 使用模板
Template App Nginx by HTTP
中的Nginx: Get stub status page
类型为http
代理的监控项获取stub_status
的相关数据 - 然后通过模板中类型为相关项目的监控项对获取的
stub_status
数据做正则表达式预处理获取指标数据
nginx状态监控实践
在zabbix server虚机上启用nginx状态模块
vim /etc/opt/rh/rh-nginx116/nginx/conf.d/zabbix.conf
location /ngx_status {
stub_status;
access_log off;
#allow 127.0.0.1;
allow all;
}
web
访问效果
编写采集状态脚本
- 测试访问状态模块,检查功能是否正常
curl -s 127.0.0.1/ngx_status
Active connections: 1
server accepts handled requests
628049 628049 3129037
Reading: 0 Writing: 1 Waiting: 0
- 编写取值脚本
cat ngx_status.sh
uri_path=/ngx_status
case $1 in
active)
curl -s 127.0.0.1/ngx_status | awk 'NR==1 {print $NF}'
;;
accepts)
curl -s 127.0.0.1/ngx_status | awk 'NR==3 {print $1}'
;;
handled)
curl -s 127.0.0.1/ngx_status | awk 'NR==3 {print $2}'
;;
requests)
curl -s 127.0.0.1/ngx_status | awk 'NR==3 {print $3}'
;;
reading)
curl -s 127.0.0.1/ngx_status | awk 'NR==4 {print $2}'
;;
writing)
curl -s 127.0.0.1/ngx_status | awk 'NR==4 {print $4}'
;;
waiting)
curl -s 127.0.0.1/ngx_status | awk 'NR==4 {print $6}'
;;
*)
echo "Usage $0 [ active | accepts | handled | requests | reading | writing | waiting ]"
esac
添加自定义监控项
vim ngx_status.conf
UserParameter=ngx.status[*],/bin/bash /etc/zabbix/zabbix_agentd.d/ngx_status.sh $1
# 重启zabbix-agent2
systemctl restart zabbix-agent.service
# 测试取值
zabbix_agentd -t ngx.status[active]
ngx.status[active] [t|1]
zabbix_get -s 127.0.0.1 -k ngx.status[active]
1
配置zabbix-web
- 创建模板
- 创建监控项
- 创建图形和触发器
- 关联对应主机
可以编写如下的脚本进行压测
cat curl.sh
index=0
while true
do
index=[ $index+1 ]
for i in $(seq $(echo $RANDOM))
do
wget 127.0.0.1/test &> /dev/nul
done
sleep 2
if [ $index -eq 200 ];then
exit
fi
done
添加系统自带模板
zabbix web
前端-->管理-->主机,添加Template App Nginx by HTTP
模板后
应用集为nginx
共用12个监控项和类型为http
代理,名称为Nginx: Get stub status page
的1个监控项
nginx错误日志监控实践
如何监控错误日志
使用zabbix
内置的log
监控模块完成监控(监控项类型为zabbix
客户端主动式才有)
log[file,<regexp>,<encoding>,<maxlines>,<mode>,<output>,<maxdelay>,<options>,<persistent_dir>]
file
:文件绝对路径regexp
:要匹配的关键字,可以使用正则表达式maxlines
:发送的行数,默认配置定义为20行mode
:可填参数,all
(默认),skip
(跳过旧数据)output
:自定义格式化输出,默认输出regexp
匹配的整行数据
配置Agent为主动模式
vim /etc/zabbix/zabbix_agent2.conf
ServerActive=192.168.99.4
systemctl restart zabbix-agent2
添加监控项
名称:监控nginx
错误日志
类型:Zabbix
客户端(主动式)
键值:log["/var/log/nginx/error.log",(error|alert|emerg|crit),,,skip,,,,]
含义:监控/var/log/nginx/error.log
日志文件中的error,alert,emerg,crit
关键行
注意:zabbix
对该日志文件需要有读权限
zabbix agent
配置文件Hostname
的值必须与zabbix web
端的主机名称一致。
配置触发器
配置如下触发器:
名称:Nginx_Log_Error{HOST.NAME}
表达式:{blue.yn.cn:log["/var/log/nginx/error.log",(error|alert|emerg|crit),,,skip,,,,].str(error)}=1 and {blue.yn.cn:log["/var/log/nginx/error.log",(error|alert|emerg|crit),,,skip,,,,].nodate(60)=0}
表达式含义:当匹配到error
关键字 并且 日志有数据,则触发告警
zabbix监控mysql
监控mysql什么内容
- 监控
mysql
端口状态 - 监控
mysql
连接数、增删查改、流量等(通过show global status获取
) - 监控
mysql
主从状态。(从库上监控)
如何监控mysql状态
- 通过监控命令
mysql -uzabbix -pxxx -e 'show global status'
Threads_connected
:连接数Com_select
:查询总量Com_insert
:插入总量Com_update
:更新总量Com_delete
:删除总量Bytes_received
:流入总流量Bytes_sent
:流出总流量Slow_queries
:慢查询总量
mysql状态监控实践
环境准备
角色 | IP |
---|---|
zabbix-server | 192.168.99.4 |
mysql | 192.168.99.3 |
编写监控脚本
cat mysql_status.sh
#!/usr/bin/bash
key=$1
passwd=xxx
mysql -uroot -p${passwd} -e "show global status" | grep "\<${key}\>" | awk '{print $2}'
# 重启agent
systemctl restart zabbix-agent.service
# 测试
zabbix_agentd -t mysql.status[Com_select]
mysql.status[Com_select] [t|246939867]
服务端测试取值
zabbix_get -s 192.168.99.3 -k mysql.status[Threads_connected]
28
zabbix_get -s 192.168.99.3 -k mysql.status[Com_insert]
73814920
配置zabbix-web
- 创建模板
- 创建监控项
- 创建图形和触发器
- 关联对应主机
新建mysql账户
# 新建zbx_monitor账户
mysql -uzabbix -pxxx
MariaDB [(none)]>CREATE USER 'zbx_monitor'@'%' IDENTIFIED BY 'xxx';
MariaDB [(none)]>GRANT USAGE,REPLICATION CLIENT,PROCESS,SHOW DATABASES,SHOW VIEW ON *.* TO 'zbx_monitor'@'%';
MariaDB [(none)]>flush privileges;
zabbix agent端配置
# 新建目录
mkdir -p /var/lib/zabbix/
# 配置My.cnf客户端文件
cat /var/lib/zabbix/.my.cnf
[client]
user=zbx_monitor
password=xxx
#文件赋权
chown -R zabbix:zabbix /var/lib/zabbix
添加自定义监控项
cat /etc/zabbix/zabbix_agentd.d/mysql.conf
UserParameter=mysql.ping[*], mysqladmin -h"$1" -P"$2" ping
UserParameter=mysql.get_status_variables[*], mysql -h"$1" -P"$2" -sNX -e "show global status"
UserParameter=mysql.version[*], mysqladmin -s -h"$1" -P"$2" version
UserParameter=mysql.db.discovery[*], mysql -h"$1" -P"$2" -sN -e "show databases"
UserParameter=mysql.dbsize[*], mysql -h"$1" -P"$2" -sN -e "SELECT COALESCE(SUM(DATA_LENGTH + INDEX_LENGTH),0) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='$3'"
UserParameter=mysql.replication.discovery[*], mysql -h"$1" -P"$2" -sNX -e "show slave status"
UserParameter=mysql.slave_status[*], mysql -h"$1" -P"$2" -sNX -e "show slave status"
zabbix web页面配置
关联Template DB MySQL by Zabbix agent
模板
页面验证
命令验证
zabbix_get -s 192.168.99.3 -k mysql.db.discovery[192.168.99.3,3306]
information_schema
mysql
performance_schema
test
zabbix
zabbix监控php
监控php什么内容
- 监控
php-fpm
状态指标 - 监控
php-fpm
端口 - 监控
php-fpm
进程 - 监控
php
错误日志
如何监控php状态
- 启用
php-fpm
状态模块 - 使用
curl
命令获取fpm_status
的相关数据 - 将获取的
php-fpm
状态数据方法封装为监控项
如何监控php端口
- 通过脚本获取端口
- 通过
zabbix
自带的监控项实现
php状态监控实践
环境准备
角色 | ip |
---|---|
zabbix server | 192.168.99.4 |
php | 139.199.79.133 |
启用php状态模块
vim /etc/opt/remi/php74/php-fpm.d/www.conf
pm.status_path = /fpm_status
ping.path = /ping # ping 接口,存活状态是否ok
ping.response = pong # 响应内容pong
systemctl restart php74-php-fpm.service
配置php状态页面
vim /etc/nginx/conf.d/wordpress.conf
location ~* /(php-fpm-status|ping) {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
nginx -t
systemctl reload nginx.service
php状态指标含义
curl 127.0.0.1/fpm_status
pool: www
process manager: dynamic
start time: 09/Jun/2024:16:11:33 +0800
start since: 308
accepted conn: 202 # 当前池接受的链接数
listen queue: 0 # 请求队列,如果这个值不为0,那么需要增加fpm的进程数量(触发器)
max listen queue: 0 # 请求队列最高的数量
listen queue len: 128 # socket等待队列长度
idle processes: 5 # 空闲进程数量
active processes: 1 # 活跃进程数量
total processes: 6 # 总进程数量
max active processes: 2 # 最大的活跃进程数量(fpm启动开始计算)
max children reached: 0 # 超过最大进程数的峰值的次数,如果不为0,需要调整进程的最大活跃进程数量(默认50)
slow requests: 0
编写采集状态脚本
cat fpm_status.sh
path=/fpm_status
case $1 in
accepted_conn)
curl -s 127.0.0.1/{$path} | awk '/^accepted/ {print $NF}'
;;
listen_queue)
curl -s 127.0.0.1/{$path} | awk '/^listen queue:/ {print $NF}'
;;
max_listen_queue)
curl -s 127.0.0.1/{$path} | awk '/^max listen/ {print $NF}'
;;
active_processes)
curl -s 127.0.0.1/{$path} | awk '/^active/ {print $NF}'
;;
idle_processes)
curl -s 127.0.0.1/{$path} | awk '/^idle/ {print $NF}'
;;
total_processes)
curl -s 127.0.0.1/{$path} | awk '/^total/ {print $NF}'
;;
max_active_processes)
curl -s 127.0.0.1/{$path} | awk '/^max active/ {print $NF}'
;;
max_children_reached)
curl -s 127.0.0.1/{$path} | awk '/^max children/ {print $NF}'
;;
*)
echo "USAGE: $0 [ accepted_conn | listen_queue | max_listen_queue | active_processes | idle_processes | total_processes | max_active_processes | max_children_reached ]"
esac
添加自定义监控项(zabbix agent)
cat fpm_status.conf
UserParameter=fpm.status[*],/bin/bash /etc/zabbix/zabbix_agent2.d/fpm_status.sh "$1"
# 重启agent2
systemctl restart zabbix-agent2.service
# 测试取值
zabbix_agent2 -t fpm.status[accepted_conn]
fpm.status[accepted_conn] [s|625464]
服务端测试取值
zabbix_get -s x.x.x.x -k fpm.status[max_active_processes]
5
配置zabbix-web
- 创建模板
- 创建监控项
- 创建图形
- 创建触发器
- 关联对应主机
主机链接模板,看数据
腾讯云主机链接模板Template App PHP-FPM by Zabbix agent
查看最新数据
留言