14 Плагины

Плагины дают возможность расширить функционал Zabbix. Они написаны на языке Go и поддерживаются только для Zabbix агента 2. Они предоставляют альтернативу загружаемые модули (пишутся на C) и другим методам расширения функциональности Zabbix, таким как пользовательские параметры (метрики агента), внешие проверки (мониторинг без агента) и элементу данных Zabbix агента system.run []. Следующие функции относятся к агенту 2 и его плагинам:

  • один файл конфигурации (все параметры конфигурации плагина находятся в одном файле с параметрами самого агента);
  • управление очередью задач c учетом расписания и возможностей параллельного запуска задач;
  • тайм-ауты на уровне плагинов.

Готовые плагины

Все метрики, поддерживаемые для Zabbix агента 2, собираются с помощью плагинов. Zabbix предоставляет ряд готовых плагинов для Zabbix агента 2:

Название плагина Описание Поддерживаемые элементы данных Комментарии
Agent Метрики используемого агента Zabbix. agent.hostname, agent.ping, agent.version Поддерживаемые элементы данных имеют те же параметры, что и элементы данных Zabbix агента.
CPU Мониторинг CPU (количество потоков CPU/ядер CPU, обнаруженные CPU, процент использования). system.cpu.discovery, system.cpu.num, system.cpu.util Поддерживаемые элементы данных имеют те же параметры, что и элементы данных Zabbix агента.
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.

Поддерживаемые элементы данных работают только с Zabbix агентом 2.
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 агента.
Kernel Мониторинг ядра. kernel.maxfiles, kernel.maxproc Поддерживаемые элементы данных имеют те же параметры, что и элементы данных Zabbix агента.
Log Мониторинг файлов журнала. log, log.count, logrt, logrt.count Поддерживаемые элементы данных имеют те же параметры, что и элементы данных Zabbix агента.
Memcached Мониторинг Memcached сервера. memcached.ping, memchached.stats Доступен также шаблон мониторинга App Memchached.

Поддерживаемые элементы данных работают только с Zabbix агентом 2.
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.

Поддерживаемые элементы данных работают только с Zabbix агентом 2.

Настройка по умолчанию: URI=tcp://localhost:3306, username=root, ''password= ''.
NetIf Мониторинг сетевых интерфейсов. net.if.collisions, net.if.discovery, net.if.in, net.if.out, net.if.total Поддерживаемые элементы данных имеют те же параметры, что и элементы данных Zabbix агента.
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
Доступен также шаблон мониторинга DB PostgreSQL by Zabbix agent 2.

Поддерживаемые элементы данных работают только с Zabbix агентом 2.
Proc Процент использования процессора. proc.cpu.util Поддерживаемый элемент данных имеет те же параметры, что и элемент данных Zabbix агента.
Redis Мониторинг Redis сервера. redis.config, redis.info, redis.ping, redis.slowlog.count Доступен также шаблон мониторинга DB Redis.

Поддерживаемые элементы данных работают только с Zabbix агентом 2.
SystemRun Запускает указанную команду. system.run Поддерживаемый элемент данных имеет те же параметры, что и элемент данных Zabbix агента.
Systemd Мониторинг системных сервисов systemd. systemd.unit.discovery, systemd.unit.info Поддерживаемые элементы данных работают только с Zabbix агентом 2.
TCP Проверка доступности TCP-соединения. net.tcp.port Поддерживаемый элемент данных имеет те же параметры, что и элемент данных Zabbix агента.
UDP Мониторинг доступности и производительности сервисов UDP. net.udp.service, net.udp.service.perf Поддерживаемые элементы данных имеют те же параметры, что и элементы данных Zabbix агента.
Uname Сбор информации о системе. system.hostname, system.sw.arch, system.uname Поддерживаемые элементы данных имеют те же параметры, что и элементы данных Zabbix агента.
Uptime Сбор метрик времени работы системы. system.uptime Поддерживаемый элемент данных имеет те же параметры, что и элемент данных Zabbix агента.
VFSDev Сбор метрик VFS. vfs.dev.discovery, vfs.dev.read, vfs.dev.write Поддерживаемые элементы данных имеют те же параметры, что и элементы данных Zabbix агента.
Web Мониторинг веб-страниц. web.page.get, web.page.perf, web.page.regexp Поддерживаемые элементы данных имеют те же параметры, что и элементы данных Zabbix агента.
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 агента.
ZabbixStats Внутренние показатели Zabbix сервера/прокси или количество элементов данных в очереди. zabbix.stats Поддерживаемые элементы данных имеют те же параметры, что и элементы данных Zabbix агента.
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.swap.size,
system.users.num, vfs.dir.count, vfs.dir.size, vfs.fs.get, vfs.fs.inode,
vfs.fs.size, vm.memory.size.
Поддерживаемые элементы данных имеют те же параметры, что и элементы данных Zabbix агента.

Настройка плагинов

Общие принципы настройки и рекомендации описаны в этом разделе.

Для конкретных примеров конфигурации плагина смотрите также:

Все настройки плагинов задаются с использованием параметра Plugins.* файла конфигурации Zabbix агента 2 . В отличие от других параметров агента, это не тип ключа / значения параметра. Это отдельный раздел, где могут быть описаны конкретные параметры плагина. Каждый параметр должен иметь следующую структуру:

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

Имена параметров должны соответствовать следующим требованиям:

  • рекомендуется начинать названия ваших плагинов с заглавной буквы;
  • параметр должен начинаться с заглавной буквы;
  • специальные символы не разрешены;
  • количество вложенных уровней нелимитировано;
  • количество параметров не ограничено.
