【Zabbix运维监控实战(附图文教程):Nginx 服务可用性、连接请求状态、CPU 内存占用与 JVM(Jar 包 / Tomcat)全维度监控】

提示:本文原创作品,良心制作,干货为主,简洁清晰,一看就会

文章目录

  • 前言
  • 一、监控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的进阶知识~

相关推荐
Leinwin11 小时前
OpenClaw 多 Agent 协作框架的并发限制与企业化规避方案痛点直击
java·运维·数据库
2401_8653825011 小时前
信息化项目运维与运营的区别
运维·运营·信息化项目·政务信息化
qq_4176950511 小时前
机器学习与人工智能
jvm·数据库·python
漠北的哈士奇11 小时前
VMware Workstation导入ova文件时出现闪退但是没有报错信息
运维·vmware·虚拟机·闪退·ova
如意.75911 小时前
【Linux开发工具实战】Git、GDB与CGDB从入门到精通
linux·运维·git
运维小欣11 小时前
智能体选型实战指南
运维·人工智能
一直都在57212 小时前
Java垃圾回收器
jvm
yy552712 小时前
Nginx 性能优化与监控
运维·nginx·性能优化
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ12 小时前
Linux 查询某进程文件所在路径 命令
linux·运维·服务器
wuqingshun31415913 小时前
线程安全需要保证几个基本特征
java·开发语言·jvm