准备环境
内容 版本
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 代理的请求。
后面会带来关于以上两个插件的代码以及使用说明