Плагины дают возможность расширить функционал 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>
Имена параметров должны соответствовать следующим требованиям:
Since Zabbix 5.0.35, you can set default values for the connection-related parameters (URI, username, password, etc.) in the configuration file in the format:
Plugins.<PluginName>.Default.<Parameter>=<Value>
For example, Plugins.Mysql.Default.Username=zabbix, Plugins.MongoDB.Default.Uri=tcp://127.0.0.1:27017, etc.
If a value for such parameter is not provided in an item key or in the named session parameters, the plugin will use the default value. If a default parameter is also undefined, hardcoded defaults will be used.
If an item key does not have any parameters, Zabbix agent 2 will attempt to collect the metric using values defined in the default parameters section.
Named sessions represent an additional level of plugin parameters and can be used to specify separate sets of authentication parameters for each of the instances being monitored. Each named session parameter should have the following structure:
Plugins.<PluginName>.Sessions.<SessionName>.<Parameter>=<Value>
A session name can be used as a connString item key parameter instead of specifying a URI, username, and/or password separately.
In item keys, the first parameter can be either a connString or a URI. If the first key parameter doesn't match any session name, it will be treated as a URI. Note that embedding credentials into a URI is not supported, use named session parameters instead.
The list of available named session parameters depends on the plugin, see Zabbix agent 2 (UNIX) / Zabbix agent 2 (Windows) for details.
In Zabbix versions before 5.0.34, when providing a connString (session name) in key parameters, item key parameters for username and password must be empty. The values will be taken from the session parameters. If an authentication parameter is not specified for the named session, a hardcoded default value will be used.
Since Zabbix 5.0.34, it is possible to override session parameters by specifying new values in the item key parameters (see example).
Since Zabbix 5.0.35, if a parameter is not defined for the named session, Zabbix agent 2 will use the value defined in the default plugin parameter.
Since version 5.0.34, Zabbix agent 2 plugins search for connection-related parameter values in the following order:
Monitoring of two instances “MySQL1” and “MySQL2”.
Configuration parameters:
Plugins.Mysql.Sessions.MySQL1.Uri=tcp://127.0.0.1:3306
Plugins.Mysql.Sessions.MySQL1.User=mysql1_user
Plugins.Mysql.Sessions.MySQL1.Password=unique_password
Plugins.Mysql.Sessions.MySQL2.Uri=tcp://192.0.2.0:3306
Plugins.Mysql.Sessions.MySQL2.User=mysql2_user
Plugins.Mysql.Sessions.MySQL2.Password=different_password
Item keys: mysql.ping[MySQL1]
, mysql.ping[MySQL2]
Providing some of the parameters in the item key (supported since Zabbix 5.0.34).
Configuration parameters:
Plugins.Postgres.Sessions.Session1.Uri=tcp://192.0.2.234:5432
Plugins.Postgres.Sessions.Session1.User=old_username
Plugins.Postgres.Sessions.Session1.Password=session_password
Item key: pgsql.ping[session1,new_username,,postgres]
As a result of this configuration, the agent will connect to PostgreSQL using the following parameters:
Collecting a metric using default configuration parameters.
Configuration parameters:
Plugins.Postgres.Default.Uri=tcp://192.0.2.234:5432
Plugins.Postgres.Default.User=zabbix
Plugins.Postgres.Default.Password=password
Item key: pgsql.ping[,,,postgres]
As a result of this configuration, the agent will connect to PostgreSQL using the parameters:
Плагин - 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
(см. Пример выше). По сути, это оболочка для стандартного ведения журнала, но к сообщениям журнала добавляется префикс [<имя плагина>].