感谢译者张金龙,欢迎更多资深用户翻译官方博文并分享!

图片
张金龙 | 宏时数据技术工程师

Zabbix Agent 2可以让我们通过最少的配置来监控一整套新系统。不需要再编写自定义监控脚本、部署额外的包或配置ODBC了。Zabbix Agent 2的一个很好的用例是监控最流行的NoSQL数据库后端之一的MongoDB。本文分享该用例的详细描述和操作指南。

1.MongoDB监控模板
对于本例将使用Zabbix 5.4版本,不过"MongoDB monitoring by Zabbix Agent 2"模板从5.0版本就开始支持。如果你有Zabbix 5.0或更新版本的部署,你可以在"Configuration" – "Templates"部分找到MongoDB模板。

图片

MongoDB节点和集群模板
另一方面,如果你在Zabbix 5.0发布之前部署了一个版本,然后升级到Zabbix 5.0或更高版本,那么必须从我们的git页面手动导入模板。注意,Zabbix在升级期间不会应用新模板或修改现有模板。因此,新发布的模板必须手动导入!

可以看到这里有两个MongoDB模板:“MongoDB cluster by Zabbix Agent 2"和"MongoDB node by Zabbix Agent 2”。根据你的MongoDB设置-单独的节点或集群,应用对应的模板。请注意MongoDB集群模板可以自动为你的配置服务器和分片创建主机,并将MongoDB节点模板应用到这些主机上。

图片

配置服务器和分片的主机原型
2.在主机上部署Zabbix Agent 2
由于数据收集是由Zabbix Agent 2完成的,首先,需要在MongoDB节点或集群主机上部署Zabbix Agent 2。添加Zabbix 5.4存储库,并通过包安装Zabbix Agent 2。

添加Zabbix 5.4存储库:

rpm -Uvh https://repo.zabbix.com/zabbix/5.4/rhel/8/x86_64/zabbix-release-5.4-1.el8.noarch.rpm

安装Zabbix Agent 2:

yum install zabbix-agent2

如果你已经在这台机器上运行了常规Zabbix Agent,该怎么办?

在这种情况下,我们有两种方法解决。

方法一,可以简单地删除常规的Zabbix Agent并部署Zabbix Agent 2。要使用这种方法,请确保备份了Zabbix Agent配置文件,并将所有更改迁移到Zabbix Agent 2配置文件。

方法二,并行运行两个Zabbix Agent。要使用这种方法,需要确保两个Agent—Zabbix Agent和Zabbix Agent 2都在监听它们自己的特定端口,因为在默认情况下,两个agent都在监听端口10050上的连接。这可以通过在Zabbix Agent配置文件中更改“ListenPort”参数来使用不同的端口。

不要忘记在Zabbix Agent 2配置文件中指定“Server”参数。这个参数应该包含Zabbix服务器地址或DNS名称。通过配置它,您将允许Zabbix Agent 2接受来自Zabbix Server的指标轮询请求。

在Zabbix Agent2配置文件中进行配置更改后,不要忘记重新启动Zabbix Agent 2以应用更改:

systemctl restart zabbix-agent2

3.创建用于监控的MongoDB用户
部署和配置Agent之后,您需要确保拥有一个MongoDB数据库用户,将其用于监控。下面是一个创建MongoDB用户的简单例子:

连接MongoDB:

mongosh

切换到MongoDB admin数据库:

use admin

创建一个具有"userAdminAnyDatabase"权限的用户:

db.createUser(
... {
..... user: "zabbix_mon",
..... pwd: "zabbix_mon",
..... roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
..... }
... )

新创建用户的用户名为"zabbix_mon"。密码也是"zabbix_mon",请根据您的安全策略随意更改这些。

4.创建并配置MongoDB主机
接下来,需要打开Zabbix前端并创建一个表示MongoDB节点的新主机。你可以在本例中看到,我们将主机节点称为"MongoDB",并把它分配给一个"MongoDB Servers"主机组。您可以在生产环境中使用更详细的命名,并使用您自己的主机组分配逻辑。但是请记住,一个主机至少需要属于一个主机组!

