14 插件

插件扩展了Zabbix监控功能。这些插件是用Go编程语言编写的,只支持Zabbix agent2。它们提供了 可加载模块(用C编写)和其它扩展Zabbix功能的方法,例如 用户参数(agent指标),外部检查(无agent监控)和system.run[] Zabbix agent监控项

以下是agent2及其插件功能:

  • 单个配置文件(所有插件配置参数与agent本身的参数位于同一个文件中);

  • 基于调度和任务并发的任务队列管理;

  • 插件级超时。

开箱即用的插件

所有支持Zabbix agent2的指标都由插件收集。以下是Zabbix agent2可直接使用插件:

插件名称描述支持监控项备注
AgentZabbix agent使用的监控项。agent.hostname, agent.ping, agent.version与Zabbix agent支持的参数keys相同。
Ceph监控Ceph。ceph.df.details, ceph.osd.stats, ceph.osd.discovery, ceph.osd.dump,
ceph.ping, ceph.pool.discovery, ceph.status
支持的keys 仅能用于Zabbix agent2。
CPU监控系统CPU (number of CPUs/CPU cores, discovered CPUs, utilization percentage)。system.cpu.discovery, system.cpu.num, system.cpu.util与Zabbix agent支持的参数 keys相同。
Docker监控Docker容器。docker.container_info, docker.container_stats, docker.containers, docker.containers.discovery,
docker.data_usage, docker.images, docker.images.discovery, docker.info, docker.ping
可使用App Docker监控模版。

支持的 keys 仅能用于Zabbix agent2。
File文件属性信息搜集。vfs.file.cksum, vfs.file.contents, vfs.file.exists, vfs.file.md5sum,
vfs.file.regexp, vfs.file.regmatch, vfs.file.size, vfs.file.time
与Zabbix agent支持的参数 keys相同。
Kernel监控内核。kernel.maxfiles, kernel.maxproc与Zabbix agent支持的参数 keys相同。
Log监控日志文件。log, log.count, logrt, logrt.count与Zabbix agent支持的参数 keys相同。
Memcached监控缓存服务器。memcached.ping, memchached.stats可使用App Memchached监控模版。

支持的 keys 仅能用于Zabbix agent2。
MySQL监控MySQL数据库及其相关内容。mysql.db.discovery, mysql.db.size, mysql.get_status_variables,
mysql.ping, mysql.replication.discovery, mysql.replication.get_slave_status, mysql.version
可以使用DB MySQL by Zabbix agent 2监控模版。

支持的keys 仅能用于Zabbix agent2。

默认配置: URI=tcp://localhost:3306, username=root, password= .
NetIf监控网络接口。net.if.collisions, net.if.discovery, net.if.in, net.if.out, net.if.total与Zabbix agent支持的参数 keys相同。
Oracle监控Oracle数据库。oracle.diskgroups.stats, oracle.diskgroups.discovery, oracle.archive.info, oracle.archive.discovery,
oracle.cdb.info, oracle.custom.query, oracle.datafiles.stats, oracle.db.discovery,
oracle.fra.stats, oracle.instance.info, oracle.pdb.info, oracle.pdb.discovery,
oracle.pga.stats, oracle.ping, oracle.proc.stats, oracle.redolog.info,
oracle.sga.stats, oracle.sessions.stats, oracle.sys.metrics, oracle.sys.params,
oracle.ts.stats, oracle.ts.discovery, oracle.user.info
仅适用于Zabbix Agent2 可以使用监控模版。

在使用插件之前安装 Oracle Instant Client

支持的 keys仅能用于Zabbix agent2 。

默认配置: URI=tcp://localhost:1521, service=XE (service name)。

插件的功能可以通过自定义用户定义的查询进行扩展 - 参见配置样例 插件文档
PostgreSQL监控PostgreSQL及其相关内容。pgsql.ping, pgsql.db.discovery, pgsql.db.size, pgsql.db.age, pgsql.database.bloating_tables,
pgsql.replication_lag.sec, pgsql.replication_lag.b, pgsql.replication.count, pgsql.replication.status, pgsql.replication.recovery_role,
pgsql.cache.hit, pgsql.connections, pgsql.archive, pgsql.bgwriter, pgsql.dbstat.sum, pgsql.dbstat,
pgsql.wal.stat, pgsql.locks, pgsql.pgsql.oldest.xid, pgsql.uptime
仅能用于Zabbix agent2 可以使用监控模版。

