3 Agent 2
Zabbix agent 2 is a new generation of Zabbix agent and may be used in place of Zabbix agent. Zabbix agent 2 has been developed to:
- reduce the number of TCP connections
- provide improved concurrency of checks
- be easily extendible with plugins. A plugin should be able to:
- provide trivial checks consisting of only a few simple lines of code
- provide complex checks consisting of long-running scripts and standalone data gathering with periodic sending back of the data
Agent 2 is written in Go programming language (with some C code of Zabbix agent reused). A configured Go environment with a currently supported Go version is required for building Zabbix agent 2.
Agent 2 does not have built-in daemonization support on Linux; it can be run as a Windows service.
Passive and active checks
Passive checks work similarly to Zabbix agent. Active checks support scheduled/flexible intervals and check concurrency within one active server.
By default, after a restart, Zabbix agent 2 will schedule the first data collection for active checks at a conditionally random time within the item’s update interval to prevent spikes in resource usage. To perform active checks that do not have Scheduling update interval immediately after the agent restart, set ForceActiveChecksOnStart parameter (global-level) or Plugins..System.ForceActiveChecksOnStart (affects only specific plugin checks) in the configuration file. Plugin-level parameter, if set, will override the global parameter. Forcing active checks on start is supported since Zabbix 6.0.2.
Check concurrency
Checks from different plugins can be executed concurrently. The number of concurrent checks within one plugin is limited by the plugin capacity setting. Each plugin may have a hardcoded capacity setting (100 being default) that can be lowered using the Plugins..System.Capacity=N setting in the Plugins configuration parameter. Former name of this parameter Plugins..Capacity is still supported, but has been deprecated in Zabbix 6.0.
Supported platforms
Zabbix agent 2 is supported on the following platforms:
- Windows (all desktop and server versions since XP; also available as a pre-compiled binary)
- Linux (also available in Installation
Zabbix agent 2 is available in pre-compiled Zabbix packages. To compile Zabbix agent 2 from sources you have to specify the —enable-agent2 configure option.
Options
The following command line parameters can be used with Zabbix agent 2:
Parameter Description -c —config Path to the configuration file.
You may use this option to specify a configuration file that is not the default one.
On UNIX, default is /usr/local/etc/zabbix_agent2.conf or as set by compile-time variables —sysconfdir or —prefix-f —foreground Run Zabbix agent in foreground (default: true). -p —print Print known items and exit.
Note: To return user parameter results as well, you must specify the configuration file (if it is not in the default location).-t —test Test specified item and exit.
Note: To return user parameter results as well, you must specify the configuration file (if it is not in the default location).-h —help Print help information and exit. -v —verbose Print debugging information. Use this option with -p and -t options. -V —version Print agent version and license information. -R —runtime-control Perform administrative functions. See runtime control. - print all built-in agent items with values
- test a user parameter with «mysql.ping» key defined in the specified configuration file shell> zabbix_agent2 —print shell> zabbix_agent2 -t «mysql.ping» -c /etc/zabbix/zabbix_agentd.conf
Runtime control
Runtime control provides some options for remote control.
Option Description log_level_increase Increase log level. log_level_decrease Decrease log level. metrics List available metrics. version Display agent version. userparameter_reload Reload values of the UserParameter and Include options from the current configuration file. help Display help information on runtime control. - increasing log level for agent 2
- print runtime control options
shell> zabbix_agent2 -R log_level_increase shell> zabbix_agent2 -R help
Configuration file
The configuration parameters of agent 2 are mostly compatible with Zabbix agent with some exceptions.
New parameters Description ControlSocket The runtime control socket path. Agent 2 uses a control socket for runtime commands. EnablePersistentBuffer,
PersistentBufferFile,
PersistentBufferPeriodThese parameters are used to configure persistent storage on agent 2 for active items. ForceActiveChecksOnStart Determines whether the agent should perform active checks immediately after restart or spread evenly over time. Plugins Plugins may have their own parameters, in the format Plugins..= . A common plugin parameter is System.Capacity, setting the limit of checks that can be executed at the same time. StatusPort The port agent 2 will be listening on for HTTP status request and display of a list of configured plugins and some internal parameters Dropped parameters Description AllowRoot, User Not supported because daemonization is not supported. LoadModule, LoadModulePath Loadable modules are not supported. StartAgents This parameter was used in Zabbix agent to increase passive check concurrency or disable them. In Agent 2, the concurrency is configured at a plugin level and can be limited by a capacity setting. Whereas disabling passive checks is not currently supported. HostInterface, HostInterfaceItem Not yet supported. For more details see the configuration file options for zabbix_agent2.
Exit codes
Starting from version 4.4.8 Zabbix agent 2 can also be compiled with older OpenSSL versions (1.0.1, 1.0.2).
In this case Zabbix provides mutexes for locking in OpenSSL. If a mutex lock or unlock fails then an error message is printed to the standard error stream (STDERR) and Agent 2 exits with return code 2 or 3, respectively.
Zabbix агент
Родной Zabbix агент, написан на языке C и его можно запускать на различных поддерживаемых платформах, включая Linux, UNIX и Windows, и собирать с устройства такие данные как использование CPU, памяти, диска и сетевых интерфейсов.
Компактность и малые ресурсы
По причине своей компактности агент может работать на устройствах с ограниченными ресурсами.
Конфигурация мониторинга сосредоточена на Zabbix сервере, что упрощает управление Zabbix агентом, который может использовать одинаковый файл конфигурации на всех серверах.
Zabbix агент запущенный под Linux:
Zabbix агент запущенный под MS Windows:
Поддержка опроса и трапов
Zabbix агент поддерживают как пассивные (опроса), так и активные проверки (трапы). Zabbix может выполнять проверки на основе интервала опроса, однако, также имеется возможность планирования определенного времени опроса элементов данных.
Пассивные проверки (опрос):
- Zabbix сервер (или прокси) запрашивает значение с Zabbix агента
- Агент обрабатывает запрос и возвращает значение Zabbix серверу (или прокси)
Активные проверки (трапы):
- Zabbix агент запрашивает с Zabbix сервера (или прокси) список активных проверок
- Периодически агент отправляет результаты этих проверок
Функции агента
Zabbix агент поддерживает следующий список проверок по умолчанию.
- Переданные пакеты/байты
- Ошибочные/отброшенные пакеты
- Коллизии
- Load average (усредненная загрузка)
- Простой/использование CPU
- Данные утилизации CPU по отдельным процессам
- Свободная/использованная память
- Утилизация swap/файла подкачки
- Свободное/занятое дисковое пространство
- I/O чтения и записи
- Состояние процесса
- Использование памяти процессом
- Состояние службы (ssh, ntp, ldap, smtp, ftp, http, pop, nntp, imap)
- Состояние службы Windows
- Разрешение DNS
- Работоспособность TCP
- Время ответа TCP
- Размер/время файла
- Существование файла
- Контрольная сумма
- MD5 хеш
- Поиск по регулярному выражению
- Текстовый журнал
- Журнал событий Windows
- Время работы системы
- Системное время
- Подключенные пользователи
- Счетчики производительности (Windows)
Расширение Zabbix агента
- подгружаемые модули
- пользовательские параметры
- Zabbix sender
Мониторинг журналов
Встроенной функцией Zabbix агента является поддержка мониторинга текстовых журналов и журнала событий, включая поддержку ротации журналов.
Имеется возможность построения графиков по элементам данных журнала, при использовании возможности извлечения конкретного содержимого.
Журналы постоянно анализируются Zabbix агентом и при нахождении заданного элемента поиска Zabbix сервер будет оповещен и сможет выполнить какое-либо действие или автоматически отправить оповещение пользователю или группе пользователей.
Поддержка WMI
Zabbix агент имеет встроенную поддержку Windows Management Instrumentation (WMI), который расширяет возможности простого получения и мониторинга информации о системе в режиме реального времени и метрик производительности с Windows серверов и рабочих станций.
WMI запросы можно выполнять при помощи wmi.get[] ключа для извлечения одного свойства в виде строки, целого числа или дробного числа с заданного класса пространства имен WMI.
Для получения более подробных сведений о Windows Management Instrumentation, доступных классах и их свойствах посетите MSDN документацию.
Готовность к IPv6
Zabbix агент поддерживает IPv4 и IPv6 адреса.
Узнайте в документации:
- Агент
- Поддерживаемые элементы данных агента
- API агента
- Windows агент
- zabbix_sender
- Мониторинг файлов журналов
Вики:
Мониторинг 95+ метрик PostgreSQL с помощью плагина Zabbix Agent 2
В прошлом году популярный сервис мониторинга Zabbix представил Agent 2, призванный сократить число TCP-подключений и обеспечить удобную расширяемость за счёт плагинов на Golang.
Меня зовут Даша, и я один из разработчиков плагина мониторинга PostgreSQL для Zabbix Agent 2. В этой статье я расскажу об основных “фишках” использования Zabbix Agent 2 для мониторинга PostgreSQL, о принципе работы плагина, дам советы по его настройке, а также объясню на примере, как кастомизировать плагин.
Как появился плагин мониторинга PostgreSQL для Zabbix Agent 2?
В 2019 году Zabbix анонсировал выпуск нового Zabbix Agent 2. Он написан с нуля на Golang. Для мониторинга каждого приложения требуется отдельный плагин. Мы в Postgres Professional решили, что это отличная возможность применить наш многолетний опыт использования Zabbix для мониторинга PostgeSQL, и написали модуль мониторинга для Agent 2.
Как устроен мониторинг СУБД в Zabbix?
Начнём с небольшого введения в схему работы мониторинга Zabbix для новичков.
Интересную нам сейчас структуру можно разбить на две составляющие:
- Zabbix Server, который хранит и собирает данные.
- Агенты, которые устанавливаются на наблюдаемых объектах и собирают данные.
Для мониторинга каждого приложения в Zabbix Server требуется шаблон — XML-файл. В нём указаны ключи метрик (уникальные ID) и параметры их обработки.
Zabbix Agent 2 призван дать пользователю инструмент мониторинга “из коробки”, быстро и легко настраиваемый, а также с хорошей расширяемостью.
Как же работает PostgreSQL плагин для Zabbix Agent 2?
Есть основная функция, в которой по уникальному ключу вызываются обработчики для каждой метрики. Обработчик (handler) служит для сбора данных. Это файл, в котором указывается и выполняется SQL-запрос для получения одной или нескольких метрик. Результаты выполнения запроса записываются в переменную, которая относится к типу int, float или string. Если результат должен содержать значения сразу нескольких метрик, то он будет преобразован в JSON ещё на стадии получения запроса. Полученные результаты Zabbix Agent 2 периодически отдаёт Zabbix Server.
Плагин и обработчики находятся вот в этой папке: /plugins/postgres
Какими возможностями обладает модуль мониторинга PostgreSQL для Zabbix Agent 2?
- Поддержка постоянного подключения к PostgreSQL.
- Мониторинг нескольких экземпляров (instances) PostgreSQL одновременно.
- Опции контроля и проверки метрик в реальном времени через командную строку.
- Конфигурирование плагина через общий файл конфигурации агента.
- Сохранение состояния между проверками.
- Довольно простая кастомизация сбора существующих метрик.
- Возможность писать новые плагины под свои требования.
К плагину есть официальный шаблон, который можно скачать по ссылке.
В нем есть базовые триггеры и комплексный экран, на котором отображается комбинация нескольких графиков. Всего плагин собирает более 95 метрик. Полный список всех метрик также можно найти по ссылке выше.
В веб-интерфейсе Zabbix Server можно редактировать шаблон и его составляющие для своих нужд. Что именно можно настроить?
- Изменить интервал сбора метрики.
- Добавить триггер для метрики.
- Добавить макрос или отредактировать существующий.
Как установить и использовать PostgreSQL-плагин для Zabbix Agent 2?
1. Создаем пользователя PostgreSQL для мониторинга:
CREATE USER 'zbx_monitor' WITH PASSWORD '' INHERIT; GRANT EXECUTE ON FUNCTION pg_catalog.pg_ls_dir(text) TO zbx_monitor; GRANT EXECUTE ON FUNCTION pg_catalog.pg_stat_file(text) TO zbx_monitor;
2. Редактируем pg_hba.conf, чтобы разрешить подключение от Zabbix Agent 2:
# TYPE DATABASE USER ADDRESS METHOD
host all zbx_monitor 127.0.0.1 md5Теперь остаётся задать параметры подключения к PostgreSQL для Zabbix Agent 2. Это можно сделать двумя способами:
- использовать макросы для параметров подключения,
- создать сессию.
Первый способ немного проще. Его достаточно, если нужно настроить мониторинг одного экземпляра PostgreSQL:
1. В шаблоне редактируем макрос , в котором указывается путь к PostgreSQL в формате .
2. Задаем макрос с именем пользователя и паролем ( and ). Так же можно указать макрос . Этот параметр опционален для большинства метрик — если он не задан в ключе, то будет использовано имя базы, указанное в конфигурационном файле агента.
В шаблоне эти макросы уже указаны в параметрах всех ключей. Обратите внимание, что порядок указания параметров в ключе фиксирован.
Второй способ позволяет задавать параметры подключения к нескольким экземплярам PostgreSQL:
- Задаём параметры подключения для сессии в конфигурационном файле zabbix_agent2.conf в секции плагина Postgres: Postgres.Sessions..URI,Postgres.Sessions..User,Postgres.Sessions..Password. Здесь вместо нужно указать уникальное имя новой сессии.
- Создаём макрос с именем сессии в шаблоне <$PG.>.
- Указываем макрос как единственный параметр для метрик в шаблоне.
Рассмотрим, как использовать плагин для сбора дополнительных метрик на примере добавления метрики uptime.
Для этого надо создать новый обработчик с запросом и добавить его ключ в основную функцию.
1. Создаем файл для получения новой метрики:
zabbix/src/go/plugins/postgres/handler_uptime.go
Подключаем пакет postgres и указываем ключ (ключи) метрик:
package postgres const ( keyPostgresUptime = "pgsql.uptime" )
2. Объявляем обработчик (handler) c запросом, а так же переменную uptime, куда будет записан результат:
func uptimeHandler(ctx context.Context, conn PostgresClient, _ string, _ map[string]string, _ . string) (interface<>, error) < var uptime float64 query := `SELECT date_part('epoch', now() - pg_postmaster_start_time());
3.Выполняем запрос, проверяем, возникла ли ошибка. Если все ОК, возвращаем переменную uptime с результатом.
row, err := conn.QueryRow(ctx, query) if err != nil < . >err = row.Scan(&uptime) if err != nil < . >return uptime, nil
4. Регистрируем ключ новой метрики:
var metrics = metric.MetricSet< . keyPostgresUptime: metric.New("Returns uptime.", []*metric.Param, false), >
Новый функционал
В версии Zabbix 5.2 появилась возможность вычислять метрики, собирая результаты пользовательских запросов из отдельных SQL-файлов. При этом можно создавать даже динамические запросы. В этой версии также обновлена архитектура модуля и исправлены мелкие ошибки.Продемонстрируем, как добавлять кастомные метрики через SQL - файл на примере простого запроса с одним параметром:
-
Создадим SQL-файл с запросом.
$touch custom1.sql $echo “SELECT id FROM my_table WHERE > custom1.sql
Тут в $1 будет передан параметр при выполнении запроса.
- В zabbix_agent2.conf заполним параметр Plugins.Postgres.CustomQueriesPath, указав путь к директории с SQL-файлом. Plugins.Postgres.CustomQueriesPath=/path/to/the/file
- В шаблоне для ключа pgsql.query.custom укажем имя SQL-файла и добавим дополнительные параметры для запроса, т.е. тот, который заменит $1. Стоит отметить, что для названия SQL - файла и для параметров можно также создавать макросы в шаблоне.
Дополнительные материалы
Остались вопросы?
Все вопросы можно задавать в комментариях.
При подготовке материала использовались источники:
https://www.zabbix.com/documentation/current/en/manual/concepts/agent2
https://www.zabbix.com/ru/zabbix_agent
https://habr.com/ru/companies/postgrespro/articles/558512/