欢迎光临
我们一直在努力

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

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

文章目录

  • 前言
  • 一、监控Nginx指标
    • 1.1 监控nginx服务
    • 1.2 监控nginx连接/请求状态指标
    • 1.3 监控nginx使用cpu、内存情况
  • 二、监控JVM
    • 2.1 安装Zabbix Java Gateway
    • 2.2 Server关联Java Gateway
    • 2.3 开启JMX监控
      • 2.3.1 独立 Jar 包应用
      • 2.3.2 Tomcat 应用
    • 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连接/请求状态指标

在被监控主机配置的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 说明没有空闲的长连接)。

#编写监控脚本
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

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

#配置 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应用,就用该方法

#在启动命令中添加 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,我用下面这种方法

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

赞(0)
未经允许不得转载:171主机测评 » 【Zabbix运维监控实战(附图文教程):Nginx 服务可用性、连接请求状态、CPU 内存占用与 JVM(Jar 包 / Tomcat)全维度监控】
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址