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

准备环境

内容          版本

Centos7     CentOS Linux release 7.9.2009 (Core)

Golang           go1.24.2

ZabbixAgent2    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插件开发所需的基础接口和结构体,在代码里有以下用途:

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

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

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

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

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

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

[if !supportLists]l [endif]执行插件逻辑:h.Execute()方法启动插件,让插件能处理来自 Zabbix 代理的请求。

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容