一、自动发现与自动注册
Zabbix的发现主要包括三种类型:
1)Zabbix的自动网络发现
Zabbix提供非常有利和灵活的自动网络发现功能。通过网络发现,可以实现加速Zabbix部署、简化管理、在不断变化的环境中使用Zabbix而不需要过多的管理;
zabbix网络发现基于以下信息:
1)IP段自动发现;
2)可用的外部服务(FTP、SSH、WEB、TCP等);
3)从Zabbix客户端接收到信息;
4)从SNMP客户端接收到信息;
1)自动发现原理
网络发现主要由两个步骤组成:发现和动作;
Zabbix会周期性地扫描在网络发现规则中定义的IP地址段。根据每一个规则配置自身的检查频率。每一个规则都定义了一个对指定IP段的服务检查集合。
动作是对发现的主机进行相关的设置。常用的动作有添加主机、删除主机、启用主机、停用主机、添加主机到某个主机组中、发现通知等;
2)配置网络发现规则
如图:
综上所述,这个字段发现规则的意思:zabbix会自动扫描192.168.1.1到192.168.1.254这个IP地址段的所有IP地址,以此连接这些IP的10050端口,接着通过"system.uname"键值查看是否能获取数据,如果可以获取到数据,那么就把这个主机加入到自动发现规则中。
自动发现规则添加完成后,接着,就可以添加自动发现动作了,如图:
经过以上的操作,zabbix的自动发现配置已经完成,稍等片刻,就会有符合条件的主机自动添加到zabbix web中。
2)主动客户端自动注册
自动注册功能主要用于Agent主动且自动向Server注册。与前面的网络自动发现有同样的功能,但是这个功能更适用于特定的环境,当存在一个条件未知(如agent端的IP地址段、agent端的操作系统版本等信息)时,Agent去请求Server仍可实现主机自动添加到zabbix web中的功能。比如云环境下的监控。云环境中,IP分配就是随机的,这个功能就可以很好的解决类似的问题。
配置主动客户端自动注册有两个步骤,如下:
1)客户端修改配置文件
打开客户端配置文件,修改如下配置:
[root@agent ~]# vim /etc/zabbix/zabbix_agentd.conf
Server=192.168.1.10 //设置被动模式下的zabbix服务器的IP地址
ServerActive=192.168.1.10 //设置主动模式下的zabbix服务器的IP地址
Hostname=192.168.1.8
HostMetadata= linux zabbix,lzj
//设置两个元数据,一个声明为linux服务器,一个写一个通用的字符串
自动注册请求发生在每次客户端发送一个刷新主动检查请求到服务器时。请求的延时在客户端中配置文件中的“RefreshActiveChecks”参数中指定。第一次请求将在客户端重启之后立即发送。
2)配置网络自动注册规则
如图:
经过以上的操作,zabbix的自动发现注册已经完成,稍等片刻,就会有符合条件的主机自动添加到zabbix web中。
3)低级别发现Low-level discovery(LLD)
在Zabbix中,支持三种现成类型的数据项发现,分别是:
1)文件系统发现;
2)网络接口发现;
3)SNMP OID发现;
4)CPU核和状态;
zabbix自带的LLD key,如下:
1)vfs.fs.discovery //适用于zabbix agent监控方式
2)snmp.discovery //适用于SNMP agent监控方式
3)net.if.discovery //适用于zabbix agent监控方式
4)system.cpu.discovery //适用于zabbix agent监控方式
可以使用zabbix_get工具来获取key获取的数据,对于snmp,不能通过zabbix_get工具进行验证,只能在web页面中进行配置使用。
比如:
[root@zabbix ~]# zabbix_get -s 192.168.1.8 -k net.if.discovery
{"data":[{"{#IFNAME}":"lo"},{"{#IFNAME}":"virbr0-nic"},{"{#IFNAME}":"virbr0"},{"{#IFNAME}":"ens33"}]}
其中,{#IFNAME}就是一个宏变量,会返回系统中所有网卡的名称。宏变量可以定义在主机、模板以及全局,宏变量都是大写的。使用宏变量,可以使zabbix功能更加强大。
在LLD中,常用的内置宏变量如下:
1){#FSNAME}表示文件系统名称;
2){#FSTYPE}表示文件系统类型;
3){#IFNAME}表示网卡名称;
4){#SNMPINDEX}会获取OID中最后一个值;
宏级别有很多种,其优先级由高到低顺序如下:
主机级别的宏优先级最高;
第一级模板中的宏;
第二级模板中的宏;
全局级别的宏;
因此,zabbix查找宏的顺序为:首先查找主机级别的宏,如果在主机级别不存在宏设置,那么zabbix就会去模板中查看是否设置有宏。如果模板中也没有,将会查找使用全局的宏。若是在各级别中都没有找到宏,将不使用宏。
二、zabbix自定义监控项
有时当我们监控的项目在zabbix预定义的key中没有定义时,这时我们可以通过编写zabbix用户参数的方法来监控我们要求的项目item。形象一点说zabbix代理端配置文件中UserParameters就相当于脚本获取要监控的值,然后将相关的脚本或命令写入UserParameters中,然后zabbix server读取配置文件中的返回值通过处理前端的方式返回给用户。
1)zabbix端开启UserParameters指令
[root@agent ~]# vim /etc/zabbix/zabbix_agentd.conf
UnsafeUserParameters=1
//启用agent端自定义item功能,设置此参数为1后,就可以使用UserParameters指令了
UserParameters用于自定义itme。语法格式为:
UserParameters=,
//UserParameters:为关键字;
//key:为用户自定义key名称;
//command:需运行的命令或脚本;
简单的例子,如下:
UserParameters=ping, echo 1
//代理程序将会永远返回1当我们在服务器端添加item的key为ping时
2)让key接受参数
让key也接受参数的方法使item添加时更具备了灵活性。例如:系统于定义key:
vm.memory.size[]
//其中mode模式就是用户要接受的参数,当我们填写为free时则返回的为内存的剩余大小,如果我们填入的为userd时返回的内存是已经使用的大小。
语法如下:
UserParameters=key[*],command
//其中,key的值在主机系统中必须是唯一的,其中*代表命令中接受的参数,command表示命令,也就是客户端系统中可执行的命令
举例:
UserParameters=ping[*],echo $1
//如果执行ping[0],那么将一致返回’0‘,如果执行ping[aaa],将一直返回’aaa‘
三、zabbix的主动模式与被动模式
默认情况下,zabbix server会直接去每个agent上抓取数据,这对于zabbix agent来说,是被动模式,也是默认的一种获取数据的方式。但是,当zabbix server监控主机数量过多时,由zabbix server端去抓取agent上的数据,zabbix server会出现严重的性能问题。主要表现如下:
1)web界面操作卡顿,容易出现502错误;
2)监控图形中图层断裂;
3)监控告警不及时;
所以优化主要从两个方面进行优化,分别是:
1)通过部署多个zabbix proxy模式做分布式监控;
2)调整zabbix agentd为主动模式;
zabbix agentd主动模式的含义是agentd端主动汇报自己收集到的数据给zabbix server,这样,zabbix server就会空闲很多,下面介绍如何开启agent的主动模式。
1)开启agent的主动模式
zabbix agent端的配置:
[root@agent ~]# vim /etc/zabbix/zabbix_agentd.conf
ServerActive=192.168.1.10 //定义agent端收集的数据送往那个主机
Hostname=192.168.1.8 //名称需与web页面添加主机名时对应
StartAgents=1 //StartAgents的默认值为3,如果需要关闭被动模式,可设置值为0即可,关闭被动模式后,agent端的10050端口也关闭了,为了兼容被动模式,没有将值设为0,如果一开始就使用主动模式,建议将值设置为0,关闭被动模式
zabbix server端的配置
agent如果开启了主动发送数据模式,还需以下操作:
[root@zabbix ~]# vim /usr/local/zabbix/etc/zabbix_server.conf
StartPollers=10 //把zabbix server主动收集数据进程减少一些
StartTrappers=200 //将负责处理agent推送来的数据进程开大些
调整模板
因为收集数据的模式发生了变化,因此需要将所有的监控项的监控类型由原来的“zabbix客户端”改为“zabbix客户端(主动式)”。
经过以上操作,就完成了主动模式的切换,调整之后,可以发现zabbix server端的负载,应该会降低不少,操作上卡顿的问题、图形图层断裂的问题也就解决了!
——————————本文到此结束,感谢阅读——————————