背景
在项目中,有很多情况下我们没有办法一台一台服务器手动添加,例如
- 服务器数量过多
- 使用Auto scale等技术自动扩缩容,服务器随时可能被创建或删除
这种情况下,我们就需要配置自动添加服务器了,Zabbix也是提供了丰富的配置来帮助我们实现这一功能,接下来我们看一下具体可以怎么实现
实操
Autoregistration actions
Autoregistration actions可以说是我心目中最简单的配置了,我来分享一下我是怎么配置的
服务器中配置HostMetadata=RPP-Bankconnector
在/etc/zabbix/zabbix_agent.conf中配置如下
1 | HostMetadata=xxx |
记得重启agent
配置Autoregistration actions
Alerts -> Actions -> Autoregistration actions,点击左上角Create action
Name: 这个action的名称,可根据意图填写
Conditions: 条件,这边有三个选项,HostName, HostMetadata, Proxy, 由于HostName是唯一的,不可能用来作为条件,所以一般我都选择使用hostmetadata

再看Operations这一个tab

这个tab就是用来设定所有发现主机后需要做的操作,由于实在太多了,我把官网文档里说的粘贴一下
- Add host
- Remove host
- Enable host
- Disable host
- Add to host group
- Remove from host group
- Add host tags
- Remove host tags
- Link template
- Unlink template
- Set host inventory mode
可以看到,操作还是很多的,只需要选择需要的操作进行添加就可以了
Discovery
Data collection -> Discovery中,点击Create Discovery Rules来创建新的Discovery

IP range
在这边我们需要设定我们discover的IP范围,话不多说直接复制官网
1 | 需要发现的IP地址范围。包括下列格式: |
Checks
检查项,其实就是用来判断你的host能不能被discover到
1 | Zabbix会使用此检查列表来执行网络发现。点击 在弹窗中配置一个新检查。 |
注意,很多文章中只配置了一个check,但是如果有两个check项,会怎么样呢?其实是完全没有问题的,完全可以设置两个Zabbix agent type的check
其他几个不谈,其实很简单,配置过一个host的应该都知道这几个参数
配置discovery actions
接下来需要去到Alerts -> Actions -> Discovery actions,在这里面配置如果check到对应的数据,该怎么添加到zabbix

可以看到,跟Autoregistration actions差不多的,我们需要这是condition跟operations,由于非常类似,所以这里就不过多赘述了,有问题评论区见吧~
注意
在condition中设置received value的时候,可能很多人会疑惑,我设置了两个check,那这个value是从哪里来的呢?
我一开始也很疑惑,直到我查到了官方说法
1 | Specify the value received from an agent (Zabbix, SNMP) check in a discovery rule. String comparison. If several Zabbix agent or SNMP checks are configured for a rule, received values for each of them are checked (each check generates a new event which is matched against all conditions). |
LLD
LLD的话,需要配置一个Discovery,然后先通过discovery来获取对应的服务器列表。
之后通过创建一个Host prototypes来让Zabbix自动创建该Host

图中的Agent的IP地址127.0.0.1也是可以变成一个可选项的,不是非得固定127.0.0.1
可以看到,跟自动注册不一样的是,这个就跟我们的Host界面一样,通过界面化的方式来配置template,tag,hostname等信息,更加可视化
另外,这个Host也可以在配置discovery list的时候通过配置Keep lost resources period来设置多久找不到就自动删除
总结
- Autoregistration actions
- 这应该是最简单的一个,因为只需要写一个action就完事了,不需要配置discovery然后配置action,也不需要适配接口再做后续操作,是我认为最简单的一种用法,但是缺点同样动人
- 不能自动删除,只能自动添加
- Discovery
- 需要一个确定的IP区间,如果在AWS中有较多子账号,而且配置不当导致private IP冲突的话,对创建host影响很大
- 可以自动删除(配置对应的discovery action)
- LLD
- 通过接口等方式获取服务器列表,然后添加到zabbix中,适用于AWS CLI这种接口形式的添加
- 但是还是有个不适用性,就是跨AWS account,无法用一个CLI去获取所有的EC2
- 可以自动删除(不需要配置,如果没有的话会自动删除)