Zabbix进阶1--自动注册服务器到Zabbix的三种方式介绍

背景

在项目中,有很多情况下我们没有办法一台一台服务器手动添加,例如

  1. 服务器数量过多
  2. 使用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
2
3
4
5
6
7
8
9
需要发现的IP地址范围。包括下列格式:
单IP: 192.168.1.33
IP地址范围: 192.168.1-10.1-255。IP地址范围取决于包含的所有地址数量(小于64K)。
IP子网掩码: 192.168.4.0/24
支持的IP掩码:
/16 - /30 用于 IPv4地址
/112 - /128用于IPv6地址
列表: 192.168.1.1-255, 192.168.2.1-100, 192.168.2.200, 192.168.4.0/24
从Zabbix 3.0.0起支持空格、制表符和多行。

Checks

检查项,其实就是用来判断你的host能不能被discover到

1
2
3
4
5
6
7
Zabbix会使用此检查列表来执行网络发现。点击  在弹窗中配置一个新检查。
支持的检查: SSH, LDAP, SMTP, FTP, HTTP, HTTPS, POP, NNTP, IMAP, TCP, Telnet, Zabbix agent, SNMPv1 agent, SNMPv2 agent, SNMPv3 agent, ICMP ping.
基于协议的自动发现使用net.tcp.service[] 功能来检测每台主机,查询SNMP OID的SNMP服务不在此列。通过查询未加密模式的监控项来探测Zabbix agent的存在。请查阅agent监控项获取更多信息。
'端口'参数的格式如下:
单一端口: 22
端口范围: 22-45
列表: 22-45,55,60-70

注意,很多文章中只配置了一个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
2
3
4
5
6
7
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).
equals - equal to the value.
does not equal - not equal to the value.
is greater than or equals - more or equal to the value.
is less than or equals - less or equal to the value.
contains - contains the substring. Parameter is given as a string.
does not contain - does not contain the substring. Parameter is given as a string.

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来设置多久找不到就自动删除

总结

  1. Autoregistration actions
    • 这应该是最简单的一个,因为只需要写一个action就完事了,不需要配置discovery然后配置action,也不需要适配接口再做后续操作,是我认为最简单的一种用法,但是缺点同样动人
    • 不能自动删除,只能自动添加
  2. Discovery
    • 需要一个确定的IP区间,如果在AWS中有较多子账号,而且配置不当导致private IP冲突的话,对创建host影响很大
    • 可以自动删除(配置对应的discovery action)
  3. LLD
    • 通过接口等方式获取服务器列表,然后添加到zabbix中,适用于AWS CLI这种接口形式的添加
    • 但是还是有个不适用性,就是跨AWS account,无法用一个CLI去获取所有的EC2
    • 可以自动删除(不需要配置,如果没有的话会自动删除)