监控Nginx服务
nginx配置
增加location{}
[root@wenzi ~]#vim /etc/nginx/sites-enabled/default
server_name _; #_是通配符。服务器将响应任何域名的请求
...
location /status {
stub_status;
}
...
访问 http://IP/status 即可
zabbix配置
Nginx by HTTP:无需安装zabbix agent
Template App Nginx by Zabbix agent:需要安装zabbix agent
此次使用Nginx by HTTP
方法一:修改模板级别配置
宏-模板宏;将此处默认的nginx状态页路径从 basic_status 改为 status。
和nginx配置location /status {} 匹配的路径名字相同
为方便测试,将监控项更新间隔改为10s。生产5分钟比较合适
在部署nginx的主机上链接此模板
方法二:修改主机级别配置
在部署nginx的主机上链接此模板
配置-主机-宏-继承以及主机宏; 修改宏的值,仅对该主机生效,不影响模板原内容
更新后再次点开该主机,主机宏显示配置的nginx状态页路径status
修改监控项间隔时间为10s
更新完毕后,可查看模板Nginx by HTTP,里面nginx状态页路径依旧是默认的stub_status,间隔时间仍是1m,未受影响。
监控PHP-FPM
php-fpm配置
[root@wenzi ~]#vim /etc/php/8.1/fpm/pool.d/www.conf
listen = /run/php/php8.1-fpm.sock
pm.status_path = /php_status #zabbix系统默认监控路径/status
ping.path = /ping
nginx配置
[root@wenzi ~]#vim /etc/nginx/sites-enabled/default
location ~ \.php|/php_status|/ping {
root /data/php;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
访问 http://IP/php_status 即可
zabbix配置
将部署php-fpm的主机链接PHP-FPM by Zabbix-agent 模板
修改状态页路径,由默认的status改为php_status
监控连接状态为ESTABLISHED数量
自定义监控配置文件
[root@wenzi ~]#vim /etc/zabbix/zabbix_agentd.d/tcp.conf
UserParameter=tcp_state_est,netstat -tna | awk '/ESTABLISHED$/' | wc -l
在客户端本机测试
[root@wenzi ~]#zabbix_agentd -t tcp_state_est
tcp_state_est [t|2]
重启服务
[root@wenzi ~]#systemctl restart zabbix-agent.service
在控制端zabbix server验证
[root@wenzi ~]#zabbix_get -s 192.168.28.61 -p 10050 -k "tcp_state_est"
3
在zabbix配置自定义监控项。键值必须和自定义的键名一致。
多主机监控多个状态数量
自定义监控配置文件
[root@wenzi ~]#vim /etc/zabbix/zabbix_agentd.d/tcp.conf
UserParameter=tcp_state_est,netstat -tna | awk '/ESTABLISHED$/' | wc -l
UserParameter=tcp_state_time,netstat -tna | awk '/TIME_WAIT$/' | wc -l
创建自定义模板
在自定义模板里创建自定义监控项
再将模板链接到主机即可。
查看最新数据
监控TCP11种有限状态机
准备脚本
[root@wenzi ~]#cat /etc/zabbix/zabbix_agentd.d/tcp.sh
#!/bin/bash
#********************************************************************
#FileName: /etc/zabbix/zabbix_agentd.d/tcp.sh
#Version: 1.0
#Date: 2024-03-07
#Author: wenzi
#Description: This is description
#********************************************************************
state=$1
netstat -tna | awk -v st=$state '$NF ~ st' | wc -l
准备自定义key监控配置文件
[root@wenzi ~]#cat /etc/zabbix/zabbix_agentd.d/tcp.conf
UserParameter=tcp_state[*],/etc/zabbix/zabbix_agentd.d/tcp.sh $1
[root@wenzi ~]#zabbix_agentd -t tcp_state[ESTABLISHED]
tcp_state[ESTABLISHED] [t|2]
[root@wenzi ~]#zabbix_agentd -t tcp_state[LISTEN]
tcp_state[LISTEN] [t|23]
[root@wenzi ~]#zabbix_agentd -t tcp_state[TIME_WAIT]
tcp_state[TIME_WAIT] [t|12]
配置zabbix,创建新的模板,在新模板中新增监控项,通过克隆,完成11个监控项
将模板链接到该主机
若其它主机也要监控,需要将脚本/etc/zabbix/zabbix_agentd.d/tcp.sh、自定义key/etc/zabbix/zabbix_agentd.d/tcp.conf 也复制到其它主机中,再配置Zabbix。
监控Java程序
Zabbix Java Gateway
Zabbix不支持直接监控Java应用。如果需要监控Java程序,如tomcat,需要使用Java Gateway作为代理,才能从Java应用中获取数据。
Zabbix Java Gateway通过监听 10052/tcp 端口实现监控Java应用。
Java应用需要开启JMX功能才能被监控。
Java Management Extensions,它是Java平台的一部分,用于管理和监控Java应用程序。JMX允许开发者和系统管理员创建管理接口,这些接口可以远程监控和控制Java应用程序。
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功能
在被监控主机上操作
部署jdk+tomcat过程略
新增以下内容;hostname是tomcat主机的IP
[root@wenzi ~]#vim /usr/local/tomcat/bin/catalina.sh
...
CATALINA_OPTS="$CATALINA__OPTS -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=192.168.28.61 -Dcom.sun.management.jmx remote.port=12345 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
# OS specific support. $var _must_ be set to either true or false.
...
重启tomcat
[root@wenzi ~]#systemctl restart tomcat.service
查看12345端口是否打开
[root@wenzi ~]#ss -tnl | grep 12345
LISTEN 0 50 *:12345 *:*
[root@wenzi ~]#ps aux | grep java
tomcat 2180 0.2 5.3 2448836 106152 ? Sl 16:59 0:06 /usr/local/jdk/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 -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=192.168.28.61 -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -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
二、测试通过Java工具jconsole.exe进行JMX监控
windows安装JDK,此工具位于 C:\Program Files\Java\jdk-1.8\bin 目录下
使用不安全的连接
三、部署Java Gateway
Java Gateway独立于Zabbix server 和Zabbix agent的组件,默认使用端口 10052/tcp。可单独不是在一台服务器也可以和Zabbix server 或 Zabbix agent共用一台服务器。
Zabbix Server端无需安装JDK;安装Java Gateway时会自动安装JDK。
[root@wenzi ~]#wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-4+ubuntu22.04_all.deb && dpkg -i zabbix-release_6.0-4+ubuntu22.04_all.deb && apt update && apt install zabbix-java-gateway && systemctl restart zabbix-java-gateway && systemctl enable zabbix-java-gateway
安装完首次启动会失败,手动再次启动就可以了。
[root@wenzi ~]#java -version
openjdk version "11.0.22" 2024-01-16
OpenJDK Runtime Environment (build 11.0.22+7-post-Ubuntu-0ubuntu222.04.1)
OpenJDK 64-Bit Server VM (build 11.0.22+7-post-Ubuntu-0ubuntu222.04.1, mixed mode, sharing)
[root@wenzi ~]#ps aux | grep java
zabbix 5086 3.9 2.8 2519088 56176 ? Sl 17:46 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.27.jar -Dzabbix.pidFile=/var/run/zabbix/zabbix_java_gateway.pid -Dsun.rmi.transport.tcp.responseTimeout=3000 com.zabbix.gateway.JavaGateway
四、配置Zabbix Server支持Java Gateway
默认情况下关于Java的监控项不支持。
修改zabbix-server配置
[root@wenzi ~]#vim /etc/zabbix/zabbix_server.conf
JavaGateway=192.168.28.61 #指向java Gateway所在主机IP
StartJavaPollers=1 #开启的进程数,必须修改此行,不能为默认的0
JavaGatewayPort=10052 #指定端口,默认值,可不改
[root@wenzi ~]#systemctl restart zabbix-server.service
[root@wenzi ~]#ps auxf | grep zabbix | grep java
zabbix 9444 0.0 0.4 141864 9596 ? S 21:03 0:00 \_ /usr/sbin/zabbix_server: java poller #1 [got 0 values in 0.000032 sec, idle 5 sec]
通过JMX接口监控Java服务器
监控网络设备
SNMP
Simple Network Management Protocol 简单网络管理协议,属于TCP/IP五层协议中的应用层协议,用于网络管理的协议,SNMP主要用于网络设备的管理。
工作原理
SNMP网络设备分为NMS和Agent。
NMS(Network Management Station,网络管理站)是SNMP网络的管理者,NMS是运行SNMP客户
端管理程序的工作站,能够提供友好的人机交互界面,方便网络管理员完成绝大多数的网络管理工
作。
Agent是SNMP网络的被管理者。Agent是驻留在设备上的一个进程,负责接收、处理来自NMS的
请求报文。在一些紧急情况下,如接口状态发生改变等,Agent也会主动通知NMS。
NMS和Agent之间通过SNMP协议来交互管理信息。
SNMP管理进程与代理进程之前为了交互信息,定义了五种报文:
get-request操作:这个操作是由管理进程发起,向代理进程处请求提取一个或多个参数值。
get-next-request操作:这个操作是由管理进程发起,向从代理进程处提取一个或多个参数的下一个参数
值。
get-response操作:这个操作是由代理进程发出的,向管理进程返回的一个或多个参数值。
set-request操作:这个操作是由管理进程发起,对代理进程设置一个或多个参数值。
trap操作:这个操作是由代理进程主动发出的报文,通知管理进程有某些事情发生。
MIB
是一个在网络管理中使用的数据结构,它定义了网络设备(如路由器、交换机、服务器等)上可以被监控和管理的信息。MIB通常以树状结构组织,每个节点代表一个特定的管理对象,例如设备的某个属性或统计信息。
OID
是一种用于在网络中唯一标识管理信息的数字标识符,通常用于MIB中,以唯一地标识网络设备上的特定信息,如设备的状态、性能数据、配置参数等
查询网站:http://www.oid-info.com/index.htm
在知道部分OID情况下,可以方便进行节点具体信息的查看。但数量太多,搜索效率低下,建议直接从设备商处获取MIB库。
如:
系统信息
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
在agent安装SNMP协议并配置
[root@wenzi ~]$yum -y install net-snmp
[root@wenzi ~]$snmpd -v
修改配置
[root@wenzi ~]$vim /etc/snmp/snmpd.conf
com2sec notConfigUser default 123456 #设置团体密码为123456,默认是public
...
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无法获取数据
重启服务,查看端口,161/udp
[root@wenzi ~]$systemctl enable --now snmpd
[root@wenzi ~]$ss -tunpl | grep snmp
udp UNCONN 0 0 *:161 *:* users:(("snmpd",pid=2300,fd=6))
tcp LISTEN 0 128 127.0.0.1:199 *:* users:(("snmpd",pid=2300,fd=7))
配置zabbix
修改继承宏,修改团体密码为Zabbix Server中配置的123456