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

给你加个buff: Zabbix 6.0 Agent 2

nanshan 2025-02-28 16:45 9 浏览 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 实现起来更加容易。

相关推荐

ssh终端xshell日志查看命令(xshell怎么看日志)

现在我们云服务器运维较多用的是SSH工具,其中常用的包括PUTTY、XSHELL等,其实大同小异界面UI稍微不同,但是都可以进入远程连接。这里有朋友提到如何查看服务器的日志文件,这个其实和是否使用XS...

使用 Fail Ban 日志分析 SSH 攻击行为

通过分析`fail2ban`日志可以识别和应对SSH暴力破解等攻击行为。以下是详细的操作流程和关键分析方法:---###**一、Fail2ban日志位置**Fail2ban的日志路径因系统配置...

如何高效读取Linux日志文件?这些命令要熟记于心!

在Linux系统中,日志文件通常存储在/var/log目录下。比如,/var/log/syslog(或/var/log/messages,视发行版而定)记录系统整体事件,/var/log/a...

Windows服务器远程登录日志查询方法,linux查看登录日志方法

概述本文介绍Windows、Linux服务器查询系统的远程登录日志方法。根据服务器所使用的操作系统不同,有以下两种查询方法。Linux操作系统的登录日志查询通过远程连接登录Linux服务器,使用roo...

iptables防火墙如何记录日志(防火墙日志查看)

例如:记录所有ssh服务的登录的日志首先,我们需要了解如何将所有的iptables的INPUT链数据包记录到/var/log/messages中。如果你已经有一些iptables规则了,那么将记录日志...

如何安全管理SSH密钥以防止服务器被入侵

SSH密钥安全管理实施指南(2025年更新版)一、密钥生成与存储规范高强度密钥生成bashCopyCodessh-keygen-ted25519-a100#生成ED25519算法密钥(比...

在CentOS上安装nginx服务器(centos搭建代理服务器)

一、环境描述1.虚拟机配置CPU:单核内存:2GB硬盘:120GBIP:10.24.17.1082.操作系统版本:CentOS6.6x86_64安装方式:Minimal3.虚拟化环境VM...

CentOS7安全加固的一份整理规划建议

◆更新系统:及时更新CentOS7操作系统版本和安全补丁,确保系统以最新状态运行。◆关闭不必要的服务:在运行系统时,应关闭不需要的服务和端口,以减少系统暴露的攻击面。◆安装防火墙:使用iptables...

第四十七天-二叉树,centOS安装tomcat,Maven,vsftpd

学习笔记:1.Maven是Apache下的一个纯Java开发的开源项目。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。Maven...

Linux远程桌面连接使用教程 Widows终端远程连接Linux服务器

一、前言为什么不是远程连接Linux服务器?因为我不会,远程连接window我就用电脑自带的“远程桌面连接”。以下所述都是在CentOS操作系统下的。服务器刚换成Linux的时候很迷茫,感觉无从下手...

CentOS 安全加固操作,保护你的操作系统

系统加固是保障系统安全的重要手段,对于维护企业数据安全、用户隐私以及系统稳定运行具有重要意义。加固后的系统更加健壮和稳定,能够有效减少因安全问题导致的系统故障和停机时间,提高系统的可用性和可靠性。通过...

Dockerfile部署Java项目(docker如何部署java项目)

1、概述本文主要会简单介绍什么是Docker,什么是Dockerfile,如何安装Docker,Dockerfile如何编写,如何通过Dockerfile安装jar包并外置yaml文件以及如何通过do...

CentOS7云主机部署Fail2ban阻断SSH暴力破解

关于Fail2banFail2ban可以监视你的系统日志,然后匹配日志的错误信息(正则式匹配)执行相应的屏蔽动作(一般情况下是调用防火墙屏蔽)例如:当有人在试探你的HTTP、SSH、SMTP、FTP密...

在CentOS7上用源码编译安装PostgreSQL

1、新建postgres用户#useraddpostgres&&passwdpostgres2、安装依赖包#yum-yinstallmakegccgcc-c++readline...

pure-ftpd 使用(ftp prompt命令)

pure-ftpd是一个免费的ftp软件,其他介绍就不多说了。我们直接开始主题安装centosyuminstallepel-releaseyuminstallpure-ftpd配置备份原配置...

取消回复欢迎 发表评论: