day54-Zabbix(第三部分)

1.每日复盘与今日内容

1.1复盘

  • 联合警告、发送邮箱警告、企业微信警告
  • 自定义图形、自定义模板
  • PPT演示

1.2今日内容

  • 监控PHP状态信息
  • 使用脚本自定义监控
  • SNMP监控
  • 自动监控
  • proxy代理监控
  • 监控java程序(jmx)
  • 优化项目
  • 面试题🍟🍟🍟🍟🍟

2.监控PHP状态信息

复制代码
#1.修改php配置文件
root@WEB01 /etc/nginx/conf.d# sed -n '240p' /etc/php-fpm.d/www.conf
pm.status_path = /status

#2.验证重启
root@WEB01 /etc/nginx/conf.d# php-fpm -t
[24-Sep-2025 16:18:45] NOTICE: configuration file /etc/php-fpm.conf test is successful

root@WEB01 /etc/nginx/conf.d# systemctl restart php-fpm.service 

#3.配置nginx
root@WEB01 /etc/nginx/conf.d# vim wp.conf
server {
       listen 80;
       server_name www.wp.com;
       root /code/wp;

       location / {
                index index.php  index.html;
       }

       location /nginx_status {
        stub_status;
        }

        location /status {
                         fastcgi_pass 127.0.0.1:9000;
                         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                         include fastcgi_params;
            }

        location ~ \.php$ {
                          fastcgi_pass 127.0.0.1:9000;
                          fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                          include fastcgi_params;
#fastcgi_param HTTPS on;
}
}

#4.测试取值
root@WEB01 /etc/nginx/conf.d# curl 127.0.0.1/status
pool:                 www
process manager:      dynamic
start time:           24/Sep/2025:16:18:57 +0800
start since:          336
accepted conn:        1
listen queue:         0
max listen queue:     0
listen queue len:     128
idle processes:       4
active processes:     1
total processes:      5
max active processes: 1
max children reached: 0
slow requests:        0

#详细说明
pool:                 www					      # pool的名称
process manager:      dynamic					  # 进程管理方式,现今大多都为dynamic,不要使用static
start time:           11/Nov/2021:10:11:53 +0800  # php-fpm上次启动的时间
start since:          282					 	  # php-fpm已运行了多少秒
accepted conn:        2							  # pool接收到的请求数
listen queue:         0							  # 处于等待状态中的连接数,如果不为0,需要增加php-fpm进程数
max listen queue:     0							  # 从php-fpm启动到现在处于等待连接的最大数量
listen queue len:     128						  # 处于等待连接队列的套接字大小
idle processes:       4							  # 处于空闲状态的进程数
active processes:     1							  # 处于活动状态的进程数	
total processes:      5							  # 进程总数	
max active processes: 1							  # 从php-fpm启动到现在最多有几个进程处于活动状态
max children reached: 0	# 当pm试图启动更多的children进程时,却达到了进程数的限制,达到一次记录一次,如果不为0,需要增加php-fpm pool进程的最大数
slow requests:        0 # 当启用了php-fpm slow-log功能时,如果出现php-fpm慢请求这个计数器会增加,一般不当的Mysql查询会触发这个值

#5.加入键值
root@WEB01 /etc/zabbix_agentd.conf.d# vim php.conf
UserParameter=php_idle,curl -s 127.0.0.1/status|awk '/^idle/{print $NF}'
UserParameter=php_ac,curl -s 127.0.0.1/status|awk '/^active/{print $NF}'
UserParameter=php_max,curl -s 127.0.0.1/status|awk 'NR==12{print $NF}'
UserParameter=php_chil,curl -s 127.0.0.1/status|awk 'NR==13{print $NF}'

#6.测试
root@zabbix ~# zabbix_get -s 172.16.1.7 -k php_idle
4

#7.创建模板

接着按照昨天nginx的操作逐一配置触发器和图形

将模板关联到web01

查看

3.使用脚本方式自定义监控项

复制代码
#1.使用脚本传参
root@WEB01 /etc/zabbix_agentd.conf.d# vim nginx.sh
#!/bin/sh
case $1 in
         active)
         curl -s 127.0.0.1/nginx_status|awk 'NR==1{print $NF}'
         ;;
         accepts)
         curl -s 127.0.0.1/nginx_status|awk 'NR==3{print $1}'
         ;;
         handled)
         curl -s 127.0.0.1/nginx_status|awk 'NR==3{print $2}'
         ;;
         requests)
         curl -s 127.0.0.1/nginx_status|awk 'NR==3{print $3}'
         ;;
         *)
         echo "Usage: $0 [active|accepts|handled|requests]"
esac

#2.给脚本执行权限
root@WEB01 /etc/zabbix_agentd.conf.d# chmod +x nginx.sh

#3.修改自定义key配置文件
root@WEB01 /etc/zabbix_agentd.conf.d# cat nginx.conf 
UserParameter=nginx.[*],/etc/zabbix_agentd.conf.d/nginx.sh $1

#4.重启
root@WEB01 /etc/zabbix_agentd.conf.d# systemctl restart zabbix-agent.service

#5.zabbix服务端获取之前的key发现失效
root@zabbix ~# zabbix_get -s 172.16.1.7 -k nginx_ac
ZBX_NOTSUPPORTED: Unsupported item key.

#6.依据之前写的格式获取
root@zabbix ~# zabbix_get -s 172.16.1.7 -k nginx.[active]
1

#7.修改键值

重新查看nginx状态

发现又有数据了

4..zabbix通过SNMP监控网络设备

SNMP

  • 定义:

简单网络管理协议(SNMP-Simple Network Management Protocol)

复制代码
SNMP的经常使用版本有三个:SNMPv1、SNMPv2、SNMPv3(SNMPv3是具备安全性的通讯协议)
SNMP被普遍应用在NMS网络管理系统中(NetworkManagement System)。知名的NMS包括BMC的Patrol、CA的Unicenter、Sun Mangegement控制台、IBM的Tivoli Netview、以及全球著名的HPOpenview。 
NMS的目标是提供一个监控和管理全部开启
SNMP功能的设备的单一入口。
SNMP协议经过UDP端口161和162进行通讯。
161端口:SNMP Message
162端口:SNMP Trap Meaasge
SNMP管理模型中有三个基本组成部分:管理站(Manager),被管代理(Agent)和管理信息库(MIB)。
被管代理(Agent)指的是用于跟踪监测被管理设备状态的特殊软件或硬件,每个代理都拥有自己本地的MIB。被管代理(Agent)翻译来自管理站(Manager)的请求,验证操作的可执行性,通过直接与相应的功能实体(如网络设备)通信来执行信息处理任务,同时向管理站返回响应信息。

SNMP三种版本
SNMP v1 最早的SNMP协议 不支持加密算法
网络设备硬件信息表示方式两种:
OID表述方法 数字表示 .1.3.6.1.2.1.25.2.2.0 # 获取内存大小
MIB表示方法 字符串表示 hrMemorySize # 获取内存大小
OID和MIB大全
https://www.cnblogs.com/cqx6388/p/17235747.html
复制代码
#1.客户端按照snmp模拟交换机
root@WEB01 /etc/zabbix_agentd.conf.d# yum -y install net-snmp-utils

#2.修改配置
root@WEB01 /etc/zabbix_agentd.conf.d# sed -n '41p;55p;117p' /etc/snmp/snmpd.conf
com2sec notConfigUser  default       public   # 团体名称(类似密码)
view    systemview    included   .1.
group   notConfigGroup  v2c             notConfigUser

#3.启动,端口161
root@WEB01 /etc/zabbix_agentd.conf.d# systemctl start snmpd
root@WEB01 /etc/zabbix_agentd.conf.d# netstat -lntup      
udp        0      0 0.0.0.0:161             0.0.0.0:*                           76650/snmpd         

服务端安装snmp命令
测试通过后,页面使用snmp协议监控
-v 指定SNMP版本
2c 指定SNMP版本为V2
-c 指定团体名称


#4.服务端也下载
root@zabbix ~# yum -y install net-snmp-utils

