Zabbix通过SNMP监控网络说明
1. SNMP(简单网络管理协议)概述
- 定义:SNMP 是一种用于网络管理的协议,用于监控和管理网络设备。
- 版本:SNMP 有三个常用版本:SNMPv1、SNMPv2 和 SNMPv3。其中,SNMP三种版本
SNMP v1 最早的SNMP协议 不支持加密算法
SNMP V2 兼容v1版本支持更多数据类型和错误代码 常用版本
SNMP V3 增加了认证和加密功能,避免非法访问验证效率低 - 应用:SNMP 被广泛应用于各种网络管理系统(NMS),如 BMC 的 Patrol、CA 的 Unicenter、Sun Management 控制台、IBM 的 Tivoli Netview 以及全球著名的 HP Openview。NMS 的目标是提供一个监控和管理所有启用 SNMP 功能的设备的单一入口。
2. SNMP 的工作原理
- 通讯端口:
- 161 端口:用于 SNMP 消息(SNMP Message)。
- 162 端口:用于 SNMP Trap 消息(SNMP Trap Message)。
- 基本组成部分:
- 管理站(Manager):负责发送请求和接收响应。
- 被管理代理(Agent):运行在网络设备上的软件或硬件,用于收集和报告设备状态。
- 管理信息库(MIB):存储设备的管理信息,每个代理都有自己的 MIB。
3. SNMP 的数据表示方式(监控方式)
- OID(对象标识符):
- 数字表示法:例如
1.3.6.1.2.1.25.2.2.0
,用于获取内存大小。 - MIB 表示法:
- 字符串表示法:例如
hrMemorySize
,用于获取内存大小。
4. 参考资源
- OID 和 MIB 大全:可以参考 OID 和 MIB 大全 获取更多关于 OID 和 MIB 的信息。
总结
- SNMP 是一种用于网络管理的协议,通过 UDP 端口 161 和 162 进行通讯。
- Zabbix 可以通过 SNMP 监控网络设备,利用 OID 和 MIB 获取设备的状态信息。
- SNMP 的三个基本组成部分(管理站、被管理代理、管理信息库)协同工作,实现对网络设备的监控和管理。
配置snmp
#1.客户端安装snmp,snmp端口161
[root@web02 /etc/zabbix_agentd.conf.d]# yum -y install net-snmp
#2.配置
[root@web02 ~]# vim /etc/snmp/snmpd.conf
[root@web02 ~]# awk 'NR==41;NR==55;NR==117' /etc/snmp/snmpd.conf
com2sec notConfigUser default public
view systemview included .1.
group notConfigGroup v2c notConfigUser
意思分别是,41行取个组名public,55行从.1.开始表示,117开启使用v2版本
[root@web02 ~]# systemctl enable --now snmpd
[root@web02 ~]# netstat -tupln | grep 161
#3.监控端安装取值工具,net-snmp-utils
[root@zabbix ~]# yum -y install net-snmp-utils
#4.监控端取值测试。。
[root@zabbix ~]# snmpwalk -v2c -c public 172.16.1.8 SysName
SNMPv2-MIB::sysName.0 = STRING: web02
[root@zabbix ~]# snmpwalk -v2c -c public 172.16.1.8 .1.3.6.1.2.1.25.2.2.0
HOST-RESOURCES-MIB::hrMemorySize.0 = INTEGER: 454812 KBytes
#【OID 和 MIB 大全】https://www.cnblogs.com/cqx6388/p/17235747.html
- zabbix图像化配置snmp监控
zabbix自动发现服务器
- Zabbix 自动发现功能通过扫描地址段自动识别存活服务器,并自动添加主机、关联模板和报警等。但存在扫描速度慢、服务器压力大,以及所有客户端只能使用统一模板(需手动调整)的缺点。
- 可以批量发现服务器并自动添加
- 缺点:扫描速度慢,Server压力大:扫描大量IP地址时,耗时长且占用较多服务器资源,可能影响性能。模板统一化问题:所有发现的客户端使用相同模板,无法根据服务器类型(如Web、数据库)自动匹配不同模板,需手动调整。
配置:
1.配置–>自动发现–>启用–点进去
2.配置客户端,更改zabbix名称
#需要更改配置文件,名字修改一下,要不然所有主机都叫zabbixserver
#如果要是多台100台,使用ansible的j2模版ansible_hostanme变量
[root@web02 ~]# awk 'NR==172' /etc/zabbix_agentd.conf
Hostname=web02
[root@web02 ~]# systemctl restart zabbix-agent.service
3.添加动作,扫描到后干什么
动作–>左上角发现动作–>启用–点进去
- 注:如果自动添加没反应,重启客户端和服务端zabbix试试
zabbix自动注册
说明:
服务端主动问客户端要数据:服务端为主动模式、客户端主动提交数据给服务端:服务端为被动模式
客户端主动将自身信息上传给服务器用来减少服务器端的压力。
根据需求调整自动还是被动模式。
- Zabbix 服务端:默认主动模式,我主动去抓取客户端的数据(10s)。
- 被动模式:等着客户端主动将数据提交给服务器端。
适用场景:
- 当网络较复杂的情况。
- 当服务器配置一般的情况。
- 裂图了,服务器负载高了,再改。没问题就别碰
操作建议:
- 修改模板监控项为主动上报模式。
1.客户端配置为主动模式
#更改agent配置文件,指向服务端ip,更改主机名
ServerActive=172.16.1.81
Hostname=web01
2.设置自动注册
- 因为客户端上报给我数据,所以不需要自动发现,关闭自动发现
- 直接设置动作即可
- 动作–>自动注册动作–>创建动作–>主机名称包含web的(也可以在创建其他动作比如包含db的)
3.设置数据为,主动上报模式
配置–>模版–>点击要更改的模版–>全选–>批量更新–>类型改为主动式
zabbix分布式代理
Zabbix Proxy 的核心功能
- 数据中转
Proxy 代替 Server 从被监控设备的 Agent 收集数据,并批量转发给 Server,减少 Server 的直接连接数。 - 离线缓存
在网络中断时,Proxy 可暂存监控数据(需本地数据库支持),待恢复后同步至 Server,避免数据丢失。 - 分布式架构
支持跨地域、跨网络分区的监控,降低带宽消耗和延迟。 - 配置同步
Proxy 从 Server 获取监控配置(如监控项、触发器),确保策略一致性。
场景 1:多数据中心监控
- 背景
某公司在北京(总部)和上海(分部)各有一个数据中心,需监控两地共 500 台服务器。 - 问题
若所有 Agent 直连北京 Zabbix Server,会导致: - 高延迟(上海到北京的网络延迟)。
- Server 处理压力过大(500 个并发连接)。
- 单点故障风险。
- 解决方案
- 在北京和上海分别部署 Zabbix Proxy。
- 北京数据中心 300 台服务器由北京 Proxy 监控。
- 上海数据中心 200 台服务器由上海 Proxy 监控。
- 两个 Proxy 异步将数据汇总至北京 Zabbix Server。
- 优势
- Server 仅处理 2 个 Proxy 的连接,负载大幅降低。
- 上海服务器数据通过本地 Proxy 收集,减少跨地域带宽占用。
场景 2:隔离网络环境
- 背景
某企业内网分为生产网和办公网,两者通过防火墙隔离,仅允许特定端口通信。 - 问题
生产网服务器不能直接访问办公网的 Zabbix Server。 - 解决方案
- 在生产网内部署 Zabbix Proxy。
- Proxy 配置为主动模式,通过防火墙放行的端口(如 10051)主动连接办公网的 Server。
- 生产网 Agent 将数据发送至本地 Proxy,Proxy 再转发至 Server。
- 优势
- 遵守网络安全策略,无需开放过多端口。
- 生产网监控数据通过代理集中传输,便于管理。
Zabbix Proxy支持功能概述表
功能 | proxy支持(yes/no) |
---|---|
项目 (Items) | |
Zabbix agent checks | Yes |
Zabbix agent checks (active) | Yes 1 |
Simple checks | Yes |
Trapper items | Yes |
SNMP checks | Yes |
SNMP traps | Yes |
IPMI checks | Yes |
JMX checks | Yes |
日志文件监控 (Log file monitoring) | Yes |
内部检查 (Internal checks) | Yes |
SSH checks | Yes |
Telnet checks | Yes |
外部检查 (External checks) | Yes |
内置web监控 (Built-in web monitoring) | Yes |
网络发现(Network discovery) | Yes |
自动发现 (Low-level discovery) | Yes |
触发器计算 (Calculating triggers) | No |
处理事件 (Processing events) | No |
发送报警 (Sending alerts) | No |
远程命令 (Remote commands) | No |
实战配置:
代理服务器配置:
- 只是数据转发,不需要配置页面,nginx和php
- 下载 MySQL 8.0 版本
[root@web01:~]# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.36-1.e18.x86_64.rpm-bundle.tar
- 解压数据库
[root@web01:~]# tar xf mysql-8.0.36-1.e18.x86_64.rpm-bundle.tar
- 安装 MySQL 依赖包
[root@web01 ~]# rpm -ivh mysql-community-common-8.0.36*
[root@web01 ~]# rpm -ivh mysql-community-client-plugins-8.0.36*
[root@web01 ~]# rpm -ivh mysql-community-libs-8.0.36*
[root@web01 ~]# rpm -ivh mysql-community-client-8.0.36*
[root@web01 ~]# rpm -ivh mysql-community-icu-data-files*
[root@web01 ~]# rpm -ivh mysql-community-devel-8.0.36*
[root@web01 ~]# rpm -ivh mysql-community-server-8.0.36*
- 启动 MySQL 服务
[root@web01 ~]# systemctl start mysqld
- 进入数据库修改密码
- 查看随机生成的密码:
[root@webo1:~]# cat /var/log/mysqld.log | grep root@local 2024-09-23T02:33:31.213883Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: kfbi5ajupw<k
- 修改密码:
[root@webo01:~]# mysql -uroot -p'kfbi5aJupw<k' mysql> alter user root@localhost identified by 'haoshuaicong123.com';
- 创建 Zabbix 数据库和用户
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> create user 'zabbix'@'localhost' identified by 'haoshuaicong123.com';
mysql> ALTER USER 'zabbix'@'localhost' IDENTIFIED WITH mysql_native_password BY 'haoshuaicong123.com';
mysql> grant all privileges on zabbix.* to 'zabbix'@'localhost';
- 下载 Zabbix 源码并导入 Proxy 数据库
- 代理服务器就导入这一个库就可以
- 需要下载源码,或者去zabbix服务端拷贝一份
[root@web01:~]# wget https://cdn.zabbix.com/zabbix/sources/stable/5.0/zabbix-5.0.45.tar.gz
[root@web01:~]# cd zabbix-5.0.43/database/mysql/
[root@web01:mysql]# mysql -uzabbix -p'haoshuaicong123.com' zabbix < schema.sql
- 安装编译依赖
[root@web01:zabbix-5.0.43]# yum -y install libxml2 libxml2-devel net-snmp-devel curl-devel libevent-devel
- 配置 Zabbix Proxy
[root@web02 ~/zabbix-5.0.45]# cd /root/zabbix-5.0.45/
[root@web01:zabbix-5.0.43]# ./configure --prefix=/usr/ --enable-proxy --with-net-snmp --with-mysql
看一下有没有Enable proxy yes成功
- 编译并安装
[root@web01:zabbix-5.0.43]# make && make install
- 修改 Proxy 配置文件连接数据库信息
[root@web01:~]# cd /usr/etc/ [root@web01:etc]# grep DB zabbix_proxy.conf Server=10.0.0.81 Hostname=shenzhen_proxy DBName=zabbix DBUser=zabbix DBPassword=haoshuaicong123.com
- 启动 Zabbix Proxy
[root@web01!]# zabbix_proxy [root@web01!]# netstat -tnulp 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:10050 0.0.0.0:* LISTEN 1094428/zabbix_agen tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 1272514/zabbix_prox
- 修改 web02客户端指定到代理服务器
[root@web02:~]# egrep '172.16.1.7|web02' /etc/zabbix_agentd.conf Server=172.16.1.8 ServerActive=172.16.1.8 Hostname=web02 [root@web02:~]# systemctl restart zabbix-agent
- Zabbix 界面添加 Proxy 代理
- 管理–>proxy–>创建proxy
- 通过代理添加主机
- 通过代理方式添加主机
zabbix-java-gateway配置
- zabbix通过zabbix-java-gateway实现对java进行监控,java的网关
- 监控java使用mx协议
- 服务端10.0.0.81,zabbix-java-gateway:10.0.0.7,taomcat:10.0.0.8
服务端配置
#1.安装 JDK
[root@web02:~]# rpm -ivh jdk1.8-1.8.0_181-fcs.x86_64.rpm
#2.下载并解压 Tomcat
[root@web02:~]# wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.98/bin/apache-tomcat-9.0.98.tar.gz
[root@web02:~]# tar -xf apache-tomcat-9.0.95.tar.gz
[root@web02:~]# mv apache-tomcat-9.0.95 /usr/local/tomcat
#3.配置 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"
#4.启动 Tomcat
[root@web02:~]# /usr/local/tomcat/bin/startup.sh
[root@web02:~]# netstat -tnulp
tcp6 0 0 :::8080 :::* LISTEN 116117/java
tcp6 0 0 :::12345 :::* LISTEN 116117/java
#5.在 Zabbix Server(服务端81) 上配置 Java Gateway网关为51
#5.修改 Zabbix Server 配置文件
[root@zabbix ~]# egrep "JavaGateway" /usr/local/etc/zabbix_server.conf
JavaGateway=10.0.0.7 #谁是java的网关,就配置哪个服务器的ip
JavaGatewayPort=10052 #端口
StartJavaPollers=2 #启动进程数量
中间服务器java网关配置
- 虽然可以将 Java Gateway 安装在监控端或服务端,但为了性能、安全性和维护的便利性,建议将其部署在独立的中间服务器上。
在 dbo01 编译安装 Java Gateway
[root@db01:~]# yum -y install zabbix-java-gateway
[root@db01:~]# systemctl start zabbix-java-gateway.service
(如果yum安装不上,以下为编译安装教程)
#1.找到zabbix源码包,解压并cd进去,看官方Java Gateway编译安装教程
[root@web01 ~/zabbix-5.0.45]# wget https://cdn.zabbix.com/zabbix/sources/stable/5.0/zabbix-5.0.45.tar.gz
#2.安装所需依赖,java环境(jdk)和一些其他依赖
[root@web01 ~/zabbix-5.0.45]# yum -y install libxml2 libxml2-devel net-snmp-devel curl-devel libevent-devel
[root@web01 ~/zabbix-5.0.45]# rpm -ivh /root/jdk-8u181-linux-x64.rpm
#3.编译安装
[root@web01 ~/zabbix-5.0.45]# ./configure --enable-java
[root@web01 ~/zabbix-5.0.45]# make && make install
#4.启动和关闭脚本位置
[root@web01 /usr/local/sbin/zabbix_java]# ll /usr/local/sbin/zabbix_java
drwxr-xr-x 2 root root 44 Feb 2 17:49 bin
drwxr-xr-x 2 root root 176 Feb 2 17:49 lib
-rw-r--r-- 1 root root 1382 Feb 2 17:49 settings.sh
-rwxr-xr-x 1 root root 545 Feb 2 17:49 shutdown.sh
-rwxr-xr-x 1 root root 1913 Feb 2 17:49 startup.sh
[root@web01 /usr/local/sbin/zabbix_java]# /usr/local/sbin/zabbix_java/startup.sh
zabbix页面添加主机JMX协议
配置–主机–创建主机
zabbix优化
zabbix优化:
- 高并发需要对MySQL进行拆分(独立的db服务器或者db集群)
- zabbix-agent被动上传修改为主动上报模式
- 地区较多情况尽量或者网络复杂情况使用proxy代理模式
- 系统自带监控项优化
- 进程优化(如果zabbi-server繁忙,配置文件增大Pollers,前提是本机负载够用)
- 缓存优化
面试题: zabbix监控过哪些内容
- 监控主机硬件信息内存 CPU 负载 磁盘IO
- 监控系统重要的配置文件、代码文件防黑客篡改(文件自带有值)
- 监控服务是否正常(通过取端口号或者进程号)
- 监控服务,软件业务的状态信息(nginx状态信息 数据库的状态信息 增删改查 订单量 慢查询)
- 监控业务调用接口 curl状态返回
- 业务数据监控 日志监控。日志状态码 客户端IP地址