提示:本文原创作品,良心制作,干货为主,简洁清晰,一看就会
文章目录
- 前言
- 一、监控Nginx指标
-
- [1.1 监控nginx服务](#1.1 监控nginx服务)
- [1.2 监控nginx连接/请求状态指标](#1.2 监控nginx连接/请求状态指标)
- [1.3 监控nginx使用cpu、内存情况](#1.3 监控nginx使用cpu、内存情况)
- 二、监控JVM
-
- [2.1 安装Zabbix Java Gateway](#2.1 安装Zabbix Java Gateway)
- [2.2 Server关联Java Gateway](#2.2 Server关联Java Gateway)
- [2.3 开启JMX监控](#2.3 开启JMX监控)
-
- [2.3.1 独立 Jar 包应用](#2.3.1 独立 Jar 包应用)
- [2.3.2 Tomcat 应用](#2.3.2 Tomcat 应用)
- [2.4 添加监控项](#2.4 添加监控项)
前言
对于zabbix安装步清除的小伙伴可以看这篇文章https://blog.csdn.net/m0_63756214/article/details/156421867?spm=1001.2014.3001.5501
闲话少叙,直接上干货
一、监控Nginx指标
Zabbix监控Nginx,核心盯4类简单指标:
服务死活:进程是否运行;连接情况:活跃连接数、读写/等待连接数;请求状态:每秒请求数(RPS);资源占用:Nginx的CPU、内存使用率
1.1 监控nginx服务
直接去zabbix界面上,选择被监控主机,然后创建新的监控项


查看监控数据

1.2 监控nginx连接/请求状态指标
bash
在被监控主机配置的server模块中中,加入以下几行;
location /status {
stub_status on;
access_log off;
}
root@zabbix-node1:~# systemctl restart nginx
root@zabbix-node1:~# curl localhost/status
Active connections: 1
server accepts handled requests
1 1 1
Reading: 0 Writing: 1 Waiting: 0
Active connections: 1
当前正在活跃的 Nginx 连接总数,这里显示 1,说明此刻有 1 个客户端连接正在被 Nginx 处理(包括读请求、写响应、空闲等待的连接)
server accepts handled requests 1 1 1这一行是三个累计值(从 Nginx 启动到现在的总数),按顺序解释:
accepts: 1:Nginx 累计接受的客户端连接总数;
handled: 1:Nginx 累计成功处理的连接总数(正常情况下和 accepts 相等,若不等说明连接数达到上限被拒绝);
requests: 1:Nginx 累计处理的 HTTP 请求总数(一个连接可能包含多个请求,这里 1:1 说明这个连接只发了1个请求)。
Reading: 0 Writing: 1 Waiting: 0这是当前活跃连接的状态拆分 ,三者相加等于上面的 Active connections:
Reading: 0:Nginx 正在读取客户端请求头的连接数(0 说明此刻没有客户端正在发请求);
Writing: 1:Nginx 正在向客户端发送响应的连接数(1 说明有1个连接正在返回数据);
Waiting: 0:处于空闲等待状态的连接数(开启 keep-alive 时会有,0 说明没有空闲的长连接)。
bash
#编写监控脚本
root@zabbix-node1:~# vim /etc/zabbix/zabbix_agentd.d/nginx.sh
#!/bin/bash
export LANG=en_US.UTF-8
NGINX_PORT=80
STATUS_URL="http://127.0.0.1:${NGINX_PORT}/status"
# 基础函数:获取Nginx状态页内容(增加异常处理)
get_nginx_status() {
status_content=$(/usr/bin/curl -s --connect-timeout 3 "${STATUS_URL}")
if [ -z "$status_content" ]; then
echo 0 # 访问失败返回0,方便Zabbix告警
exit 1
fi
echo "$status_content"
}
# 各指标提取函数
nginx_active(){
get_nginx_status | awk '/Active connections/ {print $NF}'
}
nginx_accepts(){
get_nginx_status | awk 'NR==3 {print $1}'
}
nginx_handled(){
get_nginx_status | awk 'NR==3 {print $2}'
}
nginx_requests(){
get_nginx_status | awk 'NR==3 {print $3}'
}
nginx_reading(){
get_nginx_status | awk '/Reading/ {print $2}'
}
nginx_writing(){
get_nginx_status | awk '/Reading/ {print $4}'
}
nginx_waiting(){
get_nginx_status | awk '/Reading/ {print $NF}'
}
# 核心:接收外部参数,执行对应函数
case "$1" in
active)
nginx_active
;;
accepts)
nginx_accepts
;;
handled)
nginx_handled
;;
requests)
nginx_requests
;;
reading)
nginx_reading
;;
writing)
nginx_writing
;;
waiting)
nginx_waiting
;;
*)
echo "Usage: $0 {active|accepts|handled|requests|reading|writing|waiting}"
exit 1
;;
esac
root@zabbix-node1:~# chmod +x /etc/zabbix/zabbix_agentd.d/nginx.sh
root@zabbix-node1:~# vim /etc/zabbix/zabbix_agentd.d/nginx.conf
UserParameter=nginx_status[*],/bin/bash /etc/zabbix/zabbix_agentd.d/nginx.sh "$1"
接下来去zabbix界面创建nginx_status模板,然后添加监控项

添加监控项,其他监控项照样添加

添加完成后如下

让被监控主机zabbix-node1关联该模板

查看监控数据

1.3 监控nginx使用cpu、内存情况
我们可以直接使用zabbix提供的模板
监控nginx占用cpu情况

监控nginx使用内存情况

查看监控数据

二、监控JVM
Zabbix监控 JVM 的标准方案是 Java Gateway + JMX,无需在 Java 服务器装额外 Agent,直接通过 JMX 协议采集堆内存、GC、线程等核心指标
目前zabbix-node1 部署 Tomcat+Jenkins 架构了,现在我们来监控该机器上的JVM
2.1 安装Zabbix Java Gateway
bash
root@zabbix-node1:~# java -version #查看java版本
java version "1.8.0_211"
Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)
root@zabbix-node1:~#
#安装 Zabbix Java Gateway
root@zabbix-node1:~# apt update && apt install zabbix-java-gateway -y
root@zabbix-node1:~# systemctl start zabbix-java-gateway
root@zabbix-node1:~# systemctl enable zabbix-java-gateway
root@zabbix-node1:~# ss -tlnp | grep 10052
LISTEN 0 50 *:10052 *:* users:(("java",pid=4981,fd=12))
2.2 Server关联Java Gateway
bash
#配置 Zabbix Server 关联 Java Gateway
root@zabbix-server:~# vim /etc/zabbix/zabbix_server.conf
# Java Gateway的IP
JavaGateway=192.168.136.135
# Java Gateway默认端口,无需修改
JavaGatewayPort=10052
# 开启JMX轮询进程数,根据监控的JVM数量调整(建议5-20)
StartJavaPollers=5
root@zabbix-server:~# systemctl restart zabbix-server
2.3 开启JMX监控
2.3.1 独立 Jar 包应用
如果你是单独的jar应用,就用该方法
bash
#在启动命令中添加 JMX 参数,然后重启 Jar 包应用,验证端口监听:
java -Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=12345 \ # 自定义JMX端口
-Dcom.sun.management.jmxremote.rmi.port=12345 \ # 必须和jmxremote.port一致
-Dcom.sun.management.jmxremote.authenticate=false \ # 测试环境关闭认证,生产建议开启
-Dcom.sun.management.jmxremote.ssl=false \ # 测试环境关闭SSL,生产建议开启
-Djava.rmi.server.hostname=192.168.1.100 \ # Java应用服务器的真实IP
-jar your-application.jar
2.3.2 Tomcat 应用
我是在tomcat运行的Jenkins,我用下面这种方法
bash
#tomcat开启JMX监控,在文件开头添加 JMX 参数
root@zabbix-node1:~# vim /usr/local/tomcat/bin/catalina.sh
CATALINA_OPTS="-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=12345 \ #端口号,是你要开启的监控端口号。
-Dcom.sun.management.jmxremote.rmi.port=12345 \
-Dcom.sun.management.jmxremote.authenticate=false \ #authenticate,false表示不使用监控,即不需要用户名和密码
-Dcom.sun.management.jmxremote.ssl=false \ #ssl,false表示不使用ssl链接
-Djava.rmi.server.hostname=192.168.136.135" #tomcat所在服务器的ip地址
root@zabbix-node1:~# ps aux | grep tomcat
root 2510 1.5 12.3 4564400 495976 pts/0 Sl 16:35 0:16 /usr/local/java/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start
root 8663 0.0 0.0 13140 1052 pts/0 S+ 16:52 0:00 grep --color=auto tomcat
root@zabbix-node1:~# kill 2510
root@zabbix-node1:~# nohup /usr/local/tomcat/bin/startup.sh & #重启tomcat
2.4 添加监控项
下面我们去zabbix上操作

查看最新数据

注:
文中若有疏漏,欢迎大家指正赐教。
本文为100%原创,转载请务必标注原创作者,尊重劳动成果。
求赞、求关注、求评论!你的支持是我更新的最大动力,评论区等你~
后续会分享更多关于zabbix的进阶知识~