从事IT运维工作5年,zabbix使用4年,擅长Zabbix、Shell、Python、java等,喜欢研究Zabbix以及Promethues等开源监控工具。
文章简介
了解如何使用自动注册功能在大量主机上部署Zabbix Agent,并节省手动工作的时间。
1
部署方式
安装
首先,在主机上部署 Agent的任务与Zabbix无关。无法使用前端、Zabbix服务器或zabbix.com进行此操作。它与配置管理工具有关,但是取决于公司使用的软件。如果公司主要依赖Windows计算机,则可以通过Active Directory或SCCM执行部署。在类似AWS的云环境中,可以通过云平台部署Zabbix Agent。对于Linux,可以使用Chef,Puppet或Ansible。通常,有多种管理工具可以选择使用。
例如,要在Windows上安装Zabbix Agent,你需要:
1.复制并粘贴包含 Agent默认配置文件的文件夹。
2.更改配置文件。
3.在CMD中执行:
.../.../zabbix_agentd --config ../
../zabbix_agentd.conf --install
执行此命令后,你将向Windows机器服务中添加Zabbix服务。总之,你应该用可用的工具来部署Zabbix Agent程序包,文件夹或存档,并执行命令来安装Zabbix Agent程序。
在Linux计算机上,可以使用以下命令之一:
yum install zabbix- Agent
apt-get install zabbix- Agent
如果不是所有的机器都可以访问Internet,则只需复制RPM并在没有Internet连接的情况下在本地安装它:
rpm -ivh zabbix- Agent.rpm
下一步是将运行Zabbix Agent的主机添加到前端。无需引入超复杂的API脚本等,因为有一个称为Zabbix Agent活动注册的内置功能。它用于自动将主机添加到Zabbix前端。
动作标签
转到配置>动作。这是用于配置触发器的同一选项卡,但有时用户不会注意到它也可用于自动注册。
有一个下拉菜单,你可以在其中将事件源从触发器切换到自动注册。
主机名
返回到CLI。要成功执行主动注册,必须在Zabbix Agent配置文件中进行一些小的更改。打开zabbix_ Agentd.conf:
vim /etc/zabbix/zabbix_ Agentd.conf
Zabbix Agent配置文件
在文件内部,有一个名为Server的参数,这是你的Zabbix服务器或 Agent的IP或DNS名称。Agent将仅接受来自此IP或DNS名称的通信,并且通信的方向始终是从服务器到 Agent。但是在进行主动注册的情况下,我们需要更改ServerActive参数,该参数是 Agent将连接到的 Agent或服务器的IP或DNS名称,这意味着 Agent已连接到服务器/ Agent。
说到防火墙规则,被动 Agent检查在端口10050/TCP上运行。但是,我们需要在10051/TCP(服务器/ Agent的侦听端口)上运行活动 Agent检查。确保配置防火墙以使 Agent与该端口上的Zabbix服务器/ Agent通信。
当前示例,为ServerActive分配了本地主机地址(这里设置为127.0.0.1)。
另外两个重要参数是Hostname和HostnameItem。你可以在Hostname之后添加任何字符串,并且当 Agent执行活动 Agent注册时,它将使用指定的文本作为前端中的主机名。但是,在部署大量主机时,每个主机都需要一个唯一的主机名。无需手动或通过脚本为每个 Agent安装编辑Hostname参数。而是使用HostnameItem。让我们检查一下默认主机名是什么样的:
zabbix_get -s 127.0.0.1 -k system.hostname
当 Agent执行主动注册时,localhost.localdomain将用作Zabbix前端中的主机名。由于通常所有计算机上的主机名都不相同,因此当你在200台主机上部署Zabbix Agent时,将有一个静态条目:hostnameItem = system.hostname。但是实际提取的主机名在每台计算机上都不同,这是我们需要的结果。
元数据
还有HostMetadata和HostMetadataItem参数。
HostMetadata非常简单明了,它是定义主机元数据的参数,这意味着稍后将在前端使用的有关主机的信息。如果仅在 Agent配置文件中定义HostMetadata,然后将其部署在200个虚拟机上,我们将在每台计算机上获得相同的元数据,这将导致无法正确过滤计算机并决定如何处理它们。相反,保留默认的HostMetadata并使用与HostnameItem相似的HostMetadataItem。指定一个将从服务器提取数据的项目,提取的数据将用作主机元数据的值。
为了演示,我在配置文件中创建默认情况下在Zabbix中找不到的自定义检查:
UserParameter=release,cat /etc/redhat-release
现在,我需要重新启动Zabbix Agent,然后检查参数:
zabbix_get -s 127.0.0.1 -k release
自定义参数
该命令将返回该值。上图中你所看到的并不是最好的结果,因为最初的想法是创建可以返回“ Linux”或“ Windows”的监控项。
假设我们有200台主机需要部署Zabbix Agent,但是其中一些机器是Windows版本,因此我们将使用脚本创建一个用户参数,该脚本将告诉我们该机器是Linux还是Windows机器。为此,我们需要如上所述添加一个新的用户参数,转到HostMetadataItem并添加release。
前端
一旦在CLI中配置了 Agent,就可以开始使用前端了。
转到配置>动作>事件源>自动注册>创建动作。
只有三个条件可用:
如果在Zabbix Agent向 Agent报告和 Agent向服务器报告的体系结构中执行自动注册,则可以使用 Agent。但就我而言, Agent会直接向服务器报告,因此我将使用“主机元数据”条件来指定“包含”或“不包含”。
你可能还记得,在这种情况下,主机元数据将是CentOS Linux release 7.6.1810。
我们指定主机元数据必须包含“Linux”的条件。
转到动作>操作。如果满足条件,将执行操作。例如,可以通知管理员在服务器上安装了具有特定主机名,IP地址等的新Zabbix Agent,以便他们可以手动添加它,但是我们希望使该过程自动化。选择“添加到主机组”而不是“发送消息”。
如你所见,有两个选项-添加主机或添加到主机组。显然,我们最有可能首先添加主机,其次将其添加到主机组。但是在Zabbix中,如果你使用添加到主机组操作类型,它也会自动创建一个主机。因此,我指定要向Linux servers主机组添加新主机。
如果主机元数据包含Linux条件为true,则Zabbix将使用传递的信息作为主机名自动创建一个新主机,并将该主机添加到Linux servers主机组中。
但是如果我们还想立即开始监视,则也应该添加模板。为此,只需在模板上添加一个新的操作链接到模板并命名即可。
当条件为真时,Zabbix将自动创建一个主机并开始监视,并通知管理员是否添加了此操作类型。
由于条件为真,我现在在前端有一个名为localhost.localdomain的新主机。新主机已添加到Linux servers组以及Discovered hosts组中,并且已关联上模板。
前端中的主机配置
2
注意
Zabbix支持执行多个动作。尽管如此,仍应牢记一些事情,最重要的事情之一是不可能在同一主机上同时拥有两个具有相同密钥的Item。如果你有两个动作,其有两个或更多不同模板的操作,并且有可能将这两个模板都添加到同一主机上,请确保这些模板不包含重复的Item key。否则,将仅执行其中一项操作,而第二项则不会执行。
另外,主动注册是动态的,因此我已向 Agent配置文件中添加了尽可能多的动态参数。我使用HostnameItem和HostMetadataItem而不是静态Hostname和HostMetadata。默认情况下,每两分钟对前者进行一次重新评估,并将这些值发送到Zabbix服务器。例如,如果发生更改,则更改主机名,并且不再与操作1匹配,而是与操作2匹配,那么所有更改也将自动对主机进行。
3
结论
关于有效的活动 Agent注册,我只想说这些。唯一的限制是要执行此操作,你必须具有 Agent,并且必须支持活动检查,因此必须从 Agent到服务器进行通信。在这种情况下,你可以使用网络发现,但这是另一篇文章的主题。
欢迎关注
Zabbix开源社区
分享更多精彩内容