准备环境
内容 | 版本 |
Centos7 | CentOS Linux release 7.9.2009 (Core) |
Golang | go1.24.2 |
Zabbix Agent2 | 6.0.25 |
使用插件执行whoami命令
创建一个 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)
}
}
在 CentOS 7 系统上,使用以下命令来编译 Go 代码:
go build -o whoami_plugin whoami_plugin.go
此命令会生成一个名为 whoami_plugin 的可执行文件。
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
在 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 代理的请求。
后面会带来关于以上两个插件的代码以及使用说明
错误信息