zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。 zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。
zabbix主要由2部分构成,zabbix server与可选组件zabbix agent。zabbix agent需要安装到被监控的主机上,它负责定期收集各项数据,并发送到zabbix server端,zabbix server将数据存储到数据库中,zabbix web根据数据在前端进行展现和绘图。
Zabbix整体架构示意图
AllowRoot | 默认值:0是否允许使用root身份运行zabbix,如果值为0,并且是在root环境下,zabbix会尝试使用zabbix用户运行,如果不存在会告知zabbix用户不存在。0-不允许1- |
BufferSend | 取值范围:1-3600默认值:5数据存储在buffer中最长多少秒 |
BufferSize | 取值范围:2-65535默认值:100buffer最大值,如果buffer满了,zabbix将会将检索到的数据发送给zabbixserver或者proxy |
DebugLevel | 取值范围:0-5默认值:3指定日志级别0-basicinformationaboutstartingandstoppingofZabbixprocesses1-critical级别2-error级别3-ug级别5-extendeddebugging(与级别4一样.只能使用runtimecontrol来设置.) |
EnableRemoteCommands | 默认值:0是否运行zabbixserver在此服务器上执行远程命令0-禁止1-允许取值范围:0-255字符,如果当前值为定义,那么它的值默认为HostMetadataItem的值。这个选项在2.2.0之后加入,并且确保支付不能超过限制,以及字符串必须是UTF8,否则服务器无法启动 |
HostMetadata | 功能同上,如果HostMetadata值未设置,这个配置才有效。支持使用UserParameters、alias、system.run[] |
HostMetadataItem | 默认值:HostnameItem配置的值主机名,必须唯一,区分大小写。Hostname必须和zabbix |
Hostname | zabbix主动监控无法正常工作。为什么呢?因为agent拿着这个主机名去问server,我有配置主动监控项吗?server拿着这个主机名去配置里面查询,然后返回信息。支持字符:数字字母、’.’、’4个字符 |
HostnameItem | 默认值:system.hostname设置主机名,只有当HostMetadata没设置,她才生效。不支持UserParameters、aliases,支持system.run[] |
Include | 包含自配置文件,不同的配置写到不同的文件中,然后include,配置文件会显得规范。例如:/absolute/path/to/config/files/*.conf.Zabbix2.4.0开始支持正则表达式。 |
ListenIP | 默认值:0.0.0.0监听IP地址,默认为所有接口,多个ip之间使用逗号分隔 |
ListenPort | 取值范围:1024-32767默认值10050监听端口 |
LoadModule | 加载模块文件,可以写多个格式:LoadModule=必须配置LoadModulePath |
LoadModulePath | 模块路径,绝对路径 |
LogFile | 日志文件路径如果未配置,日志会记录到syslog中 |
LogFileSize | 取值范围:0-1024默认值:1日志文件大小,单位为MB。0-关闭自动轮滚.备注:如果日志文件到达了最大值并且文件轮滚失败,那么老日志文件会被清空掉。 |
LogRemoteCommands | 默认值:0记录原型执行的shell命令日志,级别为warrning0-disabled1-enabled |
MaxLinesPerSecond | 取值范围:1-1000默认值:100处理监控类型为log何eventlog日志时,agent每秒最大发送的行数。默认为100行 |
PidFile | 默认值:/tmp/zabbix_agentd.pidPID文件名 |
RefreshActiveChecks | 取值范围:60-3600默认值:120多久时间(秒)刷新一次主动监控配置信息,如果刷新失败,那么60秒之后会重试一次 |
Server zabbix | server的ip地址,多个ip使用逗号分隔 |
ServerActive zabbix | 主动监控server的ip地址,使用逗号分隔多IP,如果注释这个选项,那么当前服务器的主动监控就被禁用了 |
SourceIP | zabbix对外连接的出口IP地址 |
StartAgents | 取值范围:0-100默认值:3zabbix启动之后开启被动监控的进程数量,如果设置为0,那么zabbix被动监控被禁用,并且不会监听相应端口,也就是说10050端口不会开启。 |
Timeout | 默认值:1-30默认值:3超时时间,单位秒 |
UnsafeUserParameters | 取值范围:0,1默认值:0允许所有字符的参数传递给用户定义的参数。 |
User | 默认值:zabbix运行zabbix程序的用户,如果AllowRoot被禁用,才有效果 |
UserParameter | 用户自定义key,格式:UserParameter=,例如:serParameter=system.test,who|wc-l |
Zabbix-agent的工作模式可以分为:
主动模式(active):agent请求server获取主动的监控项列表,并主动将监控项内需要检测的数据提交给server/proxy
被动模式(passive):server向agent请求获取监控项的数据,agent返回数据。
主动模式是指Zabbix-Agent将采集到的数据主动推送给Zabbix-Server,其行为是Zabbix-Agent向Zabbix-Server主动发起的数据连接过程,Zabbix-Server不必等待Zabbix-Agent的数据采集行为,Zabbix-Agent能够一次批量发送多条数据给Zabbix-Server,属于一对多的响应模式,对Zabbix-Server的性能开销较少,适合大规模环境使用。
被动模式是指Zabbix-Server向Zabbix-Agent请求数据,Zabbix-Agent被动接受数据请求后进行回应,属于一对一的响应模式。
比如有100个监控项,Zabbix-Server需要向Zabbix-Agent请求100次,同时,Zabbix-Agent在响应Zabbix-Server时,对监控项数据采集也需要消耗时间,此时,Zabbix-Server只能耗着时间安静地等待Zabbix-Agent。
相对于主动模式的高效,被动模式从时间开销和发送数据量上都处于劣势,对Zabbix-Server的性能开销较大,适合小规模环境使用。
主动模式和被动模式在同一个Zabbix-Agent上,是可以共存的,比如让一部分监控项处于被动模式,另一部分处于主动模式。
处于主动模式的监控项,由Zabbix-Agent周期性地采集数据传输给Zabbix-Server;
处于被动模式的监控项,则由Zabbix-Server周期性地从Zabbix-Agent获取数据。
Zabbix_agentd.conf部分参数配置
Server=127.0.0.1
#被动模式连接的Zabbix-Server的IP地址。
ServerActive=127.0.0.1
#主动模式连接的Zabbix-Server的IP地址,开启此项参数,将会自动打开主动模式;将其注释掉,则会关闭主动模式
Hostname=Host-001
#在主动模式中,Hostname作为Zabbix-Server处理数据的唯一依据,要求Hostname在Zabbix-Server中具有唯一性。当有多个Zabbix-Agent的主机名配置相同时,会造成该主机名下的主动模式监控项数据存储错乱,因为在不同的时间周期内,其存储的是不同Zabbix-Agent的数据。
StartAgents=3 #Agent的进程个数,用于被动模式,如果大于0,则会监听10050端口。如果只需要主动模式,则可以将其设置为0,将被动模式关闭。
Zabbix-Server打开一个TCP连接。
Zabbix-Server发送一个key为agent.ping的请求。
Zabbix-Agent接受这个请求,然后响应数据。
Zabbix-Server对接收到的数据进行处理。
Zabbix-Server对接收到的数据进行处理。
在主动模式中,Zabbix-Agent在启动时就会向Zabbix-Server发送请求,以获取需要主动监控的监控项。这部分的运行流程总结如下:
Zabbix-Agent向Zabbix-Server建立一个TCP连接。
Zabbix-Agent请求需要检测的数据列表。
Zabbix-Server响应Zabbix-Agent,发送一个Item列表(Item key、Delay)。
Zabbix-Agent响应请求。
完成本次会话后关闭TCP连接。
Zabbix-Agent开始周期性地采集数据。
(2)Zabbix-Agent发送数据给Zabbix-Server的工作流程
当Zabbix-Agent将监控项数据采集完成之后,会将数据发送给Zabbix-Server。这部分的运行流程总结如下:
Zabbix-Agent向Zabbix-Server建立一个TCP连接。
Zabbix-Agent将数据发送给Zabbix-Server,其发送周期等于Item的更新周期。
Zabbix-Server处理Zabbix-Agent发送的数据。
关闭TCP连接。
zabbix在模板中预定义了一些key,但通常情况,并不能满足我们的需求。幸运的是zabbix提供了自定义key的方法,因此我们可以灵活的监控各种我们想要监控的数据。
vim /etc/zabbix/zabbix_agentd.conf # 进入到配置文件
1.找到 UnsafeUserParameters=0 改为 UnsafeUserParameters=1
2.找到 UserParameter= 在下面直接添加用户参数
UserParameter=<key>,<shell command>
key:服务器添加监控时需用到的key值
shell command:监控脚本的绝对路径
例:UserParameter=tomcat,/etc/zabbix/alertscripts/tomcat.sh (注意用逗号隔开)
如果要添加多个监控项,就依次写多个UserParameter
1.修改自定义key路径
找到 Include=/usr/local/etc/zabbix_agentd.conf.d/ # 在下面添加读取用户参数的文件路径
改为 Include=/etc/zabbix/zabbix_agentd.d/*.conf # 也可以定义其他路径
2.创建配置文件
vim /etcl/zabbix/zabbix_agentd.d/userparameter.conf
添加想要监控的项,比如UserParameter=tomcat,/etc/zabbix/alertscripts/java.sh
多个自定义监控项都可写在这个文件里
配置完成后重启zabbix agent服务
错误信息