2 agent(主动模式) 自动注册

概述

可以启用活动 Zabbix agent 自动注册,之后服务器即可开始对其进行监控。 这样一来,无需在服务器上手动配置,即可将新的主机添加到监控中。

当此前未知的活动 agent 请求检查时,就会发生自动注册。

此功能对于自动监控新的云节点可能非常方便。 一旦您在云中有了新节点,Zabbix 就会自动开始采集该主机的性能和可用性数据。

活动 agent 自动注册也支持通过被动检查监控已添加的主机。 当活动 agent 请求检查时,如果其配置文件中定义了 ListenIPListenPort 配置参数,这些参数也会一并发送到服务器。 如果指定了多个 IP 地址,则第一个会发送到服务器。

服务器在添加新自动注册的主机时,会使用接收到的 IP 地址和端口来配置 agent。 如果未接收到 IP 地址值,则使用传入连接所使用的地址。 如果未接收到端口值,则使用 10050。

可以指定主机使用 DNS 名称 作为默认 agent 接口进行自动注册。

在以下情况下,会重新执行自动注册:

  • 如果主机元数据信息发生变化:
    • 由于 HostMetadata 发生变化并且 agent 重启
    • 由于 HostMetadataItem 返回的值发生变化
  • 对于缺少元数据的手动创建主机
  • 如果某主机被手动更改为由另一个 Zabbix proxy 监控
  • 如果同一主机的自动注册来自新的 Zabbix proxy

Zabbix 服务器和 Zabbix proxy 的活动 agent 自动注册心跳间隔为 120 秒。 因此,如果已发现的主机被删除,自动注册将在 120 秒后重新执行。

配置

指定服务器

请确保已在 agent 配置文件 zabbix_agentd.conf 中指定 Zabbix 服务器:

ServerActive=10.0.0.1

除非您在 zabbix_agentd.conf 中专门定义了 Hostname,否则服务器将使用 agent 所在位置的系统主机名来命名主机。 Linux 中的系统主机名可以通过运行 hostname 命令获取。

如果在 Zabbix agent 配置中将 Hostname 定义为以逗号分隔的主机列表,则会为列出的所有主机名创建主机。

对配置文件进行任何更改后,请重启 agent。

active agent 自动注册的动作

当服务器收到来自 agent 的自动注册请求时,它会调用一个action。 必须为 agent 自动注册配置一个事件源为“自动注册”的动作。

要让 active agent 自动注册,不需要设置网络发现

在 Zabbix 前端中,转到 告警 → 动作,选择 自动注册动作,然后点击 创建动作

  • 在“动作”标签页中,为你的动作指定一个名称
  • 可选地指定条件。 你可以在主机名称/主机元数据的条件中使用子字符串匹配或正则表达式匹配。 如果你打算使用“主机元数据”条件,请参见下一节。
  • 在“操作”标签页中,添加相关操作,例如:“添加主机”、“添加到主机组”(例如 Discovered hosts)、“链接模板”等。

如果将要自动注册的主机很可能只支持 active 监控(例如,这些主机因防火墙限制而无法被你的 Zabbix 服务器访问),那么你可能需要创建一个专用模板,例如 Template_Linux-active,用于链接到这些主机。

创建的主机会被添加到 Discovered hosts 组中(默认情况下如此,可在 Administration > General > Other 中配置)。

如果你希望将主机添加到其他组中,请添加一个 从主机组移除 操作(指定“Discovered hosts”),并同时添加一个 添加到主机组 操作(指定另一个主机组),因为主机必须属于某个主机组。

安全自动注册

通过配置基于 PSK 的身份验证并使用加密连接,可以实现一种安全的自动注册方式。

加密级别在 Administration > General > Autoregistration 中进行全局配置。 可以选择不加密、使用 PSK 身份验证的 TLS 加密,或两者同时启用(这样某些主机可以在不加密的情况下注册,而其他主机则通过加密方式注册)。

在添加主机之前,Zabbix 服务器会先验证 PSK 身份验证。 如果验证成功,则会添加该主机,并将 Connections from/to host 设置为仅 'PSK',其 identity/预共享密钥与全局自动注册设置中的相同。

为确保在使用 proxy 的安装环境中自动注册的安全性,应启用 Zabbix 服务器与 proxy 之间的加密。

使用 DNS 作为默认接口

HostInterface 和 HostInterfaceItem 配置参数 允许在自动注册期间为主机接口指定自定义值。

更具体地说,如果主机应当使用 DNS 名称而不是其 IP 地址作为默认 agent 接口进行自动注册,那么这些参数就很有用。 在这种情况下,应将 DNS 名称指定为或返回为 HostInterface 或 HostInterfaceItem 参数之一的值。 如果这些参数之一的值发生变化——例如,从 IP 地址变为 DNS 名称,或反之——则自动注册主机的默认接口将相应更新。 此更新将应用于现有主机,而不是通过创建新主机来实现。 要发送新值,必须重启 agent,以便其重新发起自动注册过程。

如果未配置 HostInterface 或 HostInterfaceItem 参数,则会改用 listen_dns 参数。 该值通过对 agent 的 IP 地址执行反向 DNS 查询来确定。 如果反向 DNS 未正确配置或返回无效名称,则可能由于接口值无效而导致自动注册不正确或失败。