#5.获取主机名 内存
root@zabbix ~# snmpwalk -v2c -c public 10.0.0.7 SysName
SNMPv2-MIB::sysName.0 = STRING: WEB01

root@zabbix ~# snmpwalk -v2c -c public 10.0.0.7 .1.3.6.1.2.1.25.2.2.0
HOST-RESOURCES-MIB::hrMemorySize.0 = INTEGER: 2003096 KBytes

#6.创建交换机

寻找模板

5.zabbix自动化监控

1.zabbix自动发现

zabbix服务端通过扫描地址段的方式自动发现存活的服务 器

发现服务器后进行动作处理 添加主机 关联模板 关联报警等

缺点1: 扫描速度慢 server压力较大

缺点2: 所有扫描到的客户端只能使用统一模板 比如web和数据库使用模板是不同的 还需要手动进行配置

第一步:删除web01和web02主机

第二步配置自动发现

第三步配置动作

启用动作

自动扫描并添加成功

这里时间不一样代表被动模式

修改配置为主动模式

复制代码
[root@web01 ~]# vim  /etc/zabbix/zabbix_agentd.conf
ServerActive=172.16.1.71 # 主动注册服务器地址
Hostname=web01 # 必须设置为主机名称

[root@web01 ~]# systemctl restart zabbix-agent

时间相近代表主动模式

2.主动上报

复制代码
客户端主动将自身信息上传给服务端用来减少服务端的压力
根据需求调整自动还是被动模式
zabbix服务端: 默认主动模式 我主动去抓取客户端的数据 10s
• 被动模式 等着客户端主动将数据提交给服务端
• 例如: 当服务器超过300-500+台以上
1.修改客户端的模式为主动模式
2.配置自动注册
注意: 先删除自动发现功能防止冲突
• 当网络较复杂的情况
• 当服务器配置一般的情况
修改模版监控项为主动上报模式

修改配置为主动模式

复制代码
[root@web01 ~]# vim  /etc/zabbix/zabbix_agentd.conf
ServerActive=172.16.1.71 # 主动注册服务器地址
Hostname=web01 # 必须设置为主机名称

[root@web01 ~]# systemctl restart zabbix-agent

自动关联成功(实际可以区分,web组关联与linux相关的,数据库组关联与db相关的)

6.zabbix proxy代理

1.部署zabbix_proxy代理

通过网盘分享的文件:mysql-8.0.36-1.el8.x86_64.rpm-bundle.tar

链接: https://pan.baidu.com/s/1mkORd1EZLPo6vlJYxqp6eA?pwd=1234 提取码: 1234

--来自百度网盘超级会员v5的分享

原压缩包放入Xshell会有问题,可以将压缩包在windows解压,再将解压文件一起放入Xshell中

复制代码
#1.上传文件

#2.rpm安装
root@WEB01 ~# cat 1.txt
rpm -ivh mysql-community-common-8.0.36-1.el8.x86_64.rpm
rpm -ivh mysql-community-client-plugins-8.0.36-1.el8.x86_64.rpm
rpm -ivh mysql-community-libs-8.0.36-1.el8.x86_64.rpm
rpm -ivh mysql-community-client-8.0.36-1.el8.x86_64.rpm
rpm -ivh mysql-community-icu-data-files-8.0.36-1.el8.x86_64.rpm
rpm -ivh mysql-community-devel-8.0.36-1.el8.x86_64.rpm
rpm -ivh mysql-community-server-8.0.36-1.el8.x86_64.rpm

root@WEB01 ~# cat 1.txt | bash

#3.开启数据库
root@WEB01 ~# systemctl start mysqld.service 

#4.查看数据库密码
root@WEB01 ~# cat /var/log/mysqld.log |grep root@local
2025-09-25T03:29:46.718419Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: LkGe>tm)x3jk

#5.进入数据库修改密码
root@WEB01 ~# mysql -uroot -p'LkGe>tm)x3jk'
mysql> alter user root@localhost identified by 'Oldboy123.com';

