Zabbix 监控扩展实战:Zabbix Agent 2 自定义插件开发指南

在分布式监控系统中,Zabbix Agent 2 的灵活扩展能力为自定义监控需求提供了强大支持。本文以 CentOS 7 环境为例,详细讲解如何通过 Golang 开发一个简单的 whoami 命令插件,涵盖代码编写、编译部署、Agent 配置及验证全流程。同时解析 Zabbix 官方插件开发包(plugin-support)的核心功能,帮助开发者快速上手插件开发,为后续复杂监控场景的实现奠定基础。无论是初学者还是进阶用户,均可通过本指南掌握 Zabbix 自定义插件的关键实践技巧。

准备环境

内容 版本
Centos7 CentOS Linux release 7.9.2009 (Core)
Golang go1.24.2
Zabbix Agent2 6.0.25

内容

使用插件执行whoami命令

具体步骤

1. 编写 Go 代码

创建一个 Go 文件,例如 whoami_plugin.go,并在其中编写代码。此代码会执行 whoami 命令,然后将结果返回。

package main

import (
    "bufio"
    "bytes"
    "log"
    "os/exec"
)
func main() {
    // 创建一个执行 whoami 命令的对象
    cmd := exec.Command("whoami")
    // 用于存储命令执行结果的缓冲区
    var out bytes.Buffer
    cmd.Stdout = &out
    // 执行命令并捕获错误
    err := cmd.Run()
    if err != nil {
        log.Fatalf("执行 whoami 命令时出错: %v", err)
    }
    // 创建一个扫描器来读取命令输出
    scanner := bufio.NewScanner(&out)
    for scanner.Scan() {
        // 输出命令执行结果
        println(scanner.Text())
    }
    // 检查扫描过程中是否有错误
    if err := scanner.Err(); err != nil {
        log.Fatalf("读取 whoami 命令输出时出错: %v", err)
    }
}

2. 编译代码

在 CentOS 7 系统上,使用以下命令来编译 Go 代码:

go build -o whoami_plugin whoami_plugin.go

此命令会生成一个名为 whoami_plugin 的可执行文件。

xT722A8t68253cfcef02f.png

3. 配置 Zabbix Agent

3.1 创建自定义配置文件

在 /itops/zabbix/etc/zabbix_agentd.conf.d/(视实际目录为准) 目录下创建一个新的配置文件,例如 whoami_plugin.conf:

touch /itops/zabbix/etc/zabbix_agentd.conf.d/whoami_plugin.conf

3.2 编辑配置文件

在 whoami_plugin.conf 文件中添加以下内容:

UserParameter=whoami.command,/home/itops/test/whoami_plugin

这里的 /home/itops/test 要替换为实际生成的 whoami_plugin 可执行文件的路径。

3.3 重启 Zabbix Agent

完成配置文件的编辑后,重启 Zabbix Agent 服务,使配置生效:

systemctl restart zabbix-agent

4. 验证插件

在 Zabbix Server 上,使用 zabbix_get 工具来验证插件是否正常工作:

/itops/zabbix/bin/zabbix_get -s 127.0.0.1 -k whoami.command

BiKfDJG168253d4ebfd71.png

其他说明

Zabbix Agent2中需要注意zabbix官方提供的两个插件内容:

git.zabbix.com/ap/plugin-support/plugin

这个包提供了 Zabbix 插件开发所需的基础接口和结构体,在代码里有以下用途:

定义插件基础结构:type Plugin struct { plugin.Base } 借助 plugin.Base 结构体,让自定义的 Plugin 类型能继承 Zabbix 插件的基础属性和方法。

注册监控指标:plugin.RegisterMetrics 函数用于把自定义的监控指标注册到 Zabbix 代理,这样 Zabbix 代理就能识别并请求这些指标。

实现导出方法:(p *Plugin) Export 方法实现了 plugin.Exporter 接口里的 Export 方法,用来处理 Zabbix 代理发送的监控指标请求。

git.zabbix.com/ap/plugin-support/plugin/container

此包提供了管理 Zabbix 插件的容器功能,在代码里的作用如下:

创建插件处理器:container.NewHandler(impl.Name()) 函数依据插件名称创建一个新的插件处理器实例,这个处理器负责处理插件的初始化、生命周期管理等操作。

执行插件逻辑:h.Execute() 方法启动插件,让插件能处理来自 Zabbix 代理的请求。

后面会带来关于以上两个插件的代码以及使用说明

0 条评论

请先 登录 后评论
乐维君
乐维君

448 篇文章

作家榜 »

  1. 乐维君 448 文章
  2. YOHOHO 14 文章
  3. 机灵小和尚 13 文章
  4. 细雨闲花 12 文章
  5. 我是一只小菜鸡 12 文章
  6. 。。。 9 文章
  7. 御前侍卫张五哥 9 文章
  8. 小黄人 8 文章