Zabbix监控java程序和网络设备SNMP
监控 JAVA 程序
Zabbix Java Gateway 介绍
Zabbix 不支持直接监控JAVA应用
如果要监控JAVA程序比如Tomcat等,需要使用 Java gateway 做为代理,才能从JAVA应用中获取数据
Zabbix Java Gateway 通过监听10052/tcp 端口实现监控JAVA应用
注意: JAVA应用要求开启JMX功能才被被监控
Zabbix 监控JVM流程
- zabbix-server 通知 zabbix-Java-Gateway需要获取监控主机的哪些监控项
- Zabbix-Java-Gateway 通过 JMX 协议请求采集 Java进程数据
- Java程序通过 JMX 协议返回数据给 zabbix-Java-Gateway
- zabbix-Java-Gateway 最终返回数据给 zabbix-server
- zabbix-server 将采集的 JAVA 数据存储至数据库,然后进行 Web 展示
实战案例: 监控 Java 应用 Tomcat 服务
部署 tomcat 服务并开启 JMX 功能
安装 tomcat
开启 JMX 监控
JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。
JMX在Java编程语言中定义了应用程序以及网络管理和监控的体系结构、设计模式、应用程序接口以及服务。通常使用JMX来监控系统的运行状态或管理系统的某些方面,比如清空缓存、重新加载配置文件等
tomcat 开启远程 JMX 环境配置
#二进制安装tomcat
vim /usr/local/tomcat/bin/catalina.sh
CATALINA_OPTS="$CATALINA__OPTS
-Dcom.sun.management.jmxremote #启用远程监控JMX
-Djava.rmi.server.hostname=<JAVA主机IP> #是tomcat主机的IP地址,不是zabbix服务器地址
-Dcom.sun.management.jmxremote.port=XXXXX #默认启动的JMX端口号
-Dcom.sun.management.jmxremote.authenticate=false #不使用用户名密码
-Dcom.sun.management.jmxremote.ssl=false" #不使用ssl认证
范例:Ubuntu22.04 包安装tomcat开启JMX功能
[root@ubuntu2204 ~]#apt install tomcat9 -y
[root@ubuntu2204 ~]#dpkg -L tomcat9-common |grep catalina.sh /usr/share/tomcat9/bin/catalina.sh
#开启JMX功能
[root@ubuntu2204 ~]#vim /usr/share/tomcat9/bin/catalina.sh
......
CATALINA_OPTS="$CATALINA__OPTS -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=10.0.0.201"
# OS specific support. $var _must_ be set to either true or false.
[root@ubuntu2204 ~]#systemctl restart tomcat9
[root@ubuntu2204 ~]#ss -ntl|grep 12345
LISTEN 0 50 *:12345 *:*
范例: 二进制安装Tomcat 开启 JMX 功能
[root@tomcat ~]#vim /usr/local/tomcat/bin/catalina.sh
.......
# -----------------------------------------------------------------------------
#添加下一行
CATALINA_OPTS="$CATALINA__OPTS -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=10.0.0.106"
# OS specific support. $var _must_ be set to either true or false.
.......
#查看端口12345是否打开
[root@tomcat ~]#systemctl restart tomcat
[root@tomcat ~]#ss -ntl
测试通过java工具 jconsole 进行 JMX 监控
使用 java 客户端获取 JMX 信息 (可选)
cmdline-jmxclient-0.10.3.jar 是一个开源jar包,在zabbix 中常用于测试的一个工具,可以用来测试 jmx是否配置正确。在监控方面后还可以对Tomcat各种属性进行监控。下面使用java客户端cmdline-jmxclient进行测试
下载链接
https://github.com/qiueer/zabbix/blob/master/Tomcat/cmdline-jmxclient-0.10.3.jar
范例: 测试能否获取到java当前线程数和最大线程数
#先下载cmdline-jmxclient-0.10.3.jar文件
[root@zabbix-server ~]#ll cmdline-jmxclient-0.10.3.jar
-rw-r--r-- 1 root root 20124 Aug 23 22:41 cmdline-jmxclient-0.10.3.jar
#测试能否获取到java当前线程数和最大线程数:
[root@zabbix-server ~]#yum -y install java
#Ubuntu安装下面包
[root@zabbix-server ~]#apt install openjdk-8-jdk -y
[root@zabbix-server ~]#java -jar cmdline-jmxclient-0.10.3.jar - 10.0.0.106:12345 'Catalina:name="http-nio-8080",type=ThreadPool' currentThreadCount
08/30/2020 13:27:07 +0800 org.archive.jmx.Client currentThreadCount: 10
#测试能否获取到java最大线程数:
[root@zabbix-server ~]#java -jar cmdline-jmxclient-0.10.3.jar - 10.0.0.106:12345 'Catalina:name="http-nio-8080",type=ThreadPool' maxThreads
08/30/2020 13:27:33 +0800 org.archive.jmx.Client maxThreads: 200
部署 Java Gateway 服务器
Java gateway 是一个独立于zabbix server和 zabbix agent的组件,默认使用端口10052/tcp, 所以java gateway可以是单独的一台服务器,但是也可以和zabbix server或者zabbix agent 共用一台服务器
Java gatway 可以用两种方法安装
- 包安装
- 编译安装
注意:
- Zabbix Server 无需安装 JDK
- 但 Java gateway 本质就是一个JAVA程序,所以需要安装JDK
包安装 Java gateway
范例:Ubuntu22.04 安装zabbix6 java gateway
[root@ubuntu2204 ~]#wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-4+ubuntu22.04_all.deb
[root@ubuntu2204 ~]#dpkg -i zabbix-release_6.0-4+ubuntu22.04_all.deb
[root@ubuntu2204 ~]#apt update
[root@ubuntu2204 ~]#cat /etc/apt/sources.list.d/zabbix.list
# Zabbix main repository
deb https://mirror.tuna.tsinghua.edu.cn/zabbix/zabbix/6.0/ubuntu jammy main
deb-src https://mirror.tuna.tsinghua.edu.cn/zabbix/zabbix/6.0/ubuntu jammy main
#安装JDK(可选)
[root@ubuntu2204 ~]#apt -y install openjdk-11-jdk
#安装zabbix-java-gateway会自动安装JDK,但默认首次无法启动成功,提示无法找到JAVA,需要再次手动重新启动服务才能找到Java
[root@ubuntu2204 ~]#apt -y install zabbix-java-gateway
......
Created symlink /etc/systemd/system/multi-user.target.wants/zabbix-java-
gateway.service → /lib/systemd/system/zabbix-java-gateway.service.
Job for zabbix-java-gateway.service failed because the control process exited
with error code.
See "systemctl status zabbix-java-gateway.service" and "journalctl -xeu zabbix-
java-gateway.service" for details.
invoke-rc.d: initscript zabbix-java-gateway, action "start" failed.
× zabbix-java-gateway.service - Zabbix Java Gateway
Loaded: loaded (/lib/systemd/system/zabbix-java-gateway.service; enabled;
vendor preset: enabled)
Active: failed (Result: exit-code) since Fri 2023-06-02 15:32:48 CST; 4ms
ago
Process: 32812 ExecStart=/usr/sbin/zabbix_java_gateway_startup (code=exited,
status=1/FAILURE)
CPU: 7ms
6月 02 15:32:48 zabbix-server systemd[1]: Starting Zabbix Java Gateway...
6月 02 15:32:48 zabbix-server zabbix_java_gateway_startup[32815]:
/usr/sbin/zabbix_java_gateway_startup: 1: java: not found
6月 02 15:32:48 zabbix-server zabbix_java_gateway_startup[32812]: Zabbix Java
Gateway did not start
6月 02 15:32:48 zabbix-server systemd[1]: zabbix-java-gateway.service: Control
process exited, code=exited, status=1/FAILURE
6月 02 15:32:48 zabbix-server systemd[1]: zabbix-java-gateway.service: Failed
with result 'exit-code'.
......
6月 02 15:32:48 zabbix-server zabbix_java_gateway_startup[32812]: Zabbix Java
Gateway did not start
6月 02 15:32:48 zabbix-server systemd[1]: zabbix-java-gateway.service: Control
process exited, code=exited, status=1/FAILURE
6月 02 15:32:48 zabbix-server systemd[1]: zabbix-java-gateway.service: Failed
with result 'exit-code'.
......
[root@ubuntu2204 ~]#java -version
openjdk version "11.0.19" 2023-04-18
OpenJDK Runtime Environment (build 11.0.19+7-post-Ubuntu-0ubuntu122.04.1)
OpenJDK 64-Bit Server VM (build 11.0.19+7-post-Ubuntu-0ubuntu122.04.1, mixed
mode, sharing)
#安装后启动失败,需要手动启动
[root@ubuntu2204 ~]#systemctl start zabbix-java-gateway.service
[root@ubuntu2204 ~]#ps aux |grep java
zabbix 33934 0.2 1.4 3568544 57844 ? Sl 15:33 0:00 java -server
-Dlogback.configurationFile=/etc/zabbix/zabbix_java_gateway_logback.xml -
classpath lib:lib/android-json-4.3_r3.1.jar:lib/logback-classic-
1.2.9.jar:lib/logback-core-1.2.9.jar:lib/slf4j-api-1.7.32.jar:bin/zabbix-java-
gateway-6.0.18.jar -Dzabbix.pidFile=/var/run/zabbix/zabbix_java_gateway.pid -
Dsun.rmi.transport.tcp.responseTimeout=3000 com.zabbix.gateway.JavaGateway
[root@ubuntu2204 ~]#ss -ntlp|grep 10052
LISTEN 0 50 *:10052 *:*
users:(("java",pid=11198,fd=14))
编译安装 Java Gateway
编译安装使用的是zabbix agent,zabbix server 是同一个源码包,只需指定相关的编译选项即可
范例: 编译安装 zabbix java gateway 5.0
[root@centos8 ~]#wget https://cdn.zabbix.com/zabbix/sources/stable/5.0/zabbix-5.0.13.tar.gz
[root@centos8 ~]#tar xf zabbix-5.0.13.tar.gz
[root@centos8 ~]#cd zabbix-5.0.13/
[root@centos8 zabbix-5.0.13]#./configure --prefix=/apps/zabbix_java_gateway --enable-java --with-net-snmp --with-mysql -with-ssh2
[root@centos8 zabbix-5.0.13]#make && make install
[root@centos8 zabbix-5.0.13]#/apps/zabbix_java_gateway/sbin/zabbix_java/startup.sh
[root@centos8 ~]#ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 100 127.0.0.1:25 0.0.0.0:*
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 100 [::1]:25 [::]:*
LISTEN 0 50 *:10052 *:*
LISTEN 0 128 [::]:22 [::]:*
[root@centos8 ~]#ps aux|grep java
root 9253 2.1 2.9 2570612 54684 pts/1 Sl 09:29 0:00 java -server
-classpath lib:lib/android-json-4.3_r3.1.jar:lib/logback-classic-
1.2.3.jar:lib/logback-core-1.2.3.jar:lib/slf4j-api-1.7.30.jar:bin/zabbix-java-
gateway-5.0.13.jar -Dzabbix.pidFile=/tmp/zabbix_java.pid -
Dsun.rmi.transport.tcp.responseTimeout=3000 com.zabbix.gateway.JavaGateway
root 9270 0.0 0.0 12112 988 pts/0 S+ 09:29 0:00 grep --
color=auto java
配置 Zabbix Server 支持 Java gateway
Zabbix Server 开启 Java gateway 功能
默认有关java的监控项是不支持的
配置下面后,上面相关监控项会支持
#包安装zabbix server
[root@zabbix-server ~]#vim /etc/zabbix/zabbix_server.conf
#编译安装zabbix server
[root@zabbix-server ~]#vim /apps/zabbix_server/etc/zabbix_server.conf
JavaGateway=10.0.0.105 #指向JAVA gateway主机
StartJavaPollers=10 #指定开启的进程数,默认为0,即不开启,所以必须修改此行
JavaGatewayPort=10052 #指定端口,此为默认值,可不修改
[root@zabbix-server ~]#systemctl restart zabbix-server.service
#查看进程
[root@zabbix-server ~]#ps -ef|grep java
zabbix 2529 2518 0 12:21 ? 00:00:00
/apps/zabbix_server/sbin/zabbix_server: java poller #1 [got 0 values in 0.000011
sec, idle 5 sec]
zabbix 2530 2518 0 12:21 ? 00:00:00
/apps/zabbix_server/sbin/zabbix_server: java poller #2 [got 0 values in 0.000011
sec, idle 5 sec]
zabbix 2531 2518 0 12:21 ? 00:00:00
/apps/zabbix_server/sbin/zabbix_server: java poller #3 [got 0 values in 0.000025
sec, idle 5 sec]
zabbix 2532 2518 0 12:21 ? 00:00:00
/apps/zabbix_server/sbin/zabbix_server: java poller #4 [got 0 values in 0.000026
sec, idle 5 sec]
zabbix 2533 2518 0 12:21 ? 00:00:00
/apps/zabbix_server/sbin/zabbix_server: java poller #5 [got 0 values in 0.000014
sec, idle 5 sec]
zabbix 2534 2518 0 12:21 ? 00:00:00
/apps/zabbix_server/sbin/zabbix_server: java poller #6 [got 0 values in 0.000034
sec, idle 5 sec]
zabbix 2535 2518 0 12:21 ? 00:00:00
/apps/zabbix_server/sbin/zabbix_server: java poller #7 [got 0 values in 0.000012
sec, idle 5 sec]
zabbix 2536 2518 0 12:21 ? 00:00:00
/apps/zabbix_server/sbin/zabbix_server: java poller #8 [got 0 values in 0.000020
sec, idle 5 sec]
zabbix 2537 2518 0 12:21 ? 00:00:00
/apps/zabbix_server/sbin/zabbix_server: java poller #9 [got 0 values in 0.000033
sec, idle 5 sec]
zabbix 2538 2518 0 12:21 ? 00:00:00
/apps/zabbix_server/sbin/zabbix_server: java poller #10 [got 0 values in
0.000046 sec, idle 5 sec]
root 2571 2334 0 12:22 pts/1 00:00:00 grep --color=auto java
使用系统内置模板监控 tomcat 主机
如果 Java gateway 开启JMX功能,也可以直接监控 java gateway 自身
添加需要监控的java服务器,指定通过JMX接口实现
选中系统内置的模板:
Template App Generic Java JMX
Template App Apache Tomcat JMX
注意: Template App Apache Tomcat 只支持老版本的tomcat,所以此处不选择它
导入自定义模板
通过自定义的 JMX 模板,可以定制生产所需的监控项和阈值
将自定义的模板关联到监控的tomcat主机
取消之前关联的模板
注意: 主机的 JMX 标识正常情况下会变绿
验证使用自定义模板监控结果
监控网络设备 SNMP
SNMP 介绍和组成
SNMP 介绍
SNMP 即 Simple Network Management Protocol 简单网络管理协议,属于TCP/IP五层协议中的应用层协议,用于网络管理的协议,SNMP主要用于网络设备的管理。
SNMP的基本思想:为不同种类的设备、不同厂家生产的设备、不同型号的设备,定义为一个统一的接口和协议,使得管理员可以是使用统一的外观面对这些需要管理的网络设备进行管理。通过网络,管理员可以管理位于不同物理空间的设备,从而大大提高网络管理的效率,简化网络管理员的工作。
通常一线的网络硬件厂商的设备都支持SNMP协议,如:华为,华三,思科,锐捷等,另外Linux,Unix,Windows,MacOS等也都支持
SNMP协议在1988年被制定,并被Internet体系结构委员会(IAB,Internet Architecture Board)采纳作为一个短期的网络管理解决方案,由于SNMP的简单性,在Internet时代得到了蓬勃的发展,1992年发布了SNMPv2版本,以增强SNMPv1的安全性和功能,SNMP的协议版本目前有SNMP v1、SNMPV 2c和 SNMP v3三种版本,其具体差别如下
SNMP v1采用团体名(Community Name)认证,团体名用来定义SNMP NMS和SNMP Agent的关系,如果SNMP报文携带的团体名没有得到设备的认可,该报文将被丢弃,团体名起到了类似于密码的作用,用来限制SNMP NMS对SNMP Agent的访问
SNMP v2c也采用团体名认证,它在兼容SNMP v1的同时又扩充了SNMP v1的功能,它提供了更多的操作类型(批量获取GetBulk和通知请求InformRequest)、支持更多的数据类型(Counter64等)、提供了更丰富的错误代码且能够更细致地区分错误。此版本使用较多.
SNMP v3提供了基于用户的安全模型(USM,User-Based Security Model)的认证机制,用户可以设置认证和加密功能,认证用于验证报文发送方的合法性,避免非法用户的访问,加密则是对NMS和Agent之间的传输报文进行加密,以免被窃听。通过有无认证和有无加密等功能组合,可以为SNMP NMS和SNMP Agent之间的通信提供更高的安全性。此版本安全性高,但效率不高.
SNMP 工作原理
SNMP网络设备分为NMS和Agent两种:
- NMS(Network Management Station,网络管理站)是SNMP网络的管理者,NMS是运行SNMP客户端管理程序的工作站,能够提供友好的人机交互界面,方便网络管理员完成绝大多数的网络管理工作。
- Agent是SNMP网络的被管理者。Agent是驻留在设备上的一个进程,负责接收、处理来自NMS的请求报文。在一些紧急情况下,如接口状态发生改变等,Agent也会主动通知NMS。
- NMS和Agent之间通过SNMP协议来交互管理信息。
SNMP管理进程与代理进程之前为了交互信息,定义了5种报文:
get-request操作:这个操作是由管理进程发起,向代理进程处请求提取一个或多个参数值。
get-next-request操作:这个操作是由管理进程发起,向从代理进程处提取一个或多个参数的下一个参数值。
get-response操作:这个操作是由代理进程发出的,向管理进程返回的一个或多个参数值。
set-request操作:这个操作是由管理进程发起,对代理进程设置一个或多个参数值。
trap操作:这个操作是由代理进程主动发出的报文,通知管理进程有某些事情发生。
SNMP 组成
基于TCP/IP的SNMP网络管理包含以下组成部分
-
管理信息库MIB(Management Information Base): 管理信息库包含所有代理进程的所有可被查
询和修改的参数。RFC 1213 [McCloghrie and Rose 1991]定义了第二版的MIB,叫做MIB-II。OID(object identifiers): 是与对象相关联的用来无歧义地标识对象的全局唯一的值,一个OID是一
个唯一的键值对,用于标识具体某一个设备的某个具体信息(对象标识),如端口信息、设备名称
等。即一个OID就是网络通信中对象的身份证。 -
管理信息结构SMI(Structure of Management Information): 关于MIB的一套公用的结构和表示
符号。这个在RFC 1155 [Rose and McCloghrie 1990]中定义。SMI 是一种语言,是为了确保网络
管理数据的语法和语义明确和无二义性而定义的语言。它是定义被管理网络实体中特定数据的语
言。它定义了数据类型、对象模型,以及写入和修改管理信息的规则。比如: 支持INTEGER,OCTER
STRING,DisplayString,IpAddress等数据类型 -
SNMP(Simple Network Management Protocol): 管理进程和代理进程之间的通信协议,叫做
简单网络管理协议。在RFC 1157 [Case et al.1990]中定义。SNMP包括数据报交换的格式等。尽管
可以在运输层采用各种各样的协议,但是在SNMP中,用得最多的协议还是UDP。
上述三部分相互独立,每部分都定义了单独标准(RFC)。SNMP定义通信的方式和格式,但不指明具体
设备上的具体数据,每种设备的数据细节在MIB中定义,这样做达到了“控制与数据相分离”的目的,能提
供很好的兼容性和可扩展性。而SMI又为保持MIB的简单性和可扩展性提供了很好的支持。
MIB 和 OID
管理信息库MIB可以分为公有MIB和私有MIB两种
- 公有MIB:一般由RFC定义,主要用来对各种公有协议进行结构化设计和接口标准化处理。例如:
OSPF-MIB(RFC1850)/BGP4-MIB(RFC1657)都是典型的公有MIB。大多数的设备制造商都需
要按照RFC的定义来提供SNMP接口。 - 私有MIB:是公有MIB的必要补充,当公司自行开发私有协议或者特有功能时,可以利用私有MIB
来完善SNMP接口的管理功能,同时对第三方网管软件管理存在私有协议或特有功能的设备提供支
持。
MIB中存放了对每个对象都指定唯 一的对象标识OID, OID是一种数据类型,它指明一种“授权”命名的对象。“授权”的意思就是这些标识不是随便分配的,它是由一些权威机构进行管理和分配的。对象标识是一个整数序列,以点(“.”)分隔。这些整数构成一个树型结构,类似于DNS或Unix的文件系统。对象标识从树的顶部开始,顶部没有标识,以root表示
树上的每个结点同时还有一个文字名。例如标识 .1.3.6.1.2.1和iso.org.dod.internet.memt.mib对应。这主要是为了人们阅读方便。在实际应用中,也就是说在管理进程和代理进程进行数据报交互时,MIB变量名是以对象标识来标识的,都是以1.3.6.1.2.1开头的。
一般情况下(如交换机、防火墙、PC)使用的路径如图中所示,iso-->org-->dod-->internet,所以这些设备信息的oid必然以1.3.6.1开头,之后mgmt为公有库,包含了一些设备共同具备的信息,例如1.3.6.1.2.1.1.5为主机名,而private为私有库,再根据不同的公司,MIB树继续扩展下去,最后到每一个具体值的叶子节点,例如1.3.6.1.4.1.2021.4.3.0为Linux操作系统的交换区大小