#6.创建zabbix库
mysql> alter user root@localhost identified by 'Oldboy123.com';
Query OK, 0 rows affected (0.01 sec)

mysql> create database zabbix character set utf8 collate utf8_bin;
Query OK, 1 row affected, 2 warnings (0.02 sec)

mysql> create user 'zabbix'@'localhost' identified by 'Oldboy123.com';
Query OK, 0 rows affected (0.01 sec)

mysql> ALTER USER 'zabbix'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Oldboy123.com';
Query OK, 0 rows affected (0.00 sec)

mysql> grant all privileges on zabbix.* to 'zabbix'@'localhost';
Query OK, 0 rows affected (0.00 sec)

#7.下载zabbix源码 导入proxy库
root@WEB01 ~/zabbix-5.0.43/database/mysql# #mysql -uzabbix -pOldboy123.com zabbix < schema.sql

#8.安装编译依赖
root@WEB01 ~# yum -y install libxml2 libxml2-devel net-snmp-devel curl-devel libevent-devel
[root@web01:zabbix-5.0.43]#./configure --prefix=/usr/ --enable-proxy --with-net-snmp --with-mysql
#编译并安装
[root@web01:zabbix-5.0.43]#make && make install

#9.修改proxy配置文件连接数据库信息
root@WEB01 /usr/etc# egrep "10.0.0.91|sh_proxy|DBName|DBUser|DBPassword" /usr/etc/zabbix_proxy.conf
Hostname=sh_proxy
### Option: DBName
#	For SQLite3 path to database file must be provided. DBUser and DBPassword are ignored.
# DBName=
DBName=zabbix
### Option: DBUser
# DBUser=
DBUser=zabbix
### Option: DBPassword
DBPassword=Oldboy123.com

2.修改web02指定到代理服务器web01

复制代码
root@WEB02 ~# egrep '172.16.1.7|WEB02' /etc/zabbix_agentd.conf
Server=172.16.1.7
ServerActive=172.16.1.7
Hostname=WEB02

root@WEB02 ~# systemctl restart zabbix-agent.service

创建proxy(名称必须和设置里一致)

创建由proxy代理的WEB02

启动成功

7.监控java程序

zabbix通过zabbix-java-gateway实现对java进行监控

监控java使用jmx协议

服务端: 10.0.0.91

zabbix-java-gateway: 10.0.0.7

tomcat: 10.0.0.8

通过网盘分享的文件:apache-tomcat-9.0.80.tar.gz

链接: https://pan.baidu.com/s/1a-v7XjikeLuqBRfSnORyiQ?pwd=1234 提取码: 1234

--来自百度网盘超级会员v5的分享

过网盘分享的文件:jdk-8u181-linux-x64.rpm

链接: https://pan.baidu.com/s/1MsDn8DW-UGB_URmX3Hg4dQ?pwd=1234 提取码: 1234

--来自百度网盘超级会员v5的分享

1.WEB02部署Tomcat

复制代码
#1.上传jdk

#2.上传tomcat

#3.安装jdk
root@WEB02 ~# rpm -ivh jdk-8u181-linux-x64.rpm

#4.解压tomcat
root@WEB02 ~# tar xf apache-tomcat-9.0.80.tar.gz
root@WEB02 ~# mv apache-tomcat-9.0.80 /usr/local/tomcat

#5.配置tomcat开启jmx协议
root@WEB02 ~# head -10 /usr/local/tomcat/bin/catalina.sh
#!/bin/sh
CATALINA_OPTS="$CATALINA_OPTS \
        -Dcom.sun.management.jmxremote \
        -Djava.rmi.server.hostname=10.0.0.8 \
        -Dcom.sun.management.jmxremote.port=12345 \
        -Dcom.sun.management.jmxremote.ssl=false \
        -Dcom.sun.management.jmxremote.authenticate=false"

#6.启动tomcat
root@WEB02 ~# /usr/local/tomcat/bin/startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:            -Dcom.sun.management.jmxremote         -Djava.rmi.server.hostname=10.0.0.8         -Dcom.sun.management.jmxremote.port=12345         -Dcom.sun.management.jmxremote.ssl=false         -Dcom.sun.management.jmxremote.authenticate=false
Tomcat started.
root@WEB02 ~# netstat -lntup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      59306/nginx: master 
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1077/sshd: /usr/sbi 
tcp        0      0 0.0.0.0:10050           0.0.0.0:*               LISTEN      67317/zabbix_agentd 
tcp6       0      0 :::38187                :::*                    LISTEN      67992/java          
tcp6       0      0 :::8080                 :::*                    LISTEN      67992/java          
tcp6       0      0 :::22                   :::*                    LISTEN      1077/sshd: /usr/sbi 
tcp6       0      0 :::12345                :::*                    LISTEN      67992/java          
tcp6       0      0 :::43135                :::*                    LISTEN      67992/java          
tcp6       0      0 :::10050                :::*                    LISTEN      67317/zabbix_agentd 
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      67992/java          
udp        0      0 127.0.0.1:323           0.0.0.0:*                           4312/chronyd        
udp6       0      0 ::1:323                 :::*                                4312/chronyd        

2.服务端配置java网关

复制代码
root@zabbix ~# egrep "^Java|StartJava" /usr/local/etc/zabbix_server.conf
JavaGateway=10.0.0.7
JavaGatewayPort=10052
### Option: StartJavaPollers
 StartJavaPollers=2

3.在web01上安装java getway

复制代码
#如果web01则卸载yum -y remove zabbix50-agent-5.0.42
root@WEB01 ~# rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-latest-5.0.el7.noarch.rpm
root@WEB01 ~# yum -y install zabbix-java-gateway

4.页面监控tomcat程序

8.zabbix优化

1.高并发需要对MySQL进行拆分 (因为zabbix对数据库使用率很大)

2.zabbix-agent被动上传修改为主动上报模式

3.地区较多情况 或者网络复杂情况使用proxy代理模式

4.系统自带监控项优化

5.进程优化

6.缓存优化

面试题:zabbix监控过哪些内容 🍟🍟🍟🍟🍟

1.监控主机硬件信息内存 CPU 负载 磁盘IO

2.监控系统重要的配置文件、代码文件防黑客篡改

3.监控服务是否正常(通过取端口号或者进程号)

4.监控服务,软件业务的状态信息(nginx状态信息 数据库的状态信息 增删改查 订单量慢查询)

5.监控业务调用接口 curl状态返回

6.业务数据监控 日志监控。日志状态码 客户端IP地址

通过自定义啥都可以监控,想监控什么都行。

主动和被动模式

zabbix压力大如何解决?

zabbix如何优化?

用过zabbix的低级自动发现吗? 监听多实例

9.今日总结

  • 监控PHP状态信息
  • 使用脚本自定义监控
  • SNMP监控
  • 自动监控
  • proxy代理监控
  • 监控java程序(jmx)
  • 优化项目
  • 面试题🍟🍟🍟🍟🍟
相关推荐
数据知道2 小时前
Go基础:用Go语言操作MongoDB详解
服务器·开发语言·数据库·后端·mongodb·golang·go语言
-dcr3 小时前
22.Nginx 服务器 LNMP项目
运维·服务器·nginx·php·lnmp
---学无止境---3 小时前
linux中ioctl的工作流程以及ethtool是如何获取网络设备信息的
linux
LabVIEW开发3 小时前
LabVIEW利用DataSocket读取OPC 服务器数据
服务器·labview·labview知识·labview功能·labview程序
。TAT。3 小时前
Linux - 进程状态
linux·学习
東雪蓮☆3 小时前
Docker 搭建 Nginx 并启用 HTTPS 具体部署流程
运维·nginx·docker
无敌最俊朗@4 小时前
如何把qt + opencv的库按需要拷贝到开发板
linux·qt
漫谈网络4 小时前
KVM创建的虚拟机,虚拟机的网卡是如何生成的
运维·服务器·网络·qemu·虚拟化·kvm
mjhcsp5 小时前
深入解析 IDM 插件开发挑战赛:技术要点与实践指南
服务器·阿里云·云计算