Плагины дают возможность расширить функционал Zabbix. Они написаны на языке Go и поддерживаются только для Zabbix агента 2. Они предоставляют альтернативу загружаемые модули (пишутся на C) и другим методам расширения функциональности Zabbix, таким как пользовательские параметры (метрики агента), внешие проверки (мониторинг без агента) и элементу данных Zabbix агента system.run []
. Следующие функции относятся к агенту 2 и его плагинам:
Все метрики, поддерживаемые для 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, имени пользователя и пароля отдельно.
Обратите внимание, что:
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, например:
Некоторые плагины поддерживают сбор метрик из нескольких объектов одновременно. Можно отслеживать как локальные, так и удаленные объекты. Поддерживаются TCP и Unix-сокет соединения.
Рекомендуется настроить плагины так, чтобы они поддерживали соединения с объектами в открытом состоянии. Преимущества - снижение перегрузок в сети, сокращение задержек и использование меньшего объема ЦП и памяти из-за меньшего количества соединений. Клиентская библиотека позаботится об этом.
Период времени, в течение которого неиспользуемые соединения должны оставаться открытыми, может быть определен параметром Plugins.<PluginName>.KeepAlive.
Пример: Plugins.Memcached.KeepAlive
Плагин - Go пакет, который определяет структуру и реализует один или несколько интерфейсов плагина (Exporter, Collector, Configurator, Runner, Watcher):
Exporter - простейший интерфейс, который выполняет опрос и возвращает значение (значения), ничего, ошибку. Он принимает предварительно обработанные ключ элемента данных, параметры и контекст. Интерфейс Exporter является единственным интерфейсом, к которому можно получить доступ на конкурентной основе. Доступ ко всем остальным интерфейсам плагина эксклюзивный и нельзя вызвать никакой метод, когда плагин уже выполняет какую-нибудь задачу. Также имеется ограничение в 100 максимальных параллельных вызовов Export() на каждый плагин, это значение можно уменьшить, по мере необходимости, каждому плагину отдельно.
Collector используется, когда плагину требуется сбор данных на основе регулярных интервалов. Этот интерфейс обычно используется совместно с Exporter интерфейсом для экспорта собранных данных.
Конфигуратор используется для предоставления плагину его параметров из файла конфигурации агента 2 .
Интерфейс Runner предоставляет средства для выполнения некоторой инициализации, когда плагин запущен (активирован), и деинициализации, когда плагин остановлен (деактивирован). Например, плагин может запускать/останавливать некоторые фоновые процедуры, реализуя интерфейс Runner.
Watcher позволяет плагину самостоятельно запрашивать метрики, без использования внутреннего планировщика агента, например в плагинах, использующих трапы.
Плагины по умолчанию неактивны и активируются только при мониторинге метрик, предоставляемых плагином.
Плагины расположены в дереве каталогов плагинов, сгруппированные по значению, например plugins/system/uptime/uptime.go
.
Плагин должен импортировать пакет zabbix.com/pkg/plugin
.
Плагин должен определить структуру и внедрить структуру «plugin.Base».
Плагин должен реализовывать один или несколько интерфейсов плагинов.
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
следующие:
Если необходимо делать записи в журнал, плагин должен использовать функциональность журнаирования, предоставляемую plugin.Base
(см. Пример выше). По сути, это оболочка для стандартного ведения журнала, но к сообщениям журнала добавляется префикс [<имя плагина>].