百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

给你加个buff: Zabbix 6.0 Agent 2

nanshan 2025-02-28 16:45 11 浏览 0 评论

张瑾瑾 | 宏时数据技术工程师

  • Zabbix5.0、6.0中文手册官方译者

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


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,,]

此监控项将返回:

  • 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[]

返回如下 json 格式的内容:

检索 systemd 单元的所有属性:

systemd.unit.get[unit name,]

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

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

systemd.unit.info[unit name,,]

带入任意一个 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 实现起来更加容易。

相关推荐

提升网络安全 cisco asa5512-k8防火墙促

(中关村在线网络安全行情)ciscoasa5512-k8为标准下一代防火墙,能够为中小型网络提供出色的安全防护和流量管控服务。最近这款防火墙设备在京东商城的促销价格为14299元,有需要的用户可以关注...

太一星晨:负载均衡性能参数如何测评?

海外网2014-08-0816:03:568月6日消息,当前,在云计算和大数据为主导的需求环境下,负载均衡和应用交付已为大型企业数据中心“保驾护航”的必备品。不过,负载均衡作为一种比较“新奇”的设备...

Nginx架构揭秘:如何用5大核心机制扛住百万级并发

1.灵魂拷问:为什么全球Top1000网站中65%选择Nginx?17Nginx不仅是Web服务器,更是高并发架构的核武器。其单机支持10万+并发连接的秘密,源于三大设计哲学:事件驱动模型:非阻塞...

高并发场景下,Nginx性能如何提升10倍?

大家好,我是mikechen。在高并发场景,Nginx是流量入口的第一道防线,如果想拦截亿级流量,需要Nginx合理调优才能应对@mikechen。本文作者:陈睿|mikechen文章来源:mike...

紧急避坑!数据库突现数十GB临时文件?原因与根治方案揭秘

引言:某天深夜,运维小王突然收到磁盘爆满的告警,追踪发现Kingbase数据库的syssql_tmp目录竟堆积了数十GB的临时文件!这些神秘文件为何产生?会引发哪些风险?如何彻底根治?本文将带你深入探...

互联网大厂后端必看!3 步搞定 Nginx IP 限流,服务器扛住百万流量

作为互联网大厂的后端开发人员,你是否曾遇到过这样的场景:服务器突然涌入大量请求,服务响应速度急剧下降,甚至出现崩溃?这时候,Nginx的IP访问限流策略就显得尤为重要。然而,不少开发者在配置N...

MySQL max_connections 达到最大值 – 我们如何解决它

您的网站是否显示MySQLmax_connections达到最大限制错误?通常,当我们尝试连接到MySQL服务器时,MySQLmax_connections值不足会导致“Tooma...

Nginx百万并发背后技术揭秘!(nginx并发能力是多少)

在互联网业务高速发展的今天,用户访问量呈指数级增长,服务器面临的并发压力也越来越大。一个高并发的网站,如果处理不当,可能会出现请求超时、服务器宕机、用户体验下降等问题。Nginx作为当前最流行的高性...

Nginx底层原理:一文解析Nginx为什么并发数可以达到3w!

Nginx以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。本文从底层原理分析Nginx为什么这么快!Nginx的进程模型Nginx服务器,正常运行过程中:多进程:一个Mast...

Nginx合集-并发连接能力优化(nginx高并发调优)

一、前言nginx服务器老是报告TIME_WAIT告警,ESTABLISHED告警,检查nginx配置和系统网络配置发现现有的配置并发能力太弱,无法满足现有的并发请求的需求。二、解决方法改进方法...

开源OS上安装Gnome Flashback经典桌面

1安装GnomeFlashback对于用户来说,相比Unity桌面,GnomeFlashback桌面环境是一个简单的并且不错的选择,可以让你找回过去经典的桌面。GnomeFlashback基于G...

新手篇 — 虚拟机系统的使用与常见问题

本文章会详细介绍虚拟机系统的使用与常见问题,有很多读者都会遇到这样的情况,软件装不上,自己的电脑中软件很多,又不想换电脑系统,那么虚拟机可以帮你解决这个烦恼,由于文章内容写的比较详细,内容会比较多,可...

VMware虚拟机与主机之间无法复制粘贴解决

问题:VMware安装系统后发现无法直接与主机之间进行复制粘贴了,怎么办?解决办法:按照以下3步进行1、设置中客户机隔离检查2、重新安装VMwareTools3、重启电脑...

实现VMware虚拟机与物理主机共享文件夹

在安装虚拟机之后,难免会遇到需要将文件从主机拷到虚拟机当中,但是很尴尬的事情就是不能直接将文件从主机拖到虚拟机中,所以只能借助U盘,但是频繁的插拔U盘非常的繁琐。为了解决这一需求,就可以将物理主机和...

在 Windows 11 或 10 上安装 Virt-viewer 的单行命令

Virt-Viewer(或RemoteViewer)是Redhat提供的一个开源程序,允许用户控制和查看运行在本地或远程服务器上的虚拟机。它体积轻巧,并提供了一个简单的图形用户界面来访问由L...

取消回复欢迎 发表评论: