# 在nginx.conf中启用stub_status模块
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
监控项:
nginx.active_connections
- 活跃连接数nginx.accepts
- 接受的连接数nginx.handled
- 处理的连接数nginx.requests
- 总请求数nginx.reading
- 读取连接数nginx.writing
- 写入连接数nginx.waiting
- 等待连接数模板: 可以使用Zabbix官方或社区提供的Nginx模板
#!/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启动脚本(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"
使用JMX监控:
关键监控项:
<!-- 在conf/tomcat-users.xml中添加 -->
<role rolename="manager-gui"/>
<role rolename="manager-status"/>
<user username="zabbix" password="password" roles="manager-status"/>
CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'password';
GRANT USAGE,REPLICATION CLIENT,PROCESS,SHOW DATABASES,SHOW VIEW ON *.* TO 'zabbix'@'localhost';
FLUSH PRIVILEGES;
Template DB MySQL
模板#!/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
对于更详细的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
告警阈值设置:
监控图表:
数据保留策略:
自动发现:
分布式监控:
通过以上方法,可以构建全面的Nginx/Tomcat/MySQL监控体系,及时发现并解决潜在问题。