插件窝 干货文章 zabbix监控Nginx/Tomcat/MySQL的方法

zabbix监控Nginx/Tomcat/MySQL的方法

监控 MySQL Nginx Zabbix 565    来源:    2025-04-24

Zabbix监控Nginx/Tomcat/MySQL的方法

一、Nginx监控

1. 使用Nginx状态模块

# 在nginx.conf中启用stub_status模块
location /nginx_status {
    stub_status on;
    access_log off;
    allow 127.0.0.1;
    deny all;
}

2. Zabbix配置

  • 监控项:

    • nginx.active_connections - 活跃连接数
    • nginx.accepts - 接受的连接数
    • nginx.handled - 处理的连接数
    • nginx.requests - 总请求数
    • nginx.reading - 读取连接数
    • nginx.writing - 写入连接数
    • nginx.waiting - 等待连接数
  • 模板: 可以使用Zabbix官方或社区提供的Nginx模板

3. 自定义监控脚本

#!/bin/bash
# 获取Nginx状态数据
case $1 in
active)
    curl -s http://127.0.0.1/nginx_status | grep "Active" | awk '{print $3}';;
accepts)
    curl -s http://127.0.0.1/nginx_status | awk NR==3 | awk '{print $1}';;
handled)
    curl -s http://127.0.0.1/nginx_status | awk NR==3 | awk '{print $2}';;
requests)
    curl -s http://127.0.0.1/nginx_status | awk NR==3 | awk '{print $3}';;
*)
    echo 0;;
esac

二、Tomcat监控

1. 启用JMX监控

# 在tomcat启动脚本(catalina.sh)中添加
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote
           -Dcom.sun.management.jmxremote.port=12345
           -Dcom.sun.management.jmxremote.ssl=false
           -Dcom.sun.management.jmxremote.authenticate=false"

2. Zabbix配置

  • 使用JMX监控:

    • 配置Zabbix Java Gateway
    • 添加JMX接口到主机配置
    • 使用Zabbix自带的Tomcat模板
  • 关键监控项:

    • JVM内存使用情况
    • 线程池状态
    • 请求处理时间
    • 会话数量

3. 使用Tomcat Manager应用

<!-- 在conf/tomcat-users.xml中添加 -->
<role rolename="manager-gui"/>
<role rolename="manager-status"/>
<user username="zabbix" password="password" roles="manager-status"/>

三、MySQL监控

1. 创建监控用户

CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'password';
GRANT USAGE,REPLICATION CLIENT,PROCESS,SHOW DATABASES,SHOW VIEW ON *.* TO 'zabbix'@'localhost';
FLUSH PRIVILEGES;

2. 使用Zabbix MySQL模板

  • 官方提供Template DB MySQL模板
  • 包含监控项:
    • 连接数
    • 查询缓存
    • 慢查询
    • 复制状态
    • 缓冲池使用情况
    • 表锁等待

3. 自定义监控脚本

#!/bin/bash
# MySQL状态监控脚本
MYSQL_USER="zabbix"
MYSQL_PASS="password"
MYSQL_HOST="localhost"

case $1 in
uptime)
    mysqladmin -u${MYSQL_USER} -p${MYSQL_PASS} -h${MYSQL_HOST} status | cut -f2 -d":" | cut -f1 -d"T";;
threads)
    mysqladmin -u${MYSQL_USER} -p${MYSQL_PASS} -h${MYSQL_HOST} status | cut -f3 -d":" | cut -f1 -d"Q";;
queries)
    mysqladmin -u${MYSQL_USER} -p${MYSQL_PASS} -h${MYSQL_HOST} status | cut -f4 -d":" | cut -f1 -d"S";;
*)
    echo 0;;
esac

4. Percona监控插件

对于更详细的MySQL监控,可以考虑使用Percona的Zabbix插件:

wget https://www.percona.com/downloads/percona-monitoring-plugins/percona-monitoring-plugins-1.1.8/binary/redhat/7/x86_64/percona-zabbix-templates-1.1.8-1.noarch.rpm
rpm -ivh percona-zabbix-templates-1.1.8-1.noarch.rpm

四、通用配置建议

  1. 告警阈值设置:

    • 根据业务特点设置合理的告警阈值
    • 区分警告和严重级别
  2. 监控图表:

    • 创建有意义的聚合图表
    • 设置适当的图表时间范围
  3. 数据保留策略:

    • 调整历史数据和趋势数据的保留时间
    • 根据存储容量和监控需求平衡
  4. 自动发现:

    • 对于多实例环境,配置自动发现规则
    • 自动发现MySQL数据库、Tomcat应用等
  5. 分布式监控:

    • 对于大规模环境,考虑使用Zabbix proxy
    • 合理分配监控负载

通过以上方法,可以构建全面的Nginx/Tomcat/MySQL监控体系,及时发现并解决潜在问题。