支持的 keys 仅能用于Zabbix agent2。
Proc监控CPU使用率。proc.cpu.util与Zabbix agent支持的参数 key相同。
Redis监控Redis服务器。redis.config, redis.info, redis.ping, redis.slowlog.count可以使用DB Redis监控模版.

支持的 keys 仅能用于Zabbix agent2。
Swap交换空间大小/比率。system.swap.size支持Zabbix 5.0.5及其以上版本.
与Zabbix agent支持的参数 key相同。
SystemRun执行特定的命令。system.run与Zabbix agent支持的参数 key相同。
Systemd监控系统服务。systemd.unit.discovery, systemd.unit.get, systemd.unit.info支持的 keys 仅能用于Zabbix agent2。
TCPTCP连通性检测。net.tcp.port与Zabbix agent支持的参数 key相同。
UDP监控UDP服务及其性能。net.udp.service, net.udp.service.perf与Zabbix agent支持的参数 keys相同。
Uname查询系统信息。system.hostname, system.sw.arch, system.uname与Zabbix agent支持的参数 keys相同。
Uptime系统指标信息搜集。system.uptime与Zabbix agent支持的参数 key相同。
VFSDev虚拟文件系统设备指标搜集。vfs.dev.discovery, vfs.dev.read, vfs.dev.write与Zabbix agent支持的参数 keys相同。
WebWeb页面监控。web.page.get, web.page.perf, web.page.regexp与Zabbix agent支持的参数 keys相同。
ZabbixAsync异步指标搜集。net.tcp.listen, net.udp.listen, sensor, system.boottime, system.cpu.intr, system.cpu.load,
system.cpu.switches, system.hw.cpu, system.hw.macaddr, system.localtime, system.sw.os,
system.swap.in, system.swap.out, vfs.fs.discovery
与Zabbix agent支持的参数 keys相同。
ZabbixStatsZabbix server/proxy内部指标或者队列延迟数量统计。zabbix.stats与Zabbix agent支持的参数 keys相同。
ZabbixSync同步指标搜集。net.dns, net.dns.record, net.tcp.service, net.tcp.service.perf, proc.mem,
proc.num, system.hw.chassis, system.hw.devices, system.sw.packages,
system.users.num, vfs.dir.count, vfs.dir.size, vfs.fs.get, vfs.fs.inode,
vfs.fs.size, vm.memory.size
与Zabbix agent支持的参数 keys相同。

配置插件

本节介绍了常见的配置原则和最佳实践。

有关插件配置的具体示例,请参见:

所有插件都是使用Zabbix agent2的plugins.*参数配置文件配置的。与其它agent参数不同,它不是参数的键/值类型。它是一个单独的部分,可以描述插件的特定参数。每个参数应具有以下结构:

Plugins.<PluginName>.<Parameter>=<Value>

参数名称应符合以下要求:

  • 建议将插件的名称大写;

  • 参数应大写;

  • 不允许使用特殊字符;

  • 嵌套不受最大级别的限制;

  • 参数的数量不受限制。

命名会话

命名会话表示插件参数的附加级别,可用于为每个被监视的实例定义单独的身份验证参数集。每个命名会话参数应具有以下结构:

Plugins.<PluginName>.<SessionName>.<Parameter>=<Value>

会话名称可以用作connString密钥参数项,而不是单独特定的URI、用户名和密码。

请注意:

  • 在密钥参数中提供connString(会话名称)时,用户名和密码的密钥参数应为空;

  • 不支持传递嵌入式URI凭据,请考虑改用命名会话;

  • 命名会话中仅支持以下参数:Plugins.<PluginName><SessionName>.UriPlugins.<PluginName><SessionName>.UserPlugins.<PluginName><SessionName>.Password

  • 如果未为命名会话指定身份验证参数,则将使用硬编码的默认值。

