(二)zabbix监控(Windows、java、网络设备、物理服务器)

文章目录

集群监控

客户端 监控方式
linux zabbix agent/zabbix agent2
windows server zabbix agent/zabbix agent2
网络设备 snmp 接口与协议
硬件设备物理服务器 ipmi (物理服务器,监控风扇转速,cpu 温度)
java 应用或业务 🅰️ 自定义监控(zbx-agent + 自定义)jmap -heap jvm 信息导出 (推荐) 🅱️ jmx javagateway 监控

监控Windows

zabbix agent官方下载地址: Download Zabbix agents

(1)下载zabbix agent/zabbix agent2

(2)双击下载一直点下一步

Host name:填写windows本机host

Zabbix server IP/DNS:填写zabbix server端的IP

Agent listen port:agent的端口,默认10050,可不做修改

Server or proxy for active checks:填写zabbix server端的IP

(3)zabbix web 添加主机

监控网络设备

SNMP支持范围

  • 网络设备(硬件设备):这些都是支持SNMP协议(服务)
  • 企业路由器,三层交换机
  • 防火墙

SNMP

snmp:简单网络管理协议,管理网络设备,查看网络设备信息

服务端:网络设备snmp服务端161端口

客户端:监控

SNMP 的 3 个版本差异

版本 认证方式 特点 & 适用场景
SNMP v1 团体名(类似密码) 最早版本,功能简单,安全性低,仅用于早期简单场景
SNMP v2c 团体名认证 兼容 v1,新增批量查询(GetBulk)、更多数据类型,是目前最常用的版本
SNMP v3 用户名 + 密码(支持加密) 安全性最高(防非法访问、防报文窃听),但配置复杂、效率略低,适用于高安全场景

路由器配置

开启路由器的SNMP功能

SNMP版本选择:一般使用v2c

设置团体名,相当于密码

Read-Only只读(一般做监控给读权限即可)

Read-Write读写

zabbix server配置和zabbix web配置

shell 复制代码
#1.服务端安装
yum install -y net-snmp
#2.测试
snmpwalk -v 2c -c 团体名 路由器IP SysDesc

添加主机

监控物理服务器

开启IPMI

开启完成,然后就可以在zabbix web页面创建主机

监控java业务

方案类型 适用 JDK 版本 相关命令 配置要点 优势与推荐
自定义监控 JDK8;JDK11 及以上 JDK8:jstack、jmap JDK11 及以上:jhsdb jmap --heap --pid [目标进程PID] 无需修改 Zabbix 服务端 / 客户端,通过UserParameter配置自定义脚本 无需额外修改服务端 & 客户端UserParameter + 脚本,操作简单直接一般推荐使用
JMX 监控 通用 依赖 Java jmxremote 功能 1. 业务端:修改catalina.sh添加 jmxremote 参数 2. Zabbix 服务端:部署zabbix_java_gateway服务3. Zabbix 服务端:修改配置文件指定 gateway,启动 java poller 需配置服务端与客户端(开启 jmxremote)依赖 Zabbix 模板,配置流程较繁琐

自定义监控(java线程状态)

(1)手动过滤出客户端Tomcat的java线程状态

shell 复制代码
#1.过滤出tomcat的java线程PID
ps -ef |grep /usr/local/tomcat  | grep -v grep | awk '{print $2}'
#2.查看java线程状态
jstack pid | grep -i thread.state

(2)在客户端编写shell脚本

shell 复制代码
cat  > /server/scripts/java-thread-status.sh <<'EOF'
#!/bin/bash
##############################################################
# File Name:java-tread-status.sh
# Version:V1.0
# Author:csq
# Organization: www.chenshiquan.xyz
# Desc:
##############################################################
#1.vars
app=/usr/local/tomcat/
choose=$1
#2.pid
pid=`ps -ef |grep $app|grep -v grep | awk '{print $2}'`
#3.check_pid
if [ -z "$pid" ];then
	echo "不存在"
	exit 1
fi
#4.调用jstack命令
case "$choose" in
	runnable)
		jstack $pid |grep -i thread.state | grep -i runnable| wc -l
		;;
	waiting)
		jstack $pid |grep -i thread.state | grep -iw waiting| wc -l
		;;
	timed_waiting)
		jstack $pid |grep -i thread.state | grep -iw timed_waiting| wc -l
		;;
	blocked)
		jstack $pid |grep -i thread.state | grep -i blocked| wc -l
		;;
	      *)
		      echo "输入异常"
esac
EOF

(3)配置zabbix客户端键值

shell 复制代码
#1.配置客户端agent键值,在子配置文件配置
cat > /etc/zabbix/zabbix_agentd.d/java-thread-status.conf  <<EOF
UserParameter=java.thread[*],sudo bash /server/scripts/java-thread-status.sh $1
EOF
#2.重启agent
systemctl restart zabbix-agent

(4)zabbix服务端测试客户端键值对

shell 复制代码
#1.zabbix服务端测试
zabbix_get  -s 172.16.1.115 -k java.thread["runnable"]
zabbix_get  -s 172.16.1.115 -k java.thread["blocked"]

(5)zabbix web页面tomcat业务主机添加监控项

(6)克隆监控项,给其他java线程状态页创建监控项

(7)配置blocked线程阻塞就报警,配置监控项blocked的触发器

(8)添加java线程状态图形

(9)创建模板,将监控项、触发器、图形添加到模板中

(10)关联主机

相关项监控

如果zabbix 想要看 jvm内存详细信息呢?

xshell复制两个窗口,同时执行相同命令,可以看到另一个窗口是报错的

这是因为Linux 的 ptrace 调试机制 + JVM 工具的 "排他性附加" 限制 ------ 同一时间,一个 Java 进程只能被一个 jhsdb 这类 "调试型工具" 附加,第二个窗口会因 "附加权限被占用" 报错

相关项监控就是通过正则表达式将,将数据源过滤提取出你要的结果

(1)使用命令输出你要提取的数据源

shell 复制代码
#1.获取tomcat业务的所有jvm内存信息
[root@web03 ~]# jhsdb jmap --heap --pid 861
Attaching to process ID 861, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 11.0.28+6

using thread-local object allocation.
Garbage-First (G1) GC with 2 thread(s)

Heap Configuration:
   MinHeapFreeRatio         = 40
   MaxHeapFreeRatio         = 70
   MaxHeapSize              = 513802240 (490.0MB)
   NewSize                  = 1363144 (1.2999954223632812MB)
   MaxNewSize               = 308281344 (294.0MB)
   OldSize                  = 5452592 (5.1999969482421875MB)
   NewRatio                 = 2
   SurvivorRatio            = 8
   MetaspaceSize            = 21807104 (20.796875MB)
   CompressedClassSpaceSize = 1073741824 (1024.0MB)
   MaxMetaspaceSize         = 17592186044415 MB
   G1HeapRegionSize         = 1048576 (1.0MB)

Heap Usage:
G1 Heap:
   regions  = 490
   capacity = 513802240 (490.0MB)
   used     = 26731008 (25.49267578125MB)
   free     = 487071232 (464.50732421875MB)
   5.202586894132653% used
G1 Young Generation:
Eden Space:
   regions  = 15
   capacity = 19922944 (19.0MB)
   used     = 15728640 (15.0MB)
   free     = 4194304 (4.0MB)
   78.94736842105263% used
Survivor Space:
   regions  = 1
   capacity = 1048576 (1.0MB)
   used     = 1048576 (1.0MB)
   free     = 0 (0.0MB)
   100.0% used
G1 Old Generation:
   regions  = 11
   capacity = 34603008 (33.0MB)
   used     = 9953792 (9.49267578125MB)
   free     = 24649216 (23.50732421875MB)
   28.765684185606062% used