因为指标是由Zabbix Agent 2收集的,所以还必须在主机上创建一个Agent接口。Zabbix Server将连接到该接口,并从Zabbix Agent 2请求指标。然后定义您的MongoDB监控主机的IP地址或DNS名称。注意端口,在默认情况下,在这里定义了端口10050,但是如果您修改了Zabbix Agent 2配置文件中的“ListenPort”参数,并将其值从默认值(10050)更改为其他值,那么你也需要在这里使用相同的端口号。

图片

MongoDB主机配置示例
下一步,导航到"Templates"选项卡,并分配相应的模板-"MongoDB node by Zabbix agent 2"或‘MongoDB cluster by Zabbix agent 2’。在本例中,我们将分配MongoDB node模板。

在添加主机之前,你还需要通过编辑相应的用户宏来提供身份验证和连接参数。这些用户宏被收集指标的监控项使用。本质上,将连接和身份验证信息转发给Zabbix Agent 2,告诉它在从MongoDB实例收集指标时使用这些值。

通过在主机配置中导航到"Macros"选项卡。然后选择" Inherited and host macros"来显示从MongoDB模板继承的宏。

可以在这里看到很多宏,其中一些是与触发阈值和自动发现过滤器相关的,但现在感兴趣的是下面这些宏:

{KaTeX parse error: Expected 'EOF', got '}' at position 17: …ONGODB.PASSWORD}̲:MongoDB的用户名。对于…MONGODB.USER}:MongoDB的密码。对于我们的示例,我们将其设置为"zabbix_mon"
${MONGODB.CONNSTRING}:MongoDB连接字符串。在这里指定Zabbix Agent 2应该连接并执行指标收集的MongoDB地址和端口
现在,开始添加主机。添加主机之后,可能需要等待一分钟左右,然后Zabbix才开始监控主机。这是因为Zabbix Server不会立即接收配置更改。默认情况下,Zabbix服务器每分钟更新一次配置缓存。

5.微调MongoDB监控
此时,应该看到MongoDB主机旁边有一个绿色的ZBX图标。

图片

MongoDB主机上的数据收集已经开始——注意绿色的“ZBX”图标。
这表示Zabbix Server已经成功连接到我们的Zabbix Agent 2,并且指标收集已经开始。你可以导航到"Monitoring"-"Latest data"部分,筛选出你的MongoDB主机的数据信息,你在这里可以看到收集的所有指标。

图片

MongoDB指标在"Monitoring"-“Latest data"找到
最后一项任务是对主机上的MongoDB监控进行调优,只收集所需的指标。导航到"Configuration”-“Hosts”,找到你的MongoDB主机,并通过主机上不同的实体类型-监控项,触发器,自动发现规则(LLD)。可以随意禁用您不希望收集数据的指标,以及更改自动发现规则的更新间隔或禁用不需要的发现规则。

注意:不要禁用主监控项。很多监控项和自动发现规则(LLD)都是"Dependent item"类型,这意味着它们需要依赖一个"Master item"。

还记得主机配置中的"Macros"部分吗?让我们回到那里,可以看到宏可以用于触发器的阈值,例如:

{KaTeX parse error: Expected 'EOF', got '}' at position 26: …PL.LAG.MAX.WARN}̲:最大复制延迟(以秒为单位) …MONGODB.CURSOR.OPEN.MAX.WARN}:打开游标的最大数量
你可以根据问题阈值需求随意更改这些值。

还有也可以过滤发现规则发现的元素,这也可以由用户宏定义。例如:

{KaTeX parse error: Expected 'EOF', got '}' at position 30: …LTER.DB.MATCHES}̲:应该被发现的数据库(默认情况…MONGODB.LLD.FILTER.DB.NOT_MATCHES}:应该从发现中排除的数据库
最后,在进行了一些调优之后,就可以开始监控了。MongoDB实例正在被发现,指标正在被收集,问题阈值也已经被定义。所有这些都是通过本地Zabbix Agent 2功能和一个开箱即用的MongoDB模板完成的!