Zabbix Agent简单自定义插件教程!

准备环境

内容

版本

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 的可执行文件。

 

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

 

其他说明

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 代理的请求。

 

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

 

posted @ 2025-05-07 10:06  乐维_lwops  阅读(58)  评论(0)    收藏  举报