在zabbix agent端有四项比较神似的四个配置项:Hostname、HostnameItem、HostMetadata、HostMetadataItem 。本篇就作为一个单独的篇幅说下这四项。先看下官方给出的解释。

 1### Option: Hostname
 2#       Unique, case sensitive hostname.
 3#       Required for active checks and must match hostname as configured on the server.
 4#       Value is acquired from HostnameItem if undefined.
 5#
 6# Mandatory: no
 7# Default:
 8# Hostname=
 9### Option: HostnameItem
10#       Item used for generating Hostname if it is undefined. Ignored if Hostname is defined.
11#       Does not support UserParameters or aliases.
12#
13# Mandatory: no
14# Default:
15# HostnameItem=system.hostname
16### Option: HostMetadata
17#       Optional parameter that defines host metadata.
18#       Host metadata is used at host auto-registration process.
19#       An agent will issue an error and not start if the value is over limit of 255 characters.
20#       If not defined, value will be acquired from HostMetadataItem.
21#
22# Mandatory: no
23# Range: 0-255 characters
24# Default:
25# HostMetadata=
26### Option: HostMetadataItem
27#       Optional parameter that defines an item used for getting host metadata.
28#       Host metadata is used at host auto-registration process.
29#       During an auto-registration request an agent will log a warning message if
30#       the value returned by specified item is over limit of 255 characters.
31#       This option is only used when HostMetadata is not defined.
32#
33# Mandatory: no
34# Default:
35# HostMetadataItem=

其实官方的说明还是比较清晰的。

一、hostname与HostnameItem

这部分在上一篇 zabbix小结(十三)zabbix自动注册 中也提过了。这两者之间是冲突的,当配置了Hostname了以后,再使用HostnameItem时,在启动zabbix agent服务时会出现如下信息:Starting Zabbix agent: zabbix_agentd [21988]: Warning: both Hostname and HostnameItem defined, using [www.361way.com] 。

接下来说下两者之间的区别。

  • Hostname 在主动模式(对于agent而言的,agent主动)时,会和服务器之间对Hostname信息,即web端配置的名称要和这个名称一致,才会成功。在使用被动模式时,实际上该参数是没用的。但该项配置后主机名称是固定的,比如 Hostname=www.361way.com;
  • HostnameItem 作用其实和Hostname是一样的,不过该项是动态的,其支持通过key进行配置,如system.hostname 。当然也支持其他key,只要是zabbix_get能正常取的数据的key理论都是支持的,但并不表示都能用,比如将HostnameItem的值设置为system.uname时,在启动时就报了里面使用特殊字符#,这是不允许的。
1Starting Zabbix agent: zabbix_agentd [28795]: ERROR: invalid "Hostname" configuration parameter:
2'Linux www.361way.com 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64': name contains invalid character '#'

有人说这不是重复功能吗?因为默认情况下监控用的主机名一般都是system.hostname。实际上官方是有一些考量的,比如举一个场景,当我们要对一大批主机进行自动配置时,这里就可以使用HostnameItem ,所有的主机都使用一个模板进行批量部署,就避免了每台主机再去单独设置hostname的麻烦。

二、HostMetadata和HostMetadataItem

这两个又和上面的名字比较像,我在配置自动注册时,就看错过,错使用了HostnameItem,后来排错的时候才发现使用了不对的参数。接下来还说HostMetadata和HostMetadataItem这两个参数,这两个参数在官方文档https://www.zabbix.com/documentation/4.0/manual/discovery/auto_registration 里说的比较详细。这里也再介绍下。

两者都是用于自动注册使用的,HostMetadata属于静态配置,HostMetadataItem属于动态配置,当然还是使用的zabbix key。官方举了两个示例,这里翻译下吧。

第一个示例是关于HostnameMetadataItem的,比如配置key: HostMetadataItem=system.uname

使用了该key后,在不同的操作系统上会获取到不同的信息,比如windows和linux执行后,可能会返回如下信息:

1Linux: Linux server3 3.2.0-4-686-pae #1 SMP Debian 3.2.41-2 i686 GNU/Linux
2Windows: Windows WIN-0PXGGSTYNHO 6.0.6001 Windows Server 2008 Service Pack 1 Intel IA-32

这时候我们就可以通过自动注册功能,确认包含了Linux或windows而链接不同的模板或主机组。第二个示例是关于HostMetadata的。这个属于静态配置,上面已经说过了。

1HostMetadata=Linux    21df83bf21bf0be663090bb8d4128558ab9b95fba66a6dbf834f8b91ae5e08ae

比如,我们所有需要自动注册的linux主机,我们可以配置以上的信息,这时候就可以通过匹配两项,一项是linux,另一项可以看作密码key,进而确认匹配的主机会错。同样不同类型的主机我们还可以加不同的字符串进行区分,比如:

1HostMetadata=MySQL on Linux 21df83bf21bf0be663090bb8d4128558ab9b95fba66a6dbf834f8b91ae5e08ae

上面这个我们就可以通过三个关键字,mysql、linux、密码串进行区分出主机是运行的mysql服务,所以就把他自动链接到了mysql模板上。