专栏首页Zabbix中国官方给你加个buff: Zabbix 6.0 Agent 2 !

给你加个buff: Zabbix 6.0 Agent 2 !

Zabbix agent 2 的开发旨在为用户提供更多附加功能 —— 从支持的采集指标的增加到指标采集逻辑的改进和简化的自定义监控插件的开发。那么在 Zabbix 6.0 LTS 版本中 Zabbix Agent 2 将实现哪些功能?

什么是 Zabbix agent?

首先,我们来谈谈 Zabbix agent 的主要功能以及它如何使监控更加灵活:

  • Zabbix Agent 是一个采集监控指标的守护进程
  • 适用于 Windows 和类 Unix 系统
  • 丰富的开箱即用功能
    • 原生即支持采集大量的操作系统级别的监控指标,例如内存/CPU/存储/文件系统信息等
    • 提供原生的日志监控功能
    • 可扩展
  • 选择 Zabbix server 和 Zabbix agent 的通信方向
    • 通过主动检查将监控指标及数据推送到 Zabbix server 端
    • 通过被动式让 Zabbix server 轮询检查 agent
  • 控制数据采集间隔
    • 支持灵活和调度两种自定义时间间隔。
    • 例如,你可以设置在特定时间或仅在工作时间采集某些指标

为什么选择 Zabbix agent 2?

既然 Zabbix agent 功能已经如此强大,为什么我们还要考虑使用 Zabbix agent2 ?

Zabbix Agent 2 的主要目标是更加灵活便捷地扩展 agent 的指标采集功能。无论对于新的原生 Zabbix agent 2 指标的内部开发还是我们社区完成的自定义 Zabbix agent 2 插件开发都是如此。我们通过在 GO 中开发 Zabbix agent 2 来实现这一目标。GO 语言让我们实现更少的代码、更多的灵活性和更模块化的方法成为可能。

除了上述维度的改进之外,Zabbix agent 2 还能帮助我们解决许多正在进行的设计问题。例如:

  • 主动监控项支持并发检查(而在 agent 中,一次只能采集一个主动检查指标)
  • 支持 agent 端的数据存储持久化
  • 减少 Zabbix agent 2 和 Zabbix server 之间的 TCP 连接数
  • Windows 上的 HTTPS web 检查实现开箱即用
  • 并发性支持提供了并行读取多个日志文件的功能
  • 其他针对许多不同应用的开箱即用的监控方案

接下来我们一起探索 Zabbix agent 2 开箱即用可以监控的比较流行的系统:

证书监控

开箱即用的证书监控功能可以说是用户期待已久的。最常见的需求之一是监控证书的到期日期。Zabbix agent 2 可以直接使用以下原生监控项:

用于证书监控的监控项:

web.certificate.get[hostname,<port>,<IP>]

此监控项将返回:

  • X.509 字段
  • 验证结果"result"字段
  • 指纹"fingerprint"字段

示例:

web.certificate.get[blog.zabbix.com,443]

该监控项返回如下 json 格式的内容:

{
"x509":{
  "version":3,
  "serial_number":"0f5bd7fa1129ddf854e2745a3e8dc788",
  "signature_algorithm":"ECDSA-SHA256",
  "issuer":"CN=Cloudflare Inc ECC CA-3,O=Cloudflare\\, Inc.,C=US",
  "not_before":{
    "value":"Jun 08 00:00:00 2021 GMT",
    "timestamp":1623110400
    },
  "not_after":{
    "value":"Jun 07 23:59:59 2022 GMT",
    "timestamp":1654646399
    },
  "subject":"CN=zabbix.com,O=Cloudflare\\, Inc.,L=San Francisco,ST=California,C=US",
  "public_key_algorithm":"ECDSA",
  "alternative_names":[
    "*.zabbix.com","zabbix.com"
    ]
},
"result":{
  "value":"valid",
  "message":"certificate verified successfully"
  },
"sha1_fingerprint":"e759419726b0599484d75977b5e0c8f6a4fa6728",
"sha256_fingerprint":"0ffeef9b263219decf7db55c32ba65cd59bfe72b83841aa6fb720c830281fe71"
}

此监控项将批量收集多个证书指标。然后我们可以通过使用 Zabbix 依赖监控项 来获取必要的信息。您可以从 git 页面 查看并下载最新的官方模板。模板已经包含必要的 主/依赖 监控项,只需要导入模板并将其应用到主机即可。

最终得到如下监控数据:

物联网监控 – MQTT

Zabbix agent 2 通过 MQTT 和 Modbus 监控项实现了开箱即用的物联网监控。

以下示例展示 mqtt.get 监控项如何获取特定的 MQTT 单元:

mqtt.get["tcp://host:1883","path/to/topic"]

mqtt.get["tcp://host:1883","path/to/#"]

Zabbix agent 2 对 Raspberry Pi 设备的支持也使得物联网监控更加方便。我们可以简单地将 Zabbix agent 2 部署在靠近我们监控的物联网设备的 Raspberry Pi 设备上。

开箱即用的数据库监控

对于 agent,我们不得不借助用户自定义方式例如 UserParameters、外部脚本或其他一些自定义方法进行数据库监控。而通过 agent 2,我们为大量 SQL 和 NoSQL 数据库引擎提供本地数据库监控。

可以在 git 页面 找到完整的官方的 Zabbix 数据库监控模板。

系统监控

另一个期待已久的功能是本机 systemd 监控。Zabbix agent 2 提供了一组灵活的监控项和自动发现规则,您可以使用它们监控特定的 systemd 单元属性,以自动发现方式发现 systemd 服务并批量检索所有 systemd 单元属性。

发现 systemd 单元列表及其详细信息:

systemd.unit.discovery[<type>]

返回如下 json 格式的内容:

检索 systemd 单元的所有属性:

systemd.unit.get[unit name,<interface>]

带入任意一个 systemd 单元名进行测试返回如下 json:

检索有关 systemd 单元的特定属性的信息:

systemd.unit.info[unit name,<property>,<interface>]

带入任意一个 systemd 单元名进行测试返回如下信息:

然后可以使用这些监控项来定义触发器,例如:

  • 如果服务设置了系统开机自启但没有运行,则产生问题
  • 如果服务没有被设置系统开机自启但现在正在运行,请通知我们忘记启用该服务
  • 其他情况

您可以在我们的 git 页面 上找到有关官方 systemd 模板的更多信息。

Docker 监控

与之前的模板一样,Zabbix agent 2 docker 监控还提供了用于容器自动发现的单个指标和发现规则的监控项:

  • 自动发现所有容器或正在运行的容器
  • 对于每个容器提供以下监控
    • CPU
    • Memory
    • Network

可以在官方 git 页面 上获取有关 Docker 模板的更多信息。

应用官方模板获取到的默认监控项示例:

Zabbix agent 2 支持的其他应用

以上还远远不是全部!Zabbix agent 2 同时也为其他许多系统提供开箱即用的监控,例如:

  • Ceph —— 开源软件存储平台
  • Memcached —— 一个通用的分布式内存缓存系统
  • Smart —— 自监控、分析和报告技术

完整的 Zabbix 官方模板可以在 git 页面 上找到。

agent 2 插件

Zabbix agent 2 的底层结构基于 GO 插件。这种方法用于官方 Zabbix agent 2 监控项,并应用于开发自定义社区扩展。

启动时,Zabbix agent 2 扫描特定目录,并确定每个插件支持的接口。接下来,Zabbix 将验证现有的插件配置,并在上述目录中注册每个插件。现在我们可以开始监控工作流程了。一旦请求了一个指标,Zabbix agent 2 将检查负责收集特定指标的插件当前是否处于活动状态。如果它处于非活动状态 —— agent 2 将检查特定插件是否支持 Runner 接口并尝试启动它。接下来,agent 2 将检查 Configurator 接口是否可用并执行插件配置。最后,一旦插件处于活动状态,agent 2 将使用 Exporter 接口收集指标。下次请求该指标时 —— 插件将处于活动状态,agent 2 可以立即从 Exporter 接口请求监控指标数据。

但是有没有一种情况下,插件可以保持不活动状态?也就是说如果插件处在非活动状态,一段时间后它会被卸载吗?该插件不会无限期地加载到内存中。如果一个插件已经 24 小时没有收到请求,插件将被停用,并从内存中卸载。

可加载插件

我们来总结一下 Zabbix agent 2 插件的逻辑:

  • 外部插件可在 Zabbix agent 2 启动时加载,无需重新编译 Zabbix agent 2
  • 在 Linux 上使用 Unix 套接字,在 Windows 上使用命名管道,双向连接插件
  • 向后兼容旧插件
  • 如果出现以下情况,插件将被停用:
    • 24 小时内没有使用任何相关的被动项目密钥
    • 主动类型监控项不在主动检查清单中
  • 自定义插件架构与内部插件相同
  • 有专用于社区插件和集成的独立存储库

agent 2 支持的平台

此时,你可能想知道兼容性如何?我可以使用 Zabbix agent 2 代替 Zabbix agent 吗?可以在同一个平台上使用吗?我们来看一下可以部署 Zabbix agent 2 的平台:

  • RHEL/CentOS 6、7、8
  • SLES 15 SP1+
  • Debian 9、10、11,Ubuntu 18.04、20.04
  • 树莓派操作系统,Ubuntu ARM64
  • Windows 7 及更高版本、Windows Server 2008R2 及更高版本

如果你想在不受官方支持的系统上部署 agent 2,要点是系统需要支持 GO 环境。这意味着要运行 Zabbix agent 2,您必须为 GO 语言支持提供一组依赖。这样就可以编译安装 Zabbix agent 2。

新增的 agent 监控项键值

最后,介绍一些 Zabbix 6.0 LTS 中的新 Zabbix agent 监控项。因为 agent 仍为官方支持,所以 Zabbix agent 和 Zabbix agent 2 都将支持这些监控项。

agent variant

agent.hostmetadata

  • 从 agent 的配置文件中获取 HostMetadata 或者 HostMetadataItem 参数的值,如果没有做配置则返回空值

agent.variant

  • Zabbix agent —— 返回 1
  • Zabbix agent 2 —— 返回 2

文件属性

  • vfs.file.permissions – 返回代表文件 Unix 权限的 4 位字符串
  • vfs.file.owner – 返回文件的用户所有者(可以调整选项来选择返回属主、属组或是 UID、GId 或 Windows 的 SID)
  • vfs.file.get – 返回有关文件的信息。类似于 stat 命令结果
  • vfs.dir.get - 获取有关目录和文件的信息
  • vfs.file.cksum – 文件校验和,通过 UNIX cksum 算法计算。对于 crc32(默认值)返回整数,对于 md5, sha256 返回字符串。当前使用 md5 和 sha256
  • vfs.file.size - 测量文件大小字节或文件中的行

Windows 的 vfs.dir.get

下面是一个适用于大多数 .get 监控项键值说明的示例。在这里,我们可以看到有关 JSON 数组中目录内容的批量信息。然后可以在低级自动发现中使用它来自动监控 vfs.dir.get 监控项获得的每个实体的参数。下面是在 Windows 上执行的 vfs.dir.get 键值的输出示例。请注意,这只是部分输出,真正的 JSON 文件很可能包含与目录中发现的每个文件相关的多个此类元素。

[{
  "basename": "input.json",
  "pathname": "c:\\app1\\temp\\input.json",
  "dirname": "c:\\app1\\temp",
  "type": "file",
  "user": "AKADIKIS-840-G2\\aigars",
  "SID": "S-1-5-21-341453538-698488186-381249278-1001",
  "size": 2506752,
  "time": {
    "access": "2021-11-03T09:19:42.5662347+02:00",
    "modify": "2020-12-21T16:00:46+02:00",
    "change": "2020-12-29T12:20:10.0104822+02:00"
  },
  "timestamp": {
    "access": 1635923982,
    "modify": 1608559246,
    "change": 1609237210
  }
}]

Linux 的 vfs.file.get

我们可以看到, vfs.file.get 的输出也和前面的 get 请求非常相似。正如我之前提到的,这里的信息类似于 stat 命令提供的信息。

{
  "basename": "passwd",
  "pathname": "/etc/passwd",
  "dirname": "/etc",
  "type": "file",
  "user": "root",
  "group": "root",
  "permissions": "0644",
  "uid": 0,
  "gid": 0,
  "size": 3348,
  "time": {
    "access": "2021-11-03T09:27:21+0200",
    "modify": "2021-10-24T13:18:18+0300",
    "change": "2021-10-24T13:18:18+0300"
},
"timestamp": {
    "access": 1635924441,
    "modify": 1635070698,
    "change": 1635070698
  }
}

自动发现键值的更多维度

Zabbix 6.0 LTS 中一些现有监控项键值的功能也得到了改进。例如,对于 vfs.fs.discovery 和 vfs.fs.get,新版本 Zabbix 将收集文件系统标签作为 {#FSLABEL} 宏的值。

vfs.fs.discovery

  • 将检索一个附加标签值 – {#FSLABEL}

vfs.fs.get

  • 将检索一个附加标签值 – {#FSLABEL}
[{
  "{#FSNAME}": "C:",
  "{#FSTYPE}": "NTFS",
  "{#FSLABEL}": "System",
  "{#FSDRIVETYPE}": "fixed"
}]

Q&A

Q:可以同时运行 Zabbix Agent 和 Zabbix Agent 2 吗?

A:两个 agent 可以同时在一台机器上运行。但是需要调整其中一个 agent 的监听端口,因为默认情况下,它们都将尝试监听 10050。因此,我们需要将其中一个 agent 切换为其他端口。也可以简单地禁用其中一个 agent 的被动检查功能,使之不会监听传入的连接。

Q:没有管理员权限可以运行 Zabbix agent 吗?

A:当然。可以使用 Windows 和 Linux 的任何用户运行 agent。只需确保用户有权访问 Zabbix agent 需要监控的信息(例如日志、文件、文件夹等)。

Q:有没有 Zabbix agent 优于 Zabbix agent 2 的范例?

A:首先,Zabbix agent 的二进制文件更轻,这是一个优势;另外,Zabbix agent 2 依赖复杂的 GO 语言环境,如果不能为 Zabbix agent 2 提供必要的 GO 依赖项,那么选择 Zabbix agent 自然更合适;此外,如果使用某种自动化或编排工具来部署 Zabbix agent,使用相同类型的 agent 实现起来更加容易。

文章分享自微信公众号:
Zabbix开源社区

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!

作者:Zabbix开源社区
原始发表时间:2022-03-09
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • Zabbix 随笔:Zabbix 6.0 LTS 安装

    Zabbix 6.0 LTS 于近期发布了,带来了许多企业级特性,那么在安装上有什么区别呢?本文将探索 6.0 的安装过程。

    IT小白Kasar
  • 预告!Zabbix6.0 十大新功能详解!

    Zabbix 6.0 LTS 包含许多新的企业级功能和改进。加入 Artūrs Lontons,了解 Zabbix 6.0 LTS 发布后将要提供的一些主要功能...

    Zabbix
  • Zabbix6.0支持K8S、高可用HA、定制前端logo等,为DevOps助力!

    Zabbix版本不断升级,以满足日益增长的用户需求,支持高可用HA,k8s、指标topN、机器学习、定制前端品牌logo等!

    Zabbix
  • 已发布!Zabbix 6.0 为BSM、DevOps、ITOps助力!

    通过对现有Services页面和功能的重大改进和优化,业务服务监控提升到了一个新高度。业务服务监控功能(BSM)非常适合多组件服务场景,例如服务器群集、负载平衡...

    Zabbix
  • 云服务器上升级Zabbix6.0,内网的服务器安装Agent,配置为主动模式

    在云服务器上部署了Zabbix5.4,用来监测客户的防火墙、路由器、服务器,效果还不错,至少路由器哪条宽带掉线了,我能第一时间收到邮件;哪个客户的服务器上,某个...

    IT狂人日志
  • 来了,Zabbix 6.0原生HA高可用抢先体验!

    日前,Zabbix发布了6.0.0Beta1版本,笔者也是第一时间下载部署。Zabbix 6.0最受期待的一项新功能便是原生支持了HA集群高可用。

    Zabbix
  • Zabbix6.0 TLS : Ubuntu 20.04 安装(一)

    2022年2月15日期待已久的Zabbix6.0 LTS 版本正式发布,从Zabbix5.0 LTS 到 6.0 LTS 发布超过645天。可以看出新版本在高可...

    Kevin song
  • 五分钟带你玩转Zabbix6.0容器化HA集群

    万众瞩目的Zabbix6.0 LTS发布在即,官网同步开放了Beta版支持多种部署方式供大家尝鲜。

    Zabbix
  • Debian11,Ubuntu20.04安装zabbix6.0解决中文乱码问题

    【摘要】 Debian11,Ubuntu20.04安装zabbix6.0解决中文乱码问题

    玖柒的小窝
  • Centos8,Debian11,Ubuntu20.04-amd64安装zabbix6.0-mariadb-Apache

    华为开源镜像站http://mirrors.huaweicloud.com/centos/8.3.2011/isos/x86_64/

    TX-QGS
  • Zabbix 随笔:Zabbix 6.0 LTS 发布

    近期预热已久的 Zabbix 6.0 LTS 终于问世,那么快速了解下新版本的一些功能,看是否值得升级。

    IT小白Kasar
  • Zabbix 6.0 TimescaleDB 安装配置

    Zabbix 6.0目前已发布beta1版本,包含众多新功能和新特性,本文主要介绍Zabbix 6.0 配置TimescaleDB,此安装配置方法可基本通用与其...

    Zabbix
  • Ansible 批量部署 zabbix-agent

    ansible基于python开发,集合了众多优秀运维工具的优点,实现了批量运行命令、部署程序、配置系统等功能。默认通过SSH协议进行远程命令执...

    Kevin song
  • CentOS7一键安装Zabbix Agent 6.0并实现自动注册

    手动添加Zabbix客户端非常耗时间,增加人力、时间成本。为了满足监控企业成千上万台服务器,zabbix提供了自动发现与自动注册的功能,自动批量发现局域网中的服...

    yuanfan2012
  • Ansible 批量部署 zabbix-agent

    ansible基于python开发,集合了众多优秀运维工具的优点,实现了批量运行命令、部署程序、配置系统等功能。默认通过SSH协议进行远程命令执行...

    用户6641876
  • 一步一步教您如何在 CentOS 8 上安装 Zabbix 6.0或者6.2

    Zabbix 服务器可安装在任何 Linux 发行版上,在本教程中,我将向您展示如何在 CentOS 8 / RHEL 8 / Oracle Linux 8 /...

    网络技术联盟站
  • Zabbix 随笔:安装篇(一)

    Zabbix([`zæbiks])是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。

    IT小白Kasar
  • 如何使用Zabbix官方模板轻松实现Docker容器监控?

    本文将介绍通过Zabbix监控Docker容器。使用官方模板 Docker by Zabbix agent2 template 很容易实现Docker容器监控。...

    Zabbix
  • CentOS8.5下安装部署开源监控系统Zabbix 6.0LTS

    CentOS7下Zabbix5.0+PostgreSQL12+TimescaleDB部署实践

    yuanfan2012

扫码关注腾讯云开发者

领取腾讯云代金券