8 systemd服务的自动发现

概述

通过 Zabbix 可以 discover systemd 单元(服务,默认情况下)。

监控项键

发现规则 中使用的 监控项 是

systemd.unit.discovery

这个 item 键仅在 Zabbix agent 2 中受支持。

这个 监控项 返回一个包含有关 systemd 单元信息的 JSON,例如:

[{
           "{#UNIT.NAME}": "mysqld.service",
           "{#UNIT.DESCRIPTION}": "MySQL Server",
           "{#UNIT.LOADSTATE}": "loaded",
           "{#UNIT.ACTIVESTATE}": "active",
           "{#UNIT.SUBSTATE}": "running",
           "{#UNIT.FOLLOWED}": "",
           "{#UNIT.PATH}": "/org/freedesktop/systemd1/unit/mysqld_2eservice",
           "{#UNIT.JOBID}": 0,
           "{#UNIT.JOBTYPE}": "",
           "{#UNIT.JOBPATH}": "/",
           "{#UNIT.UNITFILESTATE}": "enabled"
       }, {
           "{#UNIT.NAME}": "systemd-journald.socket",
           "{#UNIT.DESCRIPTION}": "Journal Socket",
           "{#UNIT.LOADSTATE}": "loaded",
           "{#UNIT.ACTIVESTATE}": "active",
           "{#UNIT.SUBSTATE}": "running",
           "{#UNIT.FOLLOWED}": "",
           "{#UNIT.PATH}": "/org/freedesktop/systemd1/unit/systemd_2djournald_2esocket",
           "{#UNIT.JOBID}": 0,
           "{#UNIT.JOBTYPE}": "",
           "{#UNIT.JOBPATH}": "/",
           "{#UNIT.UNITFILESTATE}": "enabled"
       }]
已禁用 systemd 单元的发现

也可以发现已禁用的systemd单元。在这种情况下,结果JSON中将返回三个宏:

  • {#UNIT.PATH}
  • {#UNIT.ACTIVESTATE}
  • {#UNIT.UNITFILESTATE}。

要使监控项以及从原型创建的触发器能够针对已禁用的systemd单元生效,请确保调整(或删除)针对{#UNIT.ACTIVESTATE}和{#UNIT.UNITFILESTATE}的LLD过滤器限制。

支持的宏

以下宏支持在发现规则 过滤器 以及监控项、触发器和图形的原型中使用:

描述
{#UNIT.NAME} 主单元名称。
{#UNIT.DESCRIPTION} 人类可读的描述。
{#UNIT.LOADSTATE} 加载状态(即单元file是否已成功加载)
{#UNIT.ACTIVESTATE} 活动状态(即单元当前是否已启动)
{#UNIT.SUBSTATE} 子状态(比活动状态更细粒度的version,具体于单元类型,而活动状态则不是)
{#UNIT.FOLLOWED} 如果有的话,此单元在其状态中所跟随的单元;否则为空string。
{#UNIT.PATH} 单元object路径。
{#UNIT.JOBID} 如果作业单元有排队的作业,则为数字作业ID;否则为0。
{#UNIT.JOBTYPE} 作业类型。
{#UNIT.JOBPATH} 作业object路径。
{#UNIT.UNITFILESTATE} 单元文件的安装状态。

监控项原型

基于 systemd 服务发现可以创建的 监控项原型 包括,例如:

  • 监控项 名称:{#UNIT.DESCRIPTION} active state info;监控项 键:systemd.unit.info["{#UNIT.NAME}"]
  • 监控项 名称:{#UNIT.DESCRIPTION} load state info;监控项 键:systemd.unit.info["{#UNIT.NAME}",LoadState]