[comment]: # translation:outdated

[comment]: # ({1c2455b7-1c2455b7})
# 2 agent（主动模式） 自动注册

[comment]: # ({/1c2455b7-1c2455b7})

[comment]: # ({dddd0db3-81edbbe2})

#### 概述


可以使用Zabbix agent(主动模式) 自动注册功能来添加主机，自动注册后Zabbix server就可以开始进行监控了。通过这种方式添加的主机不必再手工配置。
只要有未知的主动模式agent请求检查，就会触发自动注册。

该特性对于云上新增节点的自动监控很方便。一旦云上新增了一个节点，Zabbix就开始自动收集该节点的性能和可用性数据。

对于通过zabbix agent(被动模式)添加的主机，agent（主动模式） 自动注册同样可以监控它们。agent（主动模式）请求检查时，会将配置文件中定义的监听IP(ListenIP)或监听端口(ListenPort)参数一同发送给Zabbix server。

注册新主机时，Zabbix server使用收到的IP地址和端口信息来配置agent。如果没收到IP地址信息，则使用入站连接中的对端IP地址。如果没收到端口信息，则使用10050作为agent的端口。

可以使用[DNS名称](#using_dns_as_default_interface)作为默认agent接口来进行自动注册。

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

-   主机 [元数据](#using_host_metadata) 信息变更:
    -   由于HostMetadata信息变更并且agent重启
    -   由于HostMetadataItem信息变更
-   手动添加的主机丢失元数据信息
-   已注册的主机手动迁移到另一个Zabbix proxy上
-   从一个新的Zabbix proxy收到同一台主机的自动注册信息

[comment]: # ({/dddd0db3-81edbbe2})

[comment]: # ({5d32b87c-5d32b87c})
#### 配置

[comment]: # ({/5d32b87c-5d32b87c})

[comment]: # ({bf3762f0-bf3762f0})
##### 定义Zabbix server

确保在 [配置文件](/manual/appendix/config/zabbix_agentd) -
zabbix\_agentd.conf中定义了Zabbix server。

    ServerActive=10.0.0.1

如果不在zabbix\_agentd.conf中定义 *主机名称(Hostname)*，则Zabbix会使用agent所在系统的主机名称给主机命名。Linux系统的主机名称可以通过运行命令 'hostname' 来获取。

如果定义的 *主机名称(Hostname)* 是以逗号分隔的多台主机，那么其中定义的所有主机均会被创建。

agent配置变更需要重启agent生效。

[comment]: # ({/bf3762f0-bf3762f0})

[comment]: # ({adc2c1fd-7b103292})
##### active agent自动注册动作

 一旦收到从agent发来的自动注册请求，Zabbix server会调用[动作](/manual/config/notifications/action)。为了实现agent自动注册，必须配置 "自动注册" 这个事件源的动作。

::: noteclassic
设置 [网络发现](network_discovery)无需active agent自动注册参与。
:::

在Zabbix界面上, 转到 *配置→ 动作*, 选择
*自动注册* 作为事件源并点击 *创建动作*:

-   在动作(Action)选项卡中, 给动作设置一个名称
-   [条件](/manual/config/notifications/action/conditions#autoregistration_actions)为可选设置。
    可以对主机名称/主机元数据设置字符串匹配或正则表达式匹配。如果使用 "主机元数据"作为条件，参照下一小节。
-   在操作(Operations)选项卡中，添加相关操作，比如 - '添加主机'，'添加主机组' (比如 *发现的主机* 这个组)，'链接到模板' 等。

::: notetip
如果待自动注册的主机只支持主动模式(active)监控(比如主机防火墙策略阻挡了Zabbix server向agent发起请求)，那么可以为主机创建这样的模板 *Template\_Linux-active*。
:::

新建的主机会添加到  *发现的主机* 组(默认可在这里配置：*管理* → *通用* →
*[其它](/manual/web_interface/frontend_sections/administration/general#other_parameters)*
如果想添加主机到其它组，可以先执行一个 *从主机组中移除* 操作(指定主机组 "发现的主机")，然后再执行 *添加到主机组* 操作(指定另一个主机组)，因为一个主机必须属于一个主机组。

[comment]: # ({/adc2c1fd-7b103292})

[comment]: # ({66cac4ef-66cac4ef})
#### 自动注册的安全性考量

一种安全的自动注册方式是通过配置基于预共享密钥(PSK)的认证对通信加密。

可在 *管理* →
*[通用](/manual/web_interface/frontend_sections/administration/general)* 的右侧下拉菜单中的自动注册面板中配置加密级别，全局生效。
可以选不加密，使用预共享密钥(PSK)的TLS加密或以上两者同时启用(这样就会让一些主机注册时不经过加密，另一些主机经过加密方式注册)。

Zabbix server新增主机前会对预共享密钥(PSK)进行核实。
一旦核实成功，主机就会被添加，并且 *[从主机发起的/到主机的通信连接](/manual/config/hosts/host#encryption)* 设置为仅使用 'PSK' 并且其身份/预共享密钥与全局的自动注册配置中设置的相同。 

::: noteimportant
为确保使用Zabbix proxy时自动注册的安全性，Zabbix server和proxy之间应该启用加密。
:::

[comment]: # ({/66cac4ef-66cac4ef})

[comment]: # ({9c275675-9c275675})
#### 使用DNS作为默认接口

在自动注册过程中，主机接口(HostInterface)和主机接口监控项(HostInterfaceItem) [配置参数](/manual/appendix/config/zabbix_agentd)的值允许自定义。


具体来说，如果主机使用DNS名称而不是IP地址作为默认agent接口进行自动注册时，对参数的值进行自定义就发挥作用了。这种情况下，DNS名称应通过HostInterface或HostInterfaceItem参数进行设置。
注意，如果上述参数的值发生改变，自动注册的主机接口也会更新。所以可以通过更换DNS名称来更新默认接口，或给DNS名称改成IP地址来更新接口。
Zabbix agent需要重启来使变更生效。
::: noteclassic
如果不配置HostInterface和HostInterfaceItem这两个参数，那么listen\_dns参数会从IP地址来解析。如果解析配置错误，可能会因为主机名称无效导致自动注册失败。
:::

[comment]: # ({/9c275675-9c275675})

[comment]: # ({2d82c56f-af247ed6})
#### 使用主机元数据

agent会将主机名称和自动注册请求一同发送到Zabbix server上。某些情况下(比如亚马逊云主机)无法通过主机名称来区分发现的主机。 agent可以通过发送主机元数据这个可选配置来提供其它信息。

主机元数据在agent的 [配置文件](/manual/appendix/config/zabbix_agentd) - zabbix\_agentd.conf中定义。
有两种方式来设置主机元数据:

    HostMetadata
    HostMetadataItem

详情请参阅上述链接。

::: noteimportant
每次active agent发送请求到Zabbix server刷新检查时，会尝试进行自动注册。 请求之间的延迟在agent的
[RefreshActiveChecks](/manual/appendix/config/zabbix_agentd) 参数
中定义。agent重启后会立刻发送第一个请求。
:::

[comment]: # ({/2d82c56f-af247ed6})

[comment]: # ({070aaeb4-070aaeb4})
##### 例1

使用主机元数据区分Linux和Windows主机。

假设你想让主机自动注册到Zabbix server。
网络中有配置了active agent(参阅上述"配置"章节)的Windows和Linux主机，并且Zabbix页面中有"Linux by Zabbix agent"和"Windows by Zabbix agent"这两个可用模板。
于是你想在注册过程中将Linux/Windows模板自动应用到对应主机。在自动注册过程中，默认只有主机名称会发送给Zabbix server，可是这些信息并不够。要想确保合适的模板应用到对应主机上，需要使用主机元数据。

[comment]: # ({/070aaeb4-070aaeb4})

[comment]: # ({9543f562-9543f562})
##### 前端页面配置

首先需要做的就是配置前端页面。新建两个动作。
第一个动作:

-   名称: Linux主机自动注册
-   条件: 主机元数据包含 *Linux*
-   操作: 链接到模板: Linux

::: noteclassic
这个例子中可以跳过"添加主机"操作这个步骤。虽然链接到模板需要先添加主机，但Zabbix server会自动完成添加主机操作。
:::

第二个动作:

-   名称: Windows主机自动注册
-   条件: 主机元数据包含 *Windows*
-   操作: 链接到模板: Windows

[comment]: # ({/9543f562-9543f562})

[comment]: # ({110dbc2b-110dbc2b})
##### Agent配置

现在需要配置agent了。添加下面一行到agent配置文件中:

    HostMetadataItem=system.uname

通过这种方式能确保主机元数据包含"Linux"或者"Windows"其中一个值(取决于agent所在的主机操作系统)。主机元数据的例子如下:

    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。

[comment]: # ({/110dbc2b-110dbc2b})

[comment]: # ({85f695d6-85f695d6})
##### 例2

*第一步*

使用主机元数据实施一些基本的保护措施，禁止非预期的主机进行注册。

[comment]: # ({/85f695d6-85f695d6})

[comment]: # ({f23187fb-c5ffa817})
##### 前端页面配置

在前端页面上新建一个动作，使用难以猜测的密码来阻挡非预期的主机来注册:

-   名称: Linux自动注册动作
-   条件:

```{=html}
<!-- -->
```
        * 计算类型: AND
        * 条件 (A): 主机元数据包含 //Linux//
        * 条件 (B): 主机元数据包含 //21df83bf21bf0be663090bb8d4128558ab9b95fba66a6dbf834f8b91ae5e08ae//
    * 操作: 
        * 发送信息给用户: 通过所有媒介发送给Admin 
        * 添加到主机组: Linux servers
        * 链接到模板: Linux

请注意单独使用此方法不会提供很强的保护，因为数据通过明文传输。需要重新加载配置缓存以使变更生效。

[comment]: # ({/f23187fb-c5ffa817})

[comment]: # ({9fca761d-9fca761d})
##### Agent配置

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

    HostMetadata=Linux    21df83bf21bf0be663090bb8d4128558ab9b95fba66a6dbf834f8b91ae5e08ae

"Linux"指的是操作系统平台，剩下的字符串是难以猜测的密文.

对配置文件做了变更后别忘记重启agent。

*第二步*

可以为已经注册的主机添加额外的监控内容。

[comment]: # ({/9fca761d-9fca761d})

[comment]: # ({9ee34893-6eb51339})
##### 前端页面配置

更新前端页面中的动作:

-   名称: Linux自动注册动作
-   条件:

```{=html}
<!-- -->
```
        * 计算类型: AND
        * 条件 (A): 主机元数据包含 Linux
        * 条件 (B): 主机元数据包含 21df83bf21bf0be663090bb8d4128558ab9b95fba66a6dbf834f8b91ae5e08ae
    * 操作:
        * 发送信息给用户: 通过所有媒介发送给Admin
        * 添加到主机组: Linux servers
        * 链接到模板: Linux
        * 链接到模板: MySQL by Zabbix Agent

[comment]: # ({/9ee34893-6eb51339})

[comment]: # ({15c86816-15c86816})
##### Agent配置

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

    HostMetadata=MySQL on Linux 21df83bf21bf0be663090bb8d4128558ab9b95fba66a6dbf834f8b91ae5e08ae

对配置文件做了变更后别忘记重启agent。

[comment]: # ({/15c86816-15c86816})