Именованные сессии

Именованные сессии представляют дополнительный уровень параметров плагина и могут использоваться для определения отдельных наборов параметров аутентификации для каждого отслеживаемого объекта. Каждый параметр именованной сессии должен иметь следующую структуру:

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

Название именованной сессии может использоваться в качестве параметра connString ключа элемента данных вместо указания URI, имени пользователя и пароля отдельно.

Обратите внимание, что:

  • при предоставлении connString (названия сессии) в параметрах ключа, параметры ключа для имени пользователя и пароля должны быть пустыми;
  • передача встроенных в URI учетных данных не поддерживается, вместо этого рекомендуется использовать именованные сессии;
  • в именованных сессиях поддерживаются только следующие параметры: Plugins.<PluginName>.<SessionName>.Uri, Plugins.<PluginName>.<SessionName>.User, Plugins.<PluginName>.<SessionName>.Password.
  • если для указанной сессии не указан параметр аутентификации, будет использоваться значение по умолчанию.

Пример: Мониторинг двух объектов “MySQL1” и “MySQL2” может быть настроен следующим образом:

Plugins.Mysql.Sessions.MySQL1.Uri=tcp://127.0.0.1:3306
       Plugins.Mysql.Sessions.MySQL1.User=<UsernameForMySQL1>
       Plugins.Mysql.Sessions.MySQL1.Password=<PasswordForMySQL1>    
       Plugins.Mysql.Sessions.MySQL2.Uri=tcp://127.0.0.1:3307   
       Plugins.Mysql.Sessions.MySQL2.User=<UsernameForMySQL2>
       Plugins.Mysql.Sessions.MySQL2.Password=<PasswordForMySQL2>

Теперь эти имена можно использовать как connStrings в ключах вместо URI, например:

mysql.ping[MySQL1]
       mysql.ping[MySQL2]

Соединения

Некоторые плагины поддерживают сбор метрик из нескольких объектов одновременно. Можно отслеживать как локальные, так и удаленные объекты. Поддерживаются TCP и Unix-сокет соединения.

Рекомендуется настроить плагины так, чтобы они поддерживали соединения с объектами в открытом состоянии. Преимущества - снижение перегрузок в сети, сокращение задержек и использование меньшего объема ЦП и памяти из-за меньшего количества соединений. Клиентская библиотека позаботится об этом.

Период времени, в течение которого неиспользуемые соединения должны оставаться открытыми, может быть определен параметром Plugins.<PluginName>.KeepAlive.
Пример: Plugins.Memcached.KeepAlive

Написание плагинов

Плагин - Go пакет, который определяет структуру и реализует один или несколько интерфейсов плагина (Exporter, Collector, Configurator, Runner, Watcher):

  • plugin.Exporter

Exporter - простейший интерфейс, который выполняет опрос и возвращает значение (значения), ничего, ошибку. Он принимает предварительно обработанные ключ элемента данных, параметры и контекст. Интерфейс Exporter является единственным интерфейсом, к которому можно получить доступ на конкурентной основе. Доступ ко всем остальным интерфейсам плагина эксклюзивный и нельзя вызвать никакой метод, когда плагин уже выполняет какую-нибудь задачу. Также имеется ограничение в 100 максимальных параллельных вызовов Export() на каждый плагин, это значение можно уменьшить, по мере необходимости, каждому плагину отдельно.

  • plugin.Collector

Collector используется, когда плагину требуется сбор данных на основе регулярных интервалов. Этот интерфейс обычно используется совместно с Exporter интерфейсом для экспорта собранных данных.

  • plugin.Configurator

Конфигуратор используется для предоставления плагину его параметров из файла конфигурации агента 2 .

  • plugin.Runner

Интерфейс Runner предоставляет средства для выполнения некоторой инициализации, когда плагин запущен (активирован), и деинициализации, когда плагин остановлен (деактивирован). Например, плагин может запускать/останавливать некоторые фоновые процедуры, реализуя интерфейс Runner.

  • plugin.Watcher

Watcher позволяет плагину самостоятельно запрашивать метрики, без использования внутреннего планировщика агента, например в плагинах, использующих трапы.

Плагины по умолчанию неактивны и активируются только при мониторинге метрик, предоставляемых плагином.

Плагины расположены в дереве каталогов плагинов, сгруппированные по значению, например plugins/system/uptime/uptime.go.

Этапы реализации

Плагин должен импортировать пакет zabbix.com/pkg/plugin.

import "zabbix.com/pkg/plugin"

Плагин должен определить структуру и внедрить структуру «plugin.Base».

type Plugin struct {
           plugin.Base
       }
       var impl Plugin

Плагин должен реализовывать один или несколько интерфейсов плагинов.

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

Плагин должен зарегистрироваться во время инициализации.

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

Где параметры RegisterMetrics следующие:

  • Указатель на реализацию плагина
  • Имя плагина (в формате UpperCamelCase - без пробелов, каждое слово с заглавной буквы)
  • Имя метрики #1 (ключ элемента данных)
  • Описание метрики #1 (начиная с заглавной буквы и заканчивая точкой)
  • Имя метрики #2 (ключ элемента данных) (не обязательно)
  • Описание метрики #2 (начиная с заглавной буквы и заканчивая точкой) (не обязательно)
  • ...

Если необходимо делать записи в журнал, плагин должен использовать функциональность журнаирования, предоставляемую plugin.Base (см. Пример выше). По сути, это оболочка для стандартного ведения журнала, но к сообщениям журнала добавляется префикс [<имя плагина>].