使用主机元数据

当 agent 向服务器发送自动注册请求时,它会发送其主机名。
在某些情况下(例如 Amazon 云节点),仅有主机名不足以让 Zabbix 服务器区分已发现的主机。
可以选择使用主机元数据,将其他信息从 agent 发送到服务器。

主机元数据在 agent 的配置文件 zabbix_agentd.conf 中进行配置。
在配置文件中指定主机元数据有 2 种方式:

HostMetadata
HostMetadataItem

请参见上述链接中对这些选项的说明。

HostMetadataItem 参数最多可返回 65535 个 UTF-8 码点。
更长的值将被截断。

请注意,在 MySQL 上,如果返回值包含多字节字符,则按字符数计算的实际最大长度会更小。
例如,仅包含 3 字节字符的值,总长度将限制为 21844 个字符;而仅包含 4 字节字符的值,总长度将限制为 16383 个字符。

每当主动 agent 向服务器发送刷新主动检查的请求时,都会发生一次自动注册尝试。
请求之间的延迟由 agent 的 RefreshActiveChecks 参数指定。
第一次请求会在 agent 重启后立即发送。

示例

使用 HostMetadata 按操作系统自动注册

假设您希望由 Zabbix 服务器自动注册主机。 您的网络中部署了主动式 Zabbix agent(参见上文“Configuration”部分)。 您的网络中既有 Windows 主机,也有 Linux 主机,并且您的 Zabbix 前端中提供了“Linux by Zabbix agent”和“Windows by Zabbix agent”模板。 因此,在主机注册时,您希望将相应的 Linux/Windows 模板应用到正在注册的主机上。 默认情况下,在自动注册时只会将主机名发送到服务器,这可能还不够。 为了确保将正确的模板应用到主机,您应使用主机元数据。

前端配置

首先要做的是配置前端。
创建 2 个动作。
第一个动作:

  • 名称:Linux 主机自动注册
  • 条件:主机元数据包含 Linux
  • 操作:链接模板:Linux by Zabbix agent

在这种情况下,您可以跳过“添加主机”操作。
将模板链接到主机需要先添加主机,因此服务器会自动完成该操作。

第二个动作:

  • 名称:Windows 主机自动注册
  • 条件:主机元数据包含 Windows
  • 操作:链接模板:Windows by Zabbix agent

Agent 配置

现在,您需要配置 agent。 将以下一行添加到 agent 配置文件中:

HostMetadataItem=system.uname

这样可以确保主机元数据将根据运行 agent 的主机包含“Linux”或“Windows”。 在这种情况下,主机元数据示例如下:

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

请不要忘记在对配置文件进行任何更改后重启 agent。

使用 HostMetadata 控制自动注册和模板

步骤 1 - 使用 HostMetadata 保护注册

使用主机元数据可提供一些基本保护,防止不需要的主机注册。

前端配置

在前端中创建一个动作,使用某个难以猜测的秘密代码来阻止不需要的主机:

  • 名称:Linux 自动注册动作
  • 条件:
    • 计算类型:AND
    • 条件 (A):主机元数据包含 //Linux//
    • 条件 (B):主机元数据包含 //21df83bf21bf0be663090bb8d4128558ab9b95fba66a6dbf834f8b91ae5e08ae//
  • 操作:
    • 向用户发送消息:Admin,通过所有媒介
    • 添加到主机群组:Linux servers
    • 链接模板:Linux by Zabbix agent

请注意,单独使用此方法并不能提供强有力的保护,因为数据是以纯文本传输的。 要使更改立即生效,需要重新加载配置缓存。

agent 配置

将以下一行添加到 agent 配置文件中:

HostMetadata=Linux    21df83bf21bf0be663090bb8d4128558ab9b95fba66a6dbf834f8b91ae5e08ae

其中,“Linux” 是平台,其余字符串是难以猜测的密文。

请不要忘记在对配置文件进行任何更改后重启 agent。

步骤 2 - 将模板添加到已注册的主机

可以为已注册的主机添加额外的模板。
在这种情况下,MySQL by Zabbix agent 模板将仅链接到 HostMetadata 包含令牌 MySQL 的主机。

前端配置

在前端中更新该动作:

  • 名称:Linux 自动注册动作
  • 条件:
    • 计算类型:AND
    • 条件 (A):主机元数据包含 Linux
    • 条件 (B):主机元数据包含 21df83bf21bf0be663090bb8d4128558ab9b95fba66a6dbf834f8b91ae5e08ae
    • 条件 (C):主机元数据包含 MySQL
  • 操作:
    • 向用户发送消息:Admin,通过所有媒介
    • 添加到主机群组:Linux servers
    • 链接模板:Linux by Zabbix agent
    • 链接模板:MySQL by Zabbix Agent

agent 配置

更新 agent 配置文件中的下一行:

HostMetadata=MySQL on Linux 21df83bf21bf0be663090bb8d4128558ab9b95fba66a6dbf834f8b91ae5e08ae

请不要忘记在对配置文件进行任何更改后重启 agent。