Zabbix探针工作模式解析

Zabbix探针(Agent)有两种工作模式:被动模式(Passive Check)主动模式(Active Check)。本文将会详细介绍两种工作模式的工作原理和特点。

1. 实验环境

1.1 Zabbix Server
1.2 Zabbix Agent
1.3 Wireshark
  • 版本:2.0.4

2. 被动式探针

2.1 描述

如果探针工作在被动模式下,那么Zabbix服务器会定时对探针进行轮询,以监控项关键字为请求参数,探针收到请求后查询这个监控项关键字对应的监控数据,最后返回给服务器。被动式探针的监控项配置如下图所示(只摘选关键参数):

被动式探针的监控项配置

上图中的几个关键配置参数,如下所述:

  • Name:监控项的名称,必填参数。

  • Type:监控项的类型,Zabbix提供了很多种类型的监控项。如果是由被动式探针提供监控数据,那么此处应当选择“Zabbix agent”。

  • Key:监控项的关键字,相当于监控项在Zabbix系统内部的名称,例如:system.cpu.load[percpu,avg1]。

  • Host interface:受监控服务器的IP地址(或主机名)和端口号。

  • Update interval:监控数据的更新时间间隔,以秒为单位。Zabbix服务器会按照这个时间间隔,以监控项的关键字为参数,向探针请求查询相应的监控数据。

  • Flexible intervals:这个参数可用于配置在某个时间段按照某个指定的时间间隔更新监控数据。例如,可以配置为周一至周五的09:00至18:00,按照30秒的时间间隔更新监控数据。

2.2 配置参数

若要使用被动式探针,则需要在zabbix_agentd.conf配置文件(Windows平台上的探针配置文件为zabbix_agentd.win.conf)中指定如下几个配置参数:

  • Server
    用于指定Zabbix服务器的主机名或IP地址。这个参数是一个以逗号分隔的IP地址(或主机名)列表,Zabbix探针只会接受列表中指定主机的入站连接。例如:
  1. Server=10.24.17.207,10.24.16.232,10.24.16.87
  • ListenPort
    用于指定Zabbix探针监听的端口号,默认值为10050,取值范围为1024-32767。例如:
  1. ListenPort=10050
  • ListenIP
    用于指定Zabbix探针监听的IP地址,这个参数适用于受监控主机具有多块网卡或多个IP地址的情况。这个参数是一个以逗号分隔的IP地址列表,如果探针需要从Zabbix服务器获取主动式的监控项列表,那么它会使用列表中的第一个IP地址。例如:
  1. ListenIP=10.24.16.133
  • StartAgents
    用于指定为了处理被动式监控项而预先建立的zabbix_agentd的进程实例的数量,默认值为3。如果将这个参数设置为0,那么便会禁用探针的被动模式,探针也就不会监听任何TCP端口了。例如:
  1. StartAgents=3
2.3 工作流程

被动模式的工作流程如下图所示:

被动模式的工作流程

2.4 流程分析

当安装Zabbix探针时,也会同时安装一个名为zabbix_get的实用工具,可用于模拟被动式探针和Zabbix服务器之间的网络通信流程。zabbix_get的使用方法请参考《zabbix_get和zabbix_sender工具的使用方法》。流程分析的步骤如下所述:

  • Step-1 在Zabbix探针的主机上,确保探针配置文件(路径为C:\zabbix_agents\conf\zabbix_agentd.win.conf)的相关参数设置如下:
  1. ## 探针只接受Zabbix服务器和自身的入站连接
  2. Server=10.24.17.207,10.24.16.133
  3. ## 探针监听10050端口
  4. ListenPort=10050
  5. ## 探针监听自身的IP地址
  6. ListenIP=10.24.16.133
  7. ## 开始建立3个被动式探针的进程
  8. StartAgents=3
  • Step-2 在Zabbix探针的主机上,启动Wireshark,选择上述配置文件中的监听IP所对应的网络适配器,并且将过滤器设置为tcp.port==10050,然后应用过滤器,最后启动抓包,具体步骤如下图所示:
    Wireshark抓包流程(被动式探针)

  • Step-3 在Zabbix服务器上,在bash中执行以下命令:

  1. cd /usr/local/Zabbix/bin/
  2. ./zabbix_get -s 10.24.16.133 -p 10050 -k "system.cpu.load[percpu,avg1]"
  • Step-4 在Zabbix探针的主机上,可以看到Wireshark捕获的数据包,如下图所示:
    Wireshark捕获的数据包

由捕获的数据包可知,探针和服务器之间的通信流程如下所述:

  • 数据包183~185:探针和服务器之间三次握手,建立TCP连接;

  • 数据包186:服务器向探针发送前导字符ZBXD

  • 数据包193:探针确认已经收到前导字符;

  • 数据包194:服务器向探针发送监控项关键字system.cpu.load[percpu,avg1]

  • 数据包195:探针确认已经收到监控项关键字,并向服务器捎带发送前导字符ZBXD

  • 数据包196:探针向服务器发送监控数据0.075000,并且断开连接;

  • 数据包197:服务器确认已经收到前导字符;

  • 数据包198:服务器确认已经收到监控数据,并且断开连接;

  • 数据包199:探针确认断开连接。

3. 主动式探针

3.1 描述

如果探针工作在主动模式下,那么探针会定时向Zabbix服务器请求刷新主动式监控项列表,然后会主动地定时向Zabbix服务器发送主动式监控项列表对应的监控数据。主动式探针的监控项配置如下图所示(只摘选关键参数):

主动式监控项配置

  • Name:监控项的名称,必填参数。

  • Type:监控项的类型,Zabbix提供了很多种类型的监控项。如果是由主动式探针提供监控数据,那么此处应当选择“Zabbix agent (active)”。

  • Key:监控项的关键字,相当于监控项在Zabbix系统内部的名称,例如:system.cpu.load[percpu,avg1]。

  • Update interval:监控数据的更新时间间隔,以秒为单位。当探针向Zabbix服务器请求主动式监控项列表时,也会取得这个参数。探针会根据这个时间间隔,主动向Zabbix服务器发送监控数据。

3.2 配置参数

若要使用主动式探针,则需要在zabbix_agentd.conf配置文件(Windows平台上的探针配置文件为zabbix_agentd.win.conf)中指定如下几个配置参数:

  • ServerActive
    用于指定能够接收监控数据的Zabbix服务器。这个参数是一个以逗号分隔的的“IP:端口号”(或“主机名:端口号”)配对的列表。如果不指定端口号,则使用默认端口号10051。如果不指定这个参数,则禁用探针的主动模式。例如:
  1. ServerActive=10.24.17.207:10051
  • Hostname
    用于指定受监控主机的主机名,它是唯一的、区分大小写的。这个主机名必须和Zabbix前端页面上注册的受监控主机的主机名完全相同,否则探针将不能成功刷新自己的主动式监控项列表。例如:
  1. Hostname=Windows-Agent
  • RefreshActiveChecks
    用于指定探针的主动式监控项列表的刷新时间间隔,以秒为单位。例如:
  1. RefreshActiveChecks=120
  • BufferSend
    用于指定探针的缓冲发送时间,以秒为单位。监控数据在缓冲区中的保存时间不会超过这个参数指定的时间。例如:
  1. BufferSend=5
  • BufferSize
    用于指定缓冲区的大小,也就是监控数据的最大数量。如果缓冲区满了,那么探针便会向Zabbix服务器或代理发送所有已经收集的监控数据。例如:
  1. BufferSize=100
3.2 工作流程

主动模式的工作流程如下图所示:

主动式探针工作流程

3.3 流程分析

当安装Zabbix探针时,也会同时安装一个名为zabbix_sender的实用工具,可用于模拟主动式探针和Zabbix服务器之间的网络通信流程。zabbix_sender的使用方法请参考《zabbix_get和zabbix_sender工具的使用方法》。流程分析的步骤如下所述:

  • Step-1 在Zabbix探针的主机上,确保探针配置文件(路径为C:\zabbix_agents\conf\zabbix_agentd.win.conf)的相关参数设置如下:
  1. ## 指定Zabbix服务器的IP和端口号
  2. ServerActive=10.24.17.207:10051
  3. ## 指定探针的主机名
  4. Hostname=Windows-Agent
  5. ## 刷新主动式监控项列表的时间间隔为120秒
  6. RefreshActiveChecks=120
  7. ## 监控数据在缓冲区中的存活时间为5秒
  8. BufferSend=5
  9. ## 缓冲区能够存放100条监控数据
  10. BufferSize=100
  • Step-2 在Zabbix的前端页面上,确保探针主机的主机名和配置文件中的Hostname参数相同,并且主机状态为Enabled,如下图所示:
    检查探针主机的配置

  • Step-3 在Zabbix的前端页面上,配置一个测试用的主动式监控项,各个配置参数如下图所示:
    测试用的主动式监控项配置

  • Step-4 在Zabbix探针的主机上,启动Wireshark,选择上述配置文件中的监听IP所对应的网络适配器,并且将过滤器设置为tcp.port==10051,然后应用过滤器,最后启动抓包,具体步骤如下图所示:
    Wireshark抓取数据包的步骤

  • Step-5 在Zabbix探针的主机上,在CMD命令行中执行以下命令:

  1. cd C:\zabbix_agents\bin\win64
  2. zabbix_sender -c C:\zabbix_agents\conf\zabbix_agentd.win.conf -k active.test.item -o 342.45
  • Step-6 在Zabbix的前端页面上,可以看到探针主动发送给Zabbix服务器的监控数据,如下图所示:
    测试用的主动式监控项的监控数据

  • Step-7 在Zabbix探针的主机上,可以在CMD命令行中看到zabbix_sender工具的输出信息,如下图所示:
    zabbix_sender工具的输出信息

  • Step-8 在Zabbix探针的主机上,可以看到Wireshark捕获的数据包,如下图所示:
    Wireshark捕获的数据包

由捕获的数据包可知,探针和服务器之间的通信流程如下所述:

  • 数据包77~79:探针和Zabbix服务器之间进行三次握手,建立TCP连接;

  • 数据包80:探针向Zabbix服务器发送前导字符ZBXD

  • 数据包81:Zabbix服务器确认收到探针发送的前导字符;

  • 数据包82:探针向Zabbix服务器发送json格式的监控数据,如下图所示:
    JSON格式的监控数据

  • 数据包83:Zabbix服务器确认收到探针发送的监控数据;

  • 数据包84:Zabbix服务器向探针发送前导字符ZBXD

  • 数据包85:Zabbix服务器向探针发送JSON格式的响应消息,如下图所示:
    主动式监控项的响应消息

  • 数据包86:探针确认收到Zabbix服务器发送的响应消息;

  • 数据包87:探针请求断开TCP连接;

  • 数据包88:Zabbix服务器确认断开TCP连接。

4. 总结

  • 在被动模式中,监控数据是由Zabbix服务器定时向探针轮询的。因此,Zabbix服务器的性能压力较大,而探针的性能压力较小,这是探针最常用的工作模式。

  • 在主动模式中,监控数据是由探针主动发送给Zabbix服务器的,存在更新主动式监控项列表和发送监控数据的两次网络通信。因此,Zabbix服务器的性能压力较小,而探针的性能压力较大,并且会有额外的网络开销。

  • 由实际应用可知,探针可以同时工作在被动模式和主动模式中。