目录
1.1.1 abbix-Agent主动向Zabbix-Server发送请求的工作流程
1.1.2 Zabbix-Agent发送数据给Zabbix-Server的工作流程
我在《centos8搭建zabbix5.0》只搭建默认使用是agent被动模式,但实际工作中使用主动模式比较多。
所以本篇讲一下zabbix agent的主动模式搭建
一、agent的主动和被动模式介绍
Zabbix-Agent的工作模式可以分为主动模式(Active)和被动模式(Passive)
主动模式:agent-->server(push推送)
被动模式:agent<--server(pull拉取)
PS:server接收agent推过来的监控数据,所以我push(推送),server从agent把监控数据拉过来,所以叫pull(拉取)。
1.1 主动模式
主动模式是指Zabbix-Agent将采集到的数据主动推送给Zabbix-Server,其行为是Zabbix-Agent向Zabbix-Server主动发起的数据连接过程,Zabbix-Server不必等待Zabbix-Agent的数据采集行为,Zabbix-Agent能够一次批量发送多条数据给Zabbix-Server,属于一对多的响应模式,对Zabbix-Server的性能开销较少,适合大规模环境使用。
1.1.1 abbix-Agent主动向Zabbix-Server发送请求的工作流程
在主动模式中,Zabbix-Agent在启动时就会向Zabbix-Server发送请求,以获取需要主动监控的监控项。这部分的运行流程总结如下:
(1)Zabbix-Agent向Zabbix-Server建立一个TCP连接。
(2)Zabbix-Agent请求需要检测的数据列表。
(3)Zabbix-Server响应Zabbix-Agent,发送一个Item列表(Item key、Delay)。
(4)Zabbix-Agent响应请求。
(5)完成本次会话后关闭TCP连接。
(6)Zabbix-Agent开始周期性地采集数据。
1.1.2 Zabbix-Agent发送数据给Zabbix-Server的工作流程
当Zabbix-Agent将监控项数据采集完成之后,会将数据发送给Zabbix-Server。这部分的运行流程总结如下:
(1)Zabbix-Agent向Zabbix-Server建立一个TCP连接。
(2)Zabbix-Agent将数据发送给Zabbix-Server,其发送周期等于Item的更新周期。
(3)Zabbix-Server处理Zabbix-Agent发送的数据。
(4)关闭TCP连接。
1.2 被动模式
被动模式是指Zabbix-Server向Zabbix-Agent请求数据,Zabbix-Agent被动接受数据请求后进行回应,属于一对一的响应模式。比如有100个监控项,Zabbix-Server需要向Zabbix-Agent请求100次,同时,Zabbix-Agent在响应Zabbix-Server时,对监控项数据采集也需要消耗时间,此时,Zabbix-Server只能耗着时间安静地等待Zabbix-Agent。相对于主动模式的高效,被动模式从时间开销和发送数据量上都处于劣势,对Zabbix-Server的性能开销较大,适合小规模环境使用。
1.3 共存问题
主动模式和被动模式在同一个Zabbix-Agent上,是可以共存的,比如让一部分监控项处于被动模式,另一部分处于主动模式。处于主动模式的监控项,由Zabbix-Agent周期性地采集数据传输给Zabbix-Server;处于被动模式的监控项,则由Zabbix-Server周期性地从Zabbix-Agent获取数据。
二、配置说明
在Zabbix-Agent的配置文件中,有3个参数和工作模式有紧密关系,分别是Server、ServerActive和Hostname,如下所示
#被动模式连接的Zabbix-Server的IP地址
Server=127.0.0.1,192.168.3.82
#主动模式连接的Zabbix-Server的IP地址,开启此项参数,
#将会自动打开主动模式;将其注释掉,则会关闭主动模式
ServerActive=127.0.0.1,192.168.3.82
#在主动模式中,Hostname 作为Zabbix-Server处理数据的唯一依据,要求Hostname在Zabbix-Server
#中具有唯一一性。当有多个Zabbix-Agent的主机名配置相同时,会造成该主机名下的主动模式监控项
#数据存储错乱,因为在不同的时间周期内,其存储的是不同Zabbix-Agent的数据
#客户端的hostname,不配置默认使用系统主机名,使用IP做主机名也可以
Hostname=vm821
#Agent 的进程个数,用于被动模式,如果大于0,则会监听10050端口。如果只需要主动模式,
#则可以将其设置为0,将被动模式关闭
StartAgents=3
上面解释如下:
Server:被动模式,允许目标Zabbix-Server服务器连接Zabbix-Agent,此处允许本机127.0.0.1和192.168.3.82访问10050端口,多个IP地址之间用逗号分隔。
ServerActive:主动模式,向目标Zabbix-Server服务器传送数据。需要确保zabbix_agentd.conf配置的主机名(Hostname)和Zabbix-Web管理界面中的主机名保持一致。当Zabbix-Agent配置的主机名和Zabbix-Web配置的主机名不同时,Zabbix-Server和Zabbix-Agent日志均会报错
三、例子
我在《centos8搭建zabbix5.0》中,如下表所示:
主机名 | IP地址(外网) | IP地址(内网) | 描述 |
vm82 | ens32:192.168.128.82 | ens33:192.168.3.82 |
|
vm821 | ens32:192.168.128.21 | ens33:192.168.3.21 |
|
vm822 | ens32:192.168.128.22 | ens33:192.168.3.21 |
|
备注: |
|
我只安装了zabbix服务端和配置了一个agent,主机为vm821,是被动模式,本篇将另一个agent,主机为vm822安装为主动模式
3.1 agent安装及配置主动模式
在操作之前先确保添加了主机名 cat /etc/host ,如果添加了,先不要重复添加,如果没添加请执行如下命令:
#在vm821和vm822加入hosts绑定主机名
echo '192.168.3.82 vm82'>>/etc/hosts
echo '192.168.3.21 vm821'>>/etc/hosts
echo '192.168.3.22 vm822'>>/etc/hosts
3.1.1 agent安装
#安装依赖
dnf install -y unixODBC
#安装zabbix源
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/8/x86_64/zabbix-release-5.0-1.el8.noarch.rpm
#安装agnet客户端及sender 小工具
dnf install -y zabbix-agent zabbix-sender
PS:如果发现用dnf安装太慢,也可以使用国内的zabbix源,如阿里云镜像、华为云镜像等,我这里使用华为云
#建立相关目录 mkdir -pv /disk1/tools cd /disk1/tools/ #下载对应的包 wget https://mirrors.huaweicloud.com/zabbix/zabbix/5.0/rhel/8/x86_64/zabbix-agent-5.0.2-1.el8.x86_64.rpm wget https://mirrors.huaweicloud.com/zabbix/zabbix/5.0/rhel/8/x86_64/zabbix-sender-5.0.2-1.el8.x86_64.rpm #通过dnf方式安装rpm包,一定要记得先安装zabbix yum源,否则如果有依赖则无法自动添加 dnf install zabbix-*.rpm
3.1.2 配置agent为主动模式
修改zabbix配置文件zabbix_agentd.conf,相关操作命令如下:我把被动模式去掉,使用主动模式
#建立相关目录
mkdir -pv /disk1/logs/zabbix
chown zabbix.zabbix -R /disk1/logs/zabbix
#修改配置文件
cd /etc/zabbix/
cp zabbix_agentd.conf zabbix_agentd.conf.orig
#没修改前效果
egrep '^Server|^LogFile=|^ServerActive|^Hostname|StartAgents=' zabbix_agentd.conf
#修改日志路径
sed -i 's#/var/log#/disk1/logs#' zabbix_agentd.conf
#主动模式指向server ip地址
sed -i '/^ServerActive/s/127.0.0.1/192.168.3.82/' zabbix_agentd.conf
#修改Hostname为agent本机的hostname
sed -i "/^Hostname/s/Zabbix server/`hostname`/" zabbix_agentd.conf
#把 “# StartAgents=3” 的注解去掉
sed -i "/StartAgents=/s/# //" zabbix_agentd.conf
#修改后效果
egrep '^Server|^LogFile=|^ServerActive|^Hostname|StartAgents=' zabbix_agentd.conf
实现修改效果如下:
LogFile=/disk1/logs/zabbix/zabbix_agentd.log
#没有配置被动模式,被动模式不能注解掉!
Server=127.0.0.1
#开房3个agent进程
StartAgents=3
#主动模式指向服务器IP地址
ServerActive=192.168.3.82
Hostname=vm822
#服务agent服务
#启动服务
systemctl start zabbix-agent
systemctl status zabbix-agent
#开机运行
systemctl enable zabbix-agent
查看一下agent开启的进程数
[root@vm822 zabbix]# ps -ef|grep agentd|grep listener
zabbix 2646 2644 0 19:03 ? 00:00:00 /usr/sbin/zabbix_agentd: listener #1 [waiting for connection]
zabbix 2647 2644 0 19:03 ? 00:00:00 /usr/sbin/zabbix_agentd: listener #2 [waiting for connection]
zabbix 2648 2644 0 19:03 ? 00:00:00 /usr/sbin/zabbix_agentd: listener #3 [waiting for connection]
运行了,在服务器端用zabbix_get测试一下,如下:
#因为被动模式 Server=127.0.0.1 没有指向 服务器IP地址,所以执行报错,属于正常
#如果要测试可以把把指向服务端,我这里不就修改IP地址了
[root@vm82 ~]# zabbix_get -s 192.168.3.22 -k system.hostname
zabbix_get [5539]: Check access restrictions in Zabbix agent configuration
PS:因为我配置了主动模式所以不使用使用上面的zabbix_get 。可以在agent端使用 zabbix_sender 向服务端推送数据,配置Item的类型为Trapper。
3.2 添加zabbix监控
通过zabbix web这个agent也添加到zabbix监控中,操作如下:
下面这些配置是什么意思,我就不讲了,我在搭建环境的时候 已经讲过了,这里值得注意的就是,Host name名字要和agent上的机子的hostname值一样