本文分享一个Zabbix Agent在NAT网络环境下进行监控的技巧。
Zabbix Agent检查有两种模式,分为主动(Agent Active)和被动(Agent)两种形式。主动与被动的说法均是相对于Agent来讨论的。
主动检查:Agent请求Server获取主动的监控项列表,并主动将监控项内需要检测的数据提交给Server/Proxy
被动检查:Server向Agent请求获取监控项的数据,Agent返回数据。
$ cat zabbix_Agentd.conf
Server=X.X.X.X #如果设置为纯被动模式,则应该注释掉这一条指令
ServerActive=X.X.X.X #主动模式的server IP地址
Hostname=Mike-Linux #在Web UI上声明主机时所使用相同的主机名(区分大小写),不配置则使用主机名。
StartAgents=0 #客户端Agent模式,设置为0表示关闭被动模式。被监控端的zabbix_agentd不监听本地端口,netstat无法查看到zabbix_agentd监听的端口。
替换X.X.X.X为你Zabbix server的IP。
纯主动模式下的Zabbix Agent,只能支持Zabbix Agent(Active)类型的监控项。
我们将克隆“Template OS Linux”并创建一个将使用主动检查而不是被动模式的“Template OS Linux Active”。
点击“Configuration”
点击“Templates”
点击“Template OS Linux”
点击“Full Clone” (bottom)
修改名称为“Template OS Linux Active”
点击“Add” (bottom)
点击“Template OS Linux Active”模板
点击“Items”
勾选左上角选择所有项目
向下滚动到,选择“批量更新”。
勾选“Type”
把值从“Zabbix agent”改为“Zabbix agent (active)”
向下滚动到,选择“update”。
点击”Discovery”,按以上类似方法更新”Discovery”规则的监控项。
一般情况下模板间是有一些关联的,比如“Template OS Linux”模板就关联了”Template App Zabbix Agent” ,这种情况通常有两种方法处理:
使用以上同样的方法修改关联的监控项为“Zabbix agent (active)”。
暂停关联的监控项。
主机名必须和zabbix_Agentd.conf配置文件中定义的一样(这里是:Mike-Linux)。
Agent interfaces中IP配置为0.0.0.0, 端口为:10050.
关联刚才建立的”Template OS Linux Active”模板。
点击”Monitoring—Latest data”,如果有对应数据就说明Server接收到Agent数据了。
Zabbix主动、被动检测的详细过程与区别
Zabbix Agent检测分为主动(Agent Active)和被动(Agent)两种形式,主动与被动的说法均是相对于Agent来讨论的。简单说明一下主动与被动的区别如下:
主动:Agent请求Server获取主动的监控项列表,并主动将监控项内需要检测的数据提交给Server/Proxy
被动:Server向Agent请求获取监控项的数据,Agent返回数据。
zabbix agent通信过程中的协议均基于JSON格式,格式如下:
- "ZBXD/x01" (5 bytes) - data length (8 bytes). 1 will be formatted as 01/00/00/00/00/00/00/00 (eight bytes in HEX, 64 bit number)
备注:为了避免内存耗尽,Server限制每个通信连接最多使用128MB内存。
被动检测
Server发起如下请求
<item key>/n
Aegent返回如下响应数据
<HEADER><DATALEN><DATA>[/0<ERROR>]
supported items通信过程
Server打开一个TCP连接
Server发送请求agent.ping/n
Agent接收到请求并且响应1
Server处理接收到的数据1
关闭TCP连接
not supported items通信过程
Server打开一个TCP连接
Server发送请求vfs.fs.size[/nono]/n
Agent接收请求并且返回响应数据
Server接收并处理数据, 将item的状态改为“ not supported ”
关闭TCP连接
如前面所说,Zabbix首先向ServerActive配置的IP请求获取Active Items,获取并提交Active Items数据值Server或者Proxy。很多同学会提出疑问:Zabbix多久获取一次Active Items?它会根据配置文件中的RefreshActiveChecks的频率进行,如果获取失败,那么将会在60秒之后重试
获取ACTIVE ITEMS列表
Agent请求
<HEADER><DATALEN>{ "request":"active checks", "host":"<hostname>" }
Server响应列表
<HEADER><DATALEN>{ "response":"success", "data":[ { "key":"log[/home/zabbix/logs/zabbix_agentd.log]", "delay":30, "lastlogsize":0, "mtime":0 }, { "key":"agent.version", "delay":600, "lastlogsize":0, "mtime":0 }, { "key":"vfs.fs.size[/nono]", "delay":600, "lastlogsize":0, "mtime":0 } ] }
备注:获取到的items列表中的所有item属性key, delay, lastlogsize ,mtime都必须存在,获取列表的通信过程如下:
Agent打开TCP连接(主动检测变成Agent打开)
Agent请求items检测列表
Server返回items列表
Agent 处理响应
关闭TCP连接
Agent开始收集数据
提交active items数据
<HEADER><DATALEN>{ "request":"agent data", "data":[ { "host":"<hostname>", "key":"agent.version", "value":"2.4.0", "clock":1400675595, "ns":76808644 }, { "host":"<hostname>", "key":"log[/home/zabbix/logs/zabbix_agentd.log]", "lastlogsize":112, "value":" 19845:20140621:141708.521 Starting Zabbix Agent [<hostname>]. Zabbix 2.4.0 (revision 50000).", "clock":1400675595, "ns":77053975 }, { "host":"<hostname>", "key":"vfs.fs.size[/nono]", "state":1, "value":"Cannot obtain filesystem information: [2] No such file or directory", "clock":1400675595, "ns":78154128 } ], "clock": 1400675595, "ns": 78211329 }
{ "response":"success", "info":"processed: 3; failed: 0; total: 3; seconds spent: 0.003534" }
备注:如果有些数据提交失败,比如host、item被删除或者禁用,agent不会尝试从新提交
主动检测提交数据过程如下:
Agent建立TCP连接
Agent提交items列表收集的数据
Server处理数据,并返回响应状态
关闭TCP连接
http://www.google.com
http://t.cn/RIq6Fsz
http://t.cn/RAFoZ4Y
https://www.zabbix.com/forum/showthread.php?t=50510
更多精彩热文:
用十条命令在一分钟内检查Linux服务器性能
一张图告诉你,你为什么老加班.....
理解Linux系统负荷
请非技术人员不要对技术人员说这很容易实现
十张图看懂未来的大数据世界
Linux终端下全能系统监控工具dstat
Linux/Unix目录结构的来历
做好一名系统管理员的18个基本准则
Linux Shell从入门到删除根目录跑路指南
基于Docker容器应用的日志收集方案