内容目录

zabbix监控nginx

监控nginx什么内容

  • 1.监控nginx状态(stub_status
  • 2.监控进程存活,端口探测(简单检查类型,键值:net.tcp.service
  • 3.监控nginx访问日志(建议使用elk
  • 4.监控nginx错误日志(设定触发器)

如何监控nginx状态

  1. 启用nginx stub_status状态模块
  2. 使用模板Template App Nginx by HTTP中的Nginx: Get stub status page类型为http代理的监控项获取stub_status的相关数据
  3. 然后通过模板中类型为相关项目的监控项对获取的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访问效果

file

编写采集状态脚本
  • 测试访问状态模块,检查功能是否正常
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什么内容

  1. 监控mysql端口状态
  2. 监控mysql连接数、增删查改、流量等(通过show global status获取
  3. 监控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
  1. 创建模板
  2. 创建监控项
  3. 创建图形和触发器
  4. 关联对应主机
新建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=&#039;$3&#039;"
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模板
file

页面验证

file

命令验证
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什么内容

  1. 监控php-fpm状态指标
  2. 监控php-fpm端口
  3. 监控php-fpm进程
  4. 监控php错误日志

如何监控php状态

  1. 启用php-fpm状态模块
  2. 使用curl命令获取fpm_status的相关数据
  3. 将获取的php-fpm状态数据方法封装为监控项

如何监控php端口

  1. 通过脚本获取端口
  2. 通过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
查看最新数据

file

最后修改日期: 2024年10月18日

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。