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 (см.
Пример выше). По сути, это оболочка для стандартного ведения журнала, но
к сообщениям журнала добавляется префикс [<имя плагина>].