示例: 对“MySQL1”和“MySQL2”两个实例的监控可以按以下方式配置:

  1. Plugins.Mysql.Sessions.MySQL1.Uri=tcp://127.0.0.1:3306
  2. Plugins.Mysql.Sessions.MySQL1.User=<UsernameForMySQL1>
  3. Plugins.Mysql.Sessions.MySQL1.Password=<PasswordForMySQL1>
  4. Plugins.Mysql.Sessions.MySQL2.Uri=tcp://127.0.0.1:3307
  5. Plugins.Mysql.Sessions.MySQL2.User=<UsernameForMySQL2>
  6. Plugins.Mysql.Sessions.MySQL2.Password=<PasswordForMySQL2>

现在,这些名称可以用作键中的字符串,而不是URI,例如:

  1. mysql.ping[MySQL1]
  2. mysql.ping[MySQL2]
硬编码默认值

如果验证所需的参数未在项密钥或命名会话参数中提供,则插件将使用硬编码的默认值。

连接

一些插件支持同时从多个实例收集度量。可以监视本地和远程实例。支持TCP和Unix套接字连接。

建议配置插件,使实例的连接保持在打开状态。这样做的好处是减少了网络拥塞、延迟以及由于连接数较少而导致的CPU和内存使用。客户端库负责这个。

未使用的连接保持打开的时间段可以由Plugins.<PluginName>.KeepAlive参数确定。
示例:Plugins.Memcached.KeepAlive

编写插件

插件是定义结构并实现一个或多个插件接口(Exporter、Collector、Runner、Watcher)的Go包:

  • 插件导出器 plugin.Exporter

Exporter是执行轮询并返回值(values)、nothing和error的最简单接口。它接受预先准备好的项键、参数和上下文。Exporter接口是唯一可以同时访问的接口。所有其它插件接口访问都是独占的,当插件已经在执行某些任务时,不能调用任何方法。此外,每个插件最多只能调用100个concurrent Export(),可以根据需要减少每个插件的调用次数。

  • 插件收集器 plugin.Collector

收集器用于插件需要定期收集数据时。此接口通常与导出器接口一起用于导出收集的数据。

  • 插件配置器 plugin.Configurator

Configurator用于从agent2 配置文件向插件提供配置参数。

  • 插件运行器 plugin.Runner

Runner接口提供了在插件启动(激活)时执行一些初始化,在插件停止(停用)时执行取消初始化的方法。例如,插件可以通过实现Runner接口来启动/停止一些后台goroutine。

  • 插件.观察者 plugin.Watcher

Watcher允许插件实现自己的度量轮询,而不使用agent的内部调度程序,例如在基于陷阱的插件中。

默认情况下,插件处于非活动状态,只有在监视插件提供的度量时才会激活。

插件位于插件目录树中,按含义分组,例如plugins/system/uptime/uptime.go.

实施步骤

插件必须导入zabbix.com/pkg/plugin包。

  1. import "zabbix.com/pkg/plugin"

插件必须定义结构并嵌入plugin.Base结构。

  1. type Plugin struct {
  2. plugin.Base
  3. }
  4. var impl Plugin

一个插件必须实现一个或多个插件接口。

  1. func (p *Plugin) Export(key string, params []string, ctx plugin.ContextProvider) (result interface{}, err error) {
  2. if len(params) > 0 {
  3. p.Debugf("received %d parameters while expected none", len(params))
  4. return nil, errors.New("Too many parameters")
  5. }
  6. return time.Now().Format(time.RFC3339)
  7. }

插件必须在初始化期间注册自身。

  1. func init() {
  2. plugin.RegisterMetrics(&impl, "Time", "system.time", "Returns time string in RFC 3999 format.")
  3. }

其中RegisterMetrics 参数为:

  • 指向插件实现的指针

  • 插件名称(大写)

  • 指标#1名称(项目键)

  • 指标#1描述(以大写字符开始,以点结束)

  • 指标#2名称(项目键)(可选)

  • 指标#2描述(以大写字符开始,以点结束)(可选)

如果需要日志记录,插件必须使用 plugin.Base 提供的日志记录功能(见上面的例子)。它基本上是一个标准日志的包装器,但是它会在日志信息前面加上[<plugin name>]。