【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的进阶知识~

相关推荐
gaize12132 小时前
个人建站服务器完全指南:从基础认知到实操选型
运维·服务器
咕噜企业分发小米2 小时前
新人如何利用好云服务器
运维·服务器
q***44152 小时前
Xshell高效运维实战技术文章大纲基础配置与优化
运维
姓蔡小朋友2 小时前
JVM 垃圾回收
jvm
宇钶宇夕2 小时前
CoDeSys入门实战一起学习(五):CoDeSys V3 车库门控制编程全解析系列(手册基础第四篇)
运维·自动化
C_心欲无痕2 小时前
Docker 核心概念和安装
运维·docker·容器
森旺电子2 小时前
Linux指令快速记忆
linux·运维·服务器
_叶小格_2 小时前
ansible自动化入门基础
运维·笔记·学习·自动化·ansible
2501_946205522 小时前
自动化设备常用滚珠丝杠厂家排名,哪家适配性更出色
运维·自动化