常见 OID
oid-info是一个内容丰富的网站,包含了大量公有或私有的MIB信息,在知道部分OID的情况,可以方便的进行节点具体信息的查看。但是树太过庞大,仅仅从网站上查看效率十分低下,直接从设备商处获取mib库是最方便的做法。
参考链接
http://www.oid-info.com/index.htm
#注意:查询时无需输入最前面的.
系统信息:
sysDescr .1.3.6.1.2.1.1.1
sysobjectID .1.3.6.1.2.1.1.2
sysUpTime .1.3.6.1.2.1.1.3
syscontact .1.3.6.1.2.1.1.4
sysName .1.3.6.1.2.1.1.5
CPU负载:
l minute Load: .1.3.6.1.4.1.2021.10.1.3.1
5 minute Load: .1.3.6.1.4.1.2021.10.1.3.2
15minute Load: .1.3.6.1.4.1.2021.10.1.3.3
CPU信息:
percentage of user Cpu time: .1.3.6.1.4.1.2021.11.9.0
raw user cpu time: .1.3.6.1.4.1.2021.11.50.0
percentages of system Cpu time: .1.3.6.1.4.1.2021.11.10.0
raw system cpu time: .1.3.6.1.4.1.2021.11.52.0
percentages of idle Cpu time:.1.3.6.1.4.1.2021.11.11.0
raw idle cpu time:.1.3.6.1.4.1.2021.11.53.0
raw nice cpu time: .1.3.6.1.4.1.2021.11.51.0
内存使用:
Total swap size:.1.3.6.1.4.1.2021.4.3.0
Available swap Space: .1.3.6.1.4.1.2021.4.4.0
Total RAM in machine: .1.3.6.1.4.1.2021.4.5.0
Total RAM used: .1.3.6.1.4.1.2021.4.6.0
Total RAMFree: .1.3.6.1.4.1.2021.4.11.0
Total RAM Shared: .1.3.6.1.4.1.2021.4.13.0
Tota7 RAM Buffered: .1.3.6.1.4.1.2021.4.14.0
Total cached Memory: .1.3.6.1.4.1.2021.4.15.0
硬盘使用:
Path where the disk is mounted: .1.3.6.1.4.1.2021.9.1.2.1
Path of the device for the partition: .1.3.6.1.4.1.2021.9.1.3.1
Total size of the disk/partion (kBytes): .1.3.6.1.4.1.2021.9.1.6.1
Available space on the disk: .1.3.6.1.4.1.2021.9.1.7.1
Used space on the disk: .1.3.6.1.4.1.2021.9.1.8.1
Percentage of space used on disk: .1.3.6.1.4.1.2021.9.1.9.1
Percentage of inodes used on disk: .1.3.6.1.4.1.2021.9.1.10.1
使用 SNMP工具监控网络设备
开启设备的SNMP
登录网络设备,找到如下图中的设备管理--SNMP类似的设置界面,开启SNMP功能,然后设置团体名称即完成
配置 Zabbix Web 监控
配置-->主机-->添加主机-->选择类型为SNMP,输入路由器设备的IP地址
关联以下三个模板
Template Module EtherLike-MIB SNMP
Template Module Generic SNMP
Template Module Interfaces SNMP
查看网络设备的监测结果
监测-->主机-->图形
利用 Zabbix 监控 Linux 主机
在 Zabbix Agent 安装 SNMP 协议并配置
范例: Ubuntu 系统实现 SNMP
#在被监控端Ubuntu安装SNMP协议
#Ubuntu22.04
[root@ubuntu2204 ~]#apt -y install snmpd
[root@ubuntu2204 ~]#snmpd -v
NET-SNMP version: 5.9.1
Web: http://www.net-snmp.org/
Email: net-snmp-coders@lists.sourceforge.net
#Ubuntu20.04
[root@ubuntu2004 ~]#apt -y install snmpd
[root@ubuntu2004 ~]#snmpd -v
NET-SNMP version: 5.8
Web: http://www.net-snmp.org/
Email: net-snmp-coders@lists.sourceforge.net
#修改配置文件
[root@ubuntu2004 ~]#vim /etc/snmp/snmpd.conf
agentaddress 0.0.0.0 #修改此行
view systemonly included .1.3.6.1.2.1.1
view systemonly included .1.3.6.1.2.1.25.1
view systemonly included .1 #加此行
#如果将社区名称public修改为123456,如下即可
rocommunity 123456 default -V systemonly
rocommunity6 123456 default -V systemonly
#rocommunity public default -V systemonly
#rocommunity6 public default -V systemonly
[root@ubuntu2004 ~]#systemctl restart snmpd.service
[root@ubuntu2004 ~]#ss -ntulp|grep snmp
udp UNCONN 0 0 0.0.0.0:161 0.0.0.0:*
users:(("snmpd",pid=24871,fd=6))
范例: 红帽系统实现SNMP
#在被监控端CentOS安装SNMP服务器包
[root@centos8 ~]#yum -y install net-snmp
[root@centos8 ~]#snmpd -v
NET-SNMP version: 5.8
Web: http://www.net-snmp.org/
Email: net-snmp-coders@lists.sourceforge.net
[root@centos8 ~]#vim /etc/snmp/snmpd.conf
[root@centos8 ~]#grep '^[^#]' /etc/snmp/snmpd.conf
com2sec notConfigUser default 123456 #修改此行,设置团体密码,默认为public,此处改为123456
group notConfigGroup v1 notConfigUser
group notConfigGroup v2c notConfigUser
view systemview included .1.3.6.1.2.1.1
view systemview included .1.3.6.1.2.1.25.1.1
view systemview included .1. #添加此行,自定义授权,否则 zabbix 无法获取数据
access notConfigGroup "" any noauth exact systemview none none
syslocation Unknown (edit /etc/snmp/snmpd.conf)
syscontact Root <root@localhost> (configure /etc/snmp/snmp.local.conf)
dontLogTCPWrappersConnects yes
#验证开启161/UDP端口
[root@centos8 ~]#ss -uln
State Recv-Q Send-Q Local Address:Port Peer
Address:Port
UNCONN 0 0 0.0.0.0:161
0.0.0.0:*
UNCONN 0 0 127.0.0.1:323
0.0.0.0:*
UNCONN 0 0 [::1]:323
[::]:*
[root@centos8 ~]#ss -ntulp|grep snmp
udp UNCONN 0 0 0.0.0.0:161 0.0.0.0:* users:
(("snmpd",pid=9962,fd=9))
tcp LISTEN 0 128 127.0.0.1:199 0.0.0.0:* users:
(("snmpd",pid=9962,fd=10))
测试 SNMP 是否可以访问
在 Zabbix Server (也可以在其它主机上)安装 SNMP工具 net-snmp-utils
此工具可以测试是否可以获取Zabbix Agent的SNMP数据
注意: 在实际生产环境中Zabbix Server 在进行 SNMP 监测时,无需在 Zabbix Server 安装此工具
snmpwalk 命令格式
USAGE:snmpwalk[OPTIONS]AGENT[OID]
-h:显示帮助。
-v:指定snmp的版本,1或者2c或者3。
-c:指定连接设备SNMP密码。
—r:指定重次次数.默认为0次
-l:指定安全级别: noAuthNoPriv|authNoPriv|authPriv。
-a:验证协议:MD5|SHA。只有-l指定为authNoPriv或authPriv时才需要。
-A∶验证字符串。只有-1指定为authNoPriv或authPriv时才需要
-x:加密协议:DES。只有-l指定为authPriv时才需要
-x:加密字符串。只有-l指定为authPriv时才需要
范例: snmpwalk 获取 SNMP代理端的信息
#如果是CentOS安装SNMP工具包
[root@zabbix-server ~]#yum -y install net-snmp-utils
#如果是Ubuntu安装下面包
[root@zabbix-server ~]#apt -y install snmp
#获取主机名
[root@zabbix-server ~]#snmpwalk -v 2c -c123456 10.0.0.8 .1.3.6.1.2.1.1.5.0
SNMPv2-MIB::sysName.0 = STRING: centos8.wang.org
#获取系统信息
[root@zabbix-server ~]#snmpwalk -v 2c -c123456 10.0.0.8 1.3.6.1.2.1.1.1
SNMPv2-MIB::sysDescr.0 = STRING: Linux centos8.wang.org 4.18.0-240.el8.x86_64 #1SMP Fri Sep 25 19:48:47 UTC 2020 x86_64
#获取内存
[root@zabbix-server ~]#snmpwalk -v 2c -c123456 10.0.0.8 .1.3.6.1.4.1.2021.4.5.0
UCD-SNMP-MIB::memTotalReal.0 = INTEGER: 1833004 kB
#取上面H3C路由的器内存信息
[root@zabbix-server ~]#snmpwalk -v2c -c public 10.1.84.1 .1 |grep -i mem
[root@zabbix-server ~]#snmpwalk -v2c -c public 10.1.84.1 .1.3.6.1.2.1.25.2.2.0
HOST-RESOURCES-MIB::hrMemorySize.0 = INTEGER:483316 KBytes
[root@zabbix-server ~]#snmpwalk -v2c -c public 10.1.84.1 hrMemorySize.0
HOST-RESOURCES-MIB::hrMemorySize.0 = INTEGER:483316 KBytes
#获取接口信息
[root@zabbix-server ~]#snmpwalk -v 2c -c123456 10.0.0.8 .1.3.6.1.2.1.2.2.1.3
IF-MIB::ifType.1 = INTEGER: softwareLoopback(24)
IF-MIB::ifType.2 = INTEGER: ethernetCsmacd(6)
#获取接口MAC
[root@zabbix-server ~]#snmpwalk -v 2c -c123456 10.0.0.8 .1.3.6.1.2.1.2.2.1.6
IF-MIB::ifPhysAddress.1 = STRING:
IF-MIB::ifPhysAddress.2 = STRING: 0:c:29:15:9b:83
#获取接口当前带宽[bps]
[root@zabbix-server ~]#snmpwalk -v 2c -c123456 10.0.0.8 .1.3.6.1.2.1.2.2.1.5
IF-MIB::ifSpeed.1 = Gauge32: 10000000
IF-MIB::ifSpeed.2 = Gauge32: 1000000000
#取IP地址
[root@zabbix-server ~]#snmpwalk -v 2c -c123456 10.0.0.8 1.3.6.1.2.1.4.20.1.1
IP-MIB::ipAdEntAddr.10.0.0.8 = IpAddress: 10.0.0.8
IP-MIB::ipAdEntAddr.127.0.0.1 = IpAddress: 127.0.0.1
[root@zabbix-server ~]#snmpwalk -v 2c -c123456 10.0.0.8 IP-MIB::ipAdEntAddr
IP-MIB::ipAdEntAddr.10.0.0.8 = IpAddress: 10.0.0.8
IP-MIB::ipAdEntAddr.127.0.0.1 = IpAddress: 127.0.0.1
注意: 团体密码是明文传输的,可以抓包查看到
创建主机
在配置中添加需要监控的SNMP代理端
删除默认的客户端类型
指定客户端类型为SNMP
指定SNMP代理端的地址和端口
关联 SNMP 模板
关联对应的SNMP模板 Template OS Linux SNMP
修改主机宏的值 {$SNMP_COMMUNITY}
或者修改继承以及主机的宏
添加完成
验证结果
过一段时间,可以看到SNMP字体变绿
在监测项验证查看主机信息
对应主机的图形
查看主机的数据