#2.写个脚本获取tomcat业务的所有jvm内存信息
cat > /server/scripts/java-thread-jvm-memory.sh <<'EOF'
#!/bin/bash
##############################################################
# File Name:java-tread-status.sh
# Version:V1.0
# Author:csq
# Organization: www.chenshiquan.xyz
# Desc:
##############################################################
#1.vars
app=/usr/local/tomcat/
choose=$1
#2.pid
pid=`ps -ef |grep $app|grep -v grep | awk '{print $2}'`
#3.check_pid
if [ -z "$pid" ];then
	echo "不存在"
	exit 1
fi
#4.调用jhsdb命令
jhsdb jmap --heap --pid $pid
EOF

(2)在客户端agent子配置文件中写入相关键值

shell 复制代码
#1.修改客户端agent子配置文件
cat  >> /etc/zabbix/zabbix_agentd.d/java-thread-status.conf <<EOF
#jvm内存信息
UserParameter=java.jvm.mem.all,sudo bash /server/scripts/java-thread-jvm-memory.sh $1
EOF

#2.重启agent生效配置文件
systemctl restart zabbix-agent

(3)zabbix服务端测试键值

shell 复制代码
#1.测试客户端键值是否可用
zabbix_get  -s 172.16.1.115 -k java.jvm.mem.all
#2.如果可用继续下一步

(4)在zabbix web页面tomcat业务主机创建主要监控项,获取数据源

(5)创建tomcat业务jvm内存信息的相关项,并设置正则过滤数据源

监控指标名称 最终修正正则表达式(Heap Configuration 专用) 匹配结果示例
最小堆空闲比率(MinHeapFreeRatio) \s+MinHeapFreeRatio\s+=\s+([0-9]+) 40
最大堆空闲比率(MaxHeapFreeRatio) \s+MaxHeapFreeRatio\s+=\s+([0-9]+) 70
最大堆大小(字节数) \s+MaxHeapSize\s+=\s+([0-9]+)\s+\(([0-9.]+)MB\) 513802240
最大堆大小(MB) \s+MaxHeapSize\s+=\s+[0-9]+\s+\(([0-9.]+)MB\) 490.0
新生代初始大小(字节数) \s+NewSize\s+=\s+([0-9]+)\s+\(([0-9.]+)MB\) 1363144
新生代初始大小(MB) \s+NewSize\s+=\s+[0-9]+\s+\(([0-9.]+)MB\) 1.2999954223632812
新生代最大大小(字节数) \s+MaxNewSize\s+=\s+([0-9]+)\s+\(([0-9.]+)MB\) 308281344
新生代最大大小(MB) \s+MaxNewSize\s+=\s+[0-9]+\s+\(([0-9.]+)MB\) 294.0
老年代初始大小(字节数) \s+OldSize\s+=\s+([0-9]+)\s+\(([0-9.]+)MB\) 5452592
老年代初始大小(MB) \s+OldSize\s+=\s+[0-9]+\s+\(([0-9.]+)MB\) 5.1999969482421875
新生代与老年代比例(NewRatio) \s+NewRatio\s+=\s+([0-9]+) 2
新生代 Eden/Survivor 比例(SurvivorRatio) \s+SurvivorRatio\s+=\s+([0-9]+) 8
元空间初始大小(字节数) \s+MetaspaceSize\s+=\s+([0-9]+)\s+\(([0-9.]+)MB\) 21807104
元空间初始大小(MB) \s+MetaspaceSize\s+=\s+[0-9]+\s+\(([0-9.]+)MB\) 20.796875
压缩类空间大小(字节数) \s+CompressedClassSpaceSize\s+=\s+([0-9]+)\s+\(([0-9.]+)MB\) 1073741824
压缩类空间大小(MB) \s+CompressedClassSpaceSize\s+=\s+[0-9]+\s+\(([0-9.]+)MB\) 1024.0
最大元空间大小(字节数) \s+MaxMetaspaceSize\s+=\s+([0-9]+)\s+MB 17592186044415
G1 堆区域大小(字节数) \s+G1HeapRegionSize\s+=\s+([0-9]+)\s+\(([0-9.]+)MB\) 1048576
G1 堆区域大小(MB) \s+G1HeapRegionSize\s+=\s+[0-9]+\s+\(([0-9.]+)MB\) 1.0
shell 复制代码
#perl正则
\d [0-9]
\w [a-zA-Z0-9_]
\s 空格,回车,tab键

(6)如法炮制,将自己想要获取的内容添加监控项

(7)创建模板将创建的监控项关联进去

(8)如果有需要可以将他们导出

JMX监控(java-gateway监控)

zabbix官方文档:13 JMX监控

流程

  • 开启远程监控功能
  • zabbix服务你部署java gateway配置
  • 添加主机关联模板

(1)开启远程监控功能

shell 复制代码
#在tomcat根目录下的 bin/catalina.sh
#在#!/bin/bash注释下面添加
CATALINA_OPTS="-Dcom.sun.management.jmxremote \     #启用远程监控JMX
-Dcom.sun.management.jmxremote.port=12345 \         #默认启动的JMX端口号
-Dcom.sun.management.jmxremote.authenticate=false \ #不使用用户名密码
-Dcom.sun.management.jmxremote.ssl=false \          #不使用SSL认证
-Djava.rmi.server.hostname=172.16.1.9"              #是tomcat主机的IP地址,不是zabbix
export CATALINA_OPTS
#重启生效
systemctl restart tomcat

(2)如果是docker搭建zabbix服务端运行gateway

shell 复制代码
#version: "3.8"
services:  
  db:  
    image: mysql:8.0-debian
    container_name: zbx_db
    networks:   
      - oldboy_zbx_net  
    restart: always   
    volumes:  
      - ./zbx_db/:/var/lib/mysql/
    environment:  
      MYSQL_ROOT_PASSWORD: "${DB_ROOT_PASS}"
      MYSQL_DATABASE: "${ZBX_DB}"   
      MYSQL_USER: "${ZBX_USER}" 
      MYSQL_PASSWORD: "${ZBX_PASS}" 
    command:  
      - --character-set-server=utf8  
      - --collation-server=utf8_bin  
      - --default-authentication-plugin=mysql_native_password  

  zbx_server:
    image: zabbix/zabbix-server-mysql:7.0.9-ubuntu
    container_name: zabbix-server-mysql-7.0
    networks:   
      - oldboy_zbx_net  
    restart: always   
    ports:  
      - 10051:10051
    depends_on:
      - db
    environment:  
      DB_SERVER_HOST: "db"
      MYSQL_ROOT_PASSWORD: "${DB_ROOT_PASS}"
      MYSQL_DATABASE: "${ZBX_DB}"   
      MYSQL_USER: "${ZBX_USER}" 
      MYSQL_PASSWORD: "${ZBX_PASS}" 

  zbx_web:
    image: zabbix/zabbix-web-nginx-mysql:7.0.9-ubuntu
    container_name: zabbix-web-nginx-mysql
    networks:   
      - oldboy_zbx_net  
    restart: always   
    ports:  
      - 80:8080
    depends_on:
      - db
      - zbx_server
    environment:  
      ZBX_SERVER_HOST: "zbx_server"
      DB_SERVER_HOST: "db"
      MYSQL_ROOT_PASSWORD: "${DB_ROOT_PASS}"
      MYSQL_DATABASE: "${ZBX_DB}"   
      MYSQL_USER: "${ZBX_USER}" 
      MYSQL_PASSWORD: "${ZBX_PASS}" 

  
networks:  
  oldboy_zbx_net:  
    driver: bridge  
    ipam:  
      config:  
        - subnet: 172.200.0.0/16  
          ip_range: 172.200.1.0/24  
          gateway: 172.200.1.1

(2)yum安装zabbix服务端部署java gateway配置

zabbix官方网站:下载Zabbix 7.0 LTS for CentOS 7

shell 复制代码
#0.先添加zabbix-agent仓库源,如果添加过了就别添加了
#1.客户端安装zabbix-java-gateway
yum install -y zabbix-java-gateway
#2.启动
systemctl enable --now zabbix-java-gateway
###查看端口
ss -tulnp |grep 10052
#3.配置zabbix服务端(我的zabbix是编译安装,所以地址不一样)
grep -n 'Java.*=' /usr/local/zabbix/etc/zabbix_server.conf
362:JavaGateway=172.16.1.115 #指向JAVA gateway主机
370:JavaGatewayPort=10052    #指定端口,此为默认值,可不修改
378:StartJavaPollers=5       #指定开启的进程数,默认为0,即不开启,所以必须修改此行
#4.重启服务端
systemctl restart zabbix_server
#5.检查java poller进程

(3)添加主机关联模板

注意防火墙

jar包应用

带 JMX 远程监控配置的 Java 程序启动命令

shell 复制代码
java -Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=12345 \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-Djava.rmi.server.hostname=172.16.1.9 \
-jar xxx.jar

报错解决

cannot send list of active checks to "10.0.0.1": host [DESKTOP-VL8O7G4] not found

其实在 z abbix web上是有 agent主机最新数据的,出现上面的问题是因为 web和agent配置的Hos tname对不上 ,但是agent主机是有配 server ip的,所以也可以请求到数据。处理也比较简单

两边改为一致的,方便记忆的名字 ,然后 重启agent服务 就行了

shell 复制代码
[root@m03 ~]# tail -f /var/log/zabbix/zabbix_server.log 
 42983:20251201:210156.535 cannot send list of active checks to "10.0.0.1": host [DESKTOP-VL8O7G4] not found
 42984:20251201:210257.043 cannot send list of active checks to "10.0.0.1": host [DESKTOP-VL8O7G4] not found
 42983:20251201:210356.457 cannot send list of active checks to "10.0.0.1": host [DESKTOP-VL8O7G4] not found
 42980:20251201:210456.898 cannot send list of active checks to "10.0.0.1": host [DESKTOP-VL8O7G4] not found
 42983:20251201:210556.335 cannot send list of active checks to "10.0.0.1": host [DESKTOP-VL8O7G4] not found
 42984:20251201:210656.756 cannot send list of active checks to "10.0.0.1": host [DESKTOP-VL8O7G4] not found
 42984:20251201:210756.161 cannot send list of active checks to "10.0.0.1": host [DESKTOP-VL8O7G4] not found
 42980:20251201:210856.586 cannot send list of active checks to "10.0.0.1": host [DESKTOP-VL8O7G4] not found
 43012:20251201:210918.965 Zabbix agent item "service.info["SamSs",state]" on host "windows" failed: first network error, wait for 15 seconds
 43012:20251201:210933.965 resuming Zabbix agent checks on host "windows": connection restored
相关推荐
未知原色16 小时前
NODE.JSB快速下载及安装
linux·运维·node.js
kyle~17 小时前
Linux---scp 安全文件传输
linux·网络·安全
wxh_无香花自开17 小时前
pgsql 笔记
linux·服务器·postgresql·pgsql
pale_moonlight17 小时前
十、Scala应用实践(下)
linux·开发语言·scala
大二就转专业17 小时前
Gnome/Ubuntu 桌面 VS Code 向上/下复制不起作用
linux·vscode·ubuntu
字节拾光录17 小时前
局域网文件共享全方案:Windows/Mac/Linux通用指南,告别U盘与权限难题!
linux·windows·macos
拾光Ծ17 小时前
【Linux】深入理解“进程”:进程状态 -> Linux内核O(1)调度算法
linux·运维·服务器·算法
凤凰战士芭比Q17 小时前
(三)zabbix集群监控
linux·zabbix
羑悻的小杀马特17 小时前
【仿RabbitMQ实现消息队列项目】交换机智能路由、队列流量隔离、绑定信息精准定向、消息可靠投递——四模块协同打造低耦合消息系统!
linux·rabbitmq·项目·消息·交换机·队列·绑定信息