Содержание
- 2. Подготовка Корпоративного сервера 2024
- 3. Шаблон CS 2024 single
- 4. Шаблон R7 — CS 2024 middle
- 5. Шаблон Gluster Storage
- 6. Шаблон PostgreSQL_Zabbix
- 7. Шаблон RabbitMQ cluster
- 8. Проверка после настройки
- 9. Если мониторинг не работает
В статье описана установка и настройка шаблона КС24 для системы мониторинга Zabbix. Шаблон позволяет контролировать:
- доступность основных сервисов Корпоративного сервера 2024;
- доступность веб-модулей;
- состояние отдельных процессов;
- доступность необходимых TCP-портов.
При возникновении проблемы Zabbix может сформировать событие и уведомить администратора.
Инструкция предназначена для системных администраторов и специалистов, отвечающих за мониторинг инфраструктуры.
Что потребуется
Перед началом убедитесь, что:
- установлен и настроен Zabbix;
- используется рекомендуемая версия Zabbix;
- на сервере установлен Zabbix Agent 2;
- у вас есть доступ к Р7 Управление;
- известен домен Корпоративного сервера 2024;
Шаблон создан с использованием Zabbix 7.0.0 и Zabbix Agent 2 версии 7.0.0. Перед использованием на другой версии Zabbix проверьте совместимость шаблона.
Какие параметры отслеживает шаблон
Шаблон проверяет доступность следующих компонентов:
- P7 Управление;
- P7 Диск;
- P7 Почта;
- P7 Календарь;
- P7 Проекты;
- P7 Контакты;
- P7 Графика;
- Сервер документов;
- PostgreSQL;
- RabbitMQ;
- Redis;
- сервисы и процессы P7 Диск и Сервера документов.
2. Подготовка Корпоративного сервера 2024
2.1. Создание пользователя для мониторинга
Для проверки веб-модулей создайте отдельную учетную запись в Р7 Управление.
1. Откройте Р7 Управление по адресу:
https://admin.ваш_домен
2. Создайте отдельного пользователя для мониторинга.
В примере используется имя: r7_zabbix
3. Запомните имя пользователя и пароль. Они понадобятся при дальнейшей настройке.
Используйте отдельную учетную запись для мониторинга, а не личную учетную запись администратора.
2.2. Импорт шаблона в Zabbix
- Скачайте архив с шаблонами cs_24_template_zabbix.tar.gz.
- Распакуйте архив.
- В интерфейсе Zabbix перейдите в:
Сбор данных → Шаблоны

Нажмите Импорт.

Выберите необходимый файл с шаблоном:

Нажмите Импорт.

После успешного импорта новый шаблон появится в списке
Не изменяйте имена элементов данных, ключей и макросов без необходимости. Они используются в выражениях триггеров.
3. Шаблон CS 2024 single
3.1. Заполнение макросов
Макросы используются шаблоном для формирования адресов модулей и авторизации. Перейдите в настройки шаблона КС24 и откройте раздел Макросы.
Обязательные значения
Проверьте следующие макросы:
| Макрос | Что указать | Значение |
|---|---|---|
| {$DOMAIN} | Имя домена | local.ru |
| {$R7_USERNAME} | Пользователь, созданный на шаге 1 | r7_zabbix |
| {$R7_PASSWORD} | Пароль этого пользователя | password (пароль, созданный ранее) |
| {$SHEMA} | Протокол подключения | http |
Пример: Если сервер доступен по адресу https://admin.company.ru, то:
- {$SHEMA} = https;
- {$CDADMIN} = admin;
- {$DOMAIN} = company.ru.
Макросы модулей
Следующие макросы определяют префиксы, используемые в адресах модулей:
| Макрос | Значение по умолчанию | Модуль |
|---|---|---|
| {$CDADMIN} | admin | P7 Управление |
| {$CDDISK} | cddisk | P7 Диск |
| {$CDMAIL} | cdmail | P7 Почта |
| {$CALENDAR} | calendar | P7 Календарь |
| {$CONTACTS} | contacts | P7 Контакты |
| {$DRAW} | draw | P7 Графика |
| {$DS} | ds | Сервер документов |
| {$PROJECTS} | projects | P7 Проекты |
3.2. Элементы данных
Шаблон использует стандартные элементы данных Zabbix для проверки доступности TCP-сервисов и количества процессов.
Проверка TCP-сервисов
Для TCP-проверок используется ключ:
net.tcp.service
Результат проверки:
- 0 — сервис недоступен;
- 1 — сервис доступен.
При использовании службы TCP указание порта обязательно
Например:
net.tcp.service[tcp,,5432] проверяет доступность PostgreSQL на порту 5432.
Основные проверки:
| Компонент | Ключ |
|---|---|
| nginx HTTP | net.tcp.service[http,,80] |
| nginx HTTPS | net.tcp.service[https,,443] |
| RabbitMQ-сервер | net.tcp.service[tcp,,5672] |
| Redis | net.tcp.service[tcp,,6379] |
| PostgreSQL | net.tcp.service[tcp,,5432] |
| cddisk.api | net.tcp.service[tcp,,38033] |
| cddisk:apisson | net.tcp.service[tcp,,38034] |
| cddisk:registry | net.tcp.service[tcp,,7777] |
| cddisk:searchapi | net.tcp.service[tcp,,2664] |
| cddisk:filestorage_http | net.tcp.service[http,,11580] |
| cddisk:filestorage_tcp | net.tcp.service[tcp,,11581] |
| Сервер документов | net.tcp.service[tcp,,8000] |
| Сервер документов metrics | net.tcp.service[tcp,,8126] |
Проверка процессов
Для контроля количества процессов используется ключ:
proc.num
Пример: proc.num[converter] проверяет количество процессов converter.
Основные проверки:
| Процесс | Ключ | Описание |
|---|---|---|
| Статус сервиса cddisk:processing | proc.num[dotnet,,,Processing ] | Возвращаемое значение: целое число. |
| Статус сервиса ds:converter | proc.num[converter] | Возвращаемое значение: целое число. |
3.3. Веб-сценарии
Веб-сценарии проверяют доступность пользовательских интерфейсов модулей.
Перед обращением к большинству модулей выполняется авторизация в P7 Управление. URL: {{$SHEMA}}://{{$CDADMIN}}.{{$DOMAIN}}/api/v2/auth/login
Для успешной проверки веб-сценария должен быть получен ожидаемый HTTP-код ответа. Для соответствующих сценариев используется код: 200
3.4. Триггеры
Триггер создаёт проблему в Zabbix, когда сервис становится недоступен или перестают поступать данные.
Для сетевых сервисов используется два условия:
- сервис недоступен;
- от элемента данных не поступают новые значения.
Это позволяет отличать реальную проблему сервиса от ситуации, когда агент перестал передавать данные.
| Имя | Выражение проблемы | Выражение восстановления | Описание |
|---|---|---|---|
| nginx_80 не запущен | last(/CS 2024/net.tcp.service[http,,80])=0 or nodata(/CS 2024/net.tcp.service[http,,80],150s)=1 | last(/CS 2024/net.tcp.service[http,,80])=1 | Контроль HTTP-сервиса nginx на порту 80. |
| nginx_443 не запущен | last(/CS 2024/net.tcp.service[https,,443])=0 or nodata(/CS 2024/net.tcp.service[https,,443],150s)=1 | last(/CS 2024/net.tcp.service[https,,443])=1 | Контроль HTTPS-сервиса nginx на порту 443. |
| PostgreSQL не запущен | last(/CS 2024/net.tcp.service[tcp,,5432])=0 or nodata(/CS 2024/net.tcp.service[tcp,,5432],150s)=1 | last(/CS 2024/net.tcp.service[tcp,,5432])=1 | Контроль PostgreSQL. |
| RabbitMQ-server не запущен | last(/CS 2024/net.tcp.service[tcp,,5672])=0 or nodata(/CS 2024/net.tcp.service[tcp,,5672],150s)=1 | last(/CS 2024/net.tcp.service[tcp,,5672])=1 | Контроль RabbitMQ. |
| redis не запущен | last(/CS 2024/net.tcp.service[tcp,,6379])=0 or nodata(/CS 2024/net.tcp.service[tcp,,6379],150s)=1 | last(/CS 2024/net.tcp.service[tcp,,6379])=1 | Контроль Redis. |
| Доступность Р7-Календарь | last(/CS 2024/web.test.fail[Доступность Р7-Календарь])=1 or nodata(/CS 2024/web.test.error[Доступность Р7-Календарь],150s)=0 | Контроль веб-сценария Р7-Календаря. | |
| Доступность Р7-Управление | last(/CS 2024/web.test.fail[Доступность Р7-Управление])=1 or nodata(/CS 2024/web.test.error[Доступность Р7-Управление],150s)=0 | Контроль веб-сценария Р7-Управления. | |
| Доступность Р7-Диск | last(/CS 2024/web.test.fail[Доступность Р7-Диск])=1 or nodata(/CS 2024/web.test.error[Доступность Р7-Диск],150s)=0 | Контроль веб-сценария Р7-Диска. | |
| Доступность Р7-Почта | last(/CS 2024/web.test.fail[Доступность Р7-Почта])=1 or nodata(/CS 2024/web.test.error[Доступность Р7-Почта],150s)=0 | Контроль веб-сценария Р7-Почты. | |
| Доступность Р7-Проекты | last(/CS 2024/web.test.fail[Доступность Р7-Проекты])=1 or nodata(/CS 2024/web.test.error[Доступность Р7-Проекты],150s)=0 | Контроль веб-сценария Р7-Проектов. | |
| Доступность Р7-Контакты | last(/CS 2024/web.test.fail[Доступность Р7-Контакты])=1 or nodata(/CS 2024/web.test.error[Доступность Р7-Контакты],150s)=0 | Контроль веб-сценария Р7-Контактов. | |
| Доступность Сервера документов | last(/CS 2024/web.test.fail[Доступность Сервер документов])=1 or nodata(/CS 2024/web.test.error[Доступность Сервер документов],150s)=0 | Контроль веб-сценария Сервера документов. | |
| Доступность Р7-Графика | last(/CS 2024/web.test.fail[Доступность Р7-Графика])=1 or nodata(/CS 2024/web.test.error[Доступность Р7-Графика],150s)=0 | Контроль веб-сценария Р7-Графики. | |
| Сервер документов converter не запущен | last(/CS 2024/proc.num[converter])<2 or nodata(/CS 2024/proc.num[converter],150s)=1 | last(/CS 2024/proc.num[converter])>=3 | Контроль количества процессов Converter. |
| Сервер документов ds_docservice не запущен | last(/CS 2024/net.tcp.service[tcp,,8000])=0 or nodata(/CS 2024/net.tcp.service[tcp,,8000],150s)=1 | last(/CS 2024/net.tcp.service[tcp,,8000])=1 | Контроль DocService. |
| Сервер документов ds_metrics не запущен | last(/CS 2024/net.tcp.service[tcp,,8126])=0 or nodata(/CS 2024/net.tcp.service[tcp,,8126],150s)=1 | last(/CS 2024/net.tcp.service[tcp,,8126])=1 | Контроль сервиса метрик. |
| процесс cddisk не запущен | last(/CS 2024/net.tcp.service[tcp,,38034])=0 or nodata(/CS 2024/net.tcp.service[tcp,,38034],150s)=1 | last(/CS 2024/net.tcp.service[tcp,,38034])=1 | Контроль SSO. |
| процесс cddisk не запущен | last(/CS 2024/net.tcp.service[tcp,,38033])=0 or nodata(/CS 2024/net.tcp.service[tcp,,38033],150s)=1 | last(/CS 2024/net.tcp.service[tcp,,38033])=1 | Контроль API. |
| процесс cddisk не запущен | last(/CS 2024/net.tcp.service[http,,11580])=0 or nodata(/CS 2024/net.tcp.service[http,,11580],150s)=1 | last(/CS 2024/net.tcp.service[http,,11580])=1 | Контроль HTTP Filestorage. |
| процесс cddisk не запущен | last(/CS 2024/net.tcp.service[tcp,,11581])=0 or nodata(/CS 2024/net.tcp.service[tcp,,11581],150s)=1 | last(/CS 2024/net.tcp.service[tcp,,11581])=1 | Контроль TCP Filestorage. |
| процесс cddisk не запущен | last(/CS 2024/proc.num[dotnet,,,Processing])=0 or nodata(/CS 2024/proc.num[dotnet,,,Processing],150s)=1 | last(/CS 2024/proc.num[dotnet,,,Processing])=1 | Контроль Processing. |
| процесс cddisk не запущен | last(/CS 2024/net.tcp.service[tcp,,7777])=0 or nodata(/CS 2024/net.tcp.service[tcp,,7777],150s)=1 | last(/CS 2024/net.tcp.service[tcp,,7777])=1 | Контроль Registry. |
| процесс cddisk не запущен | last(/CS 2024/net.tcp.service[tcp,,2664])=0 or nodata(/CS 2024/net.tcp.service[tcp,,2664],150s)=1 | last(/CS 2024/net.tcp.service[tcp,,2664])=1 | Контроль Search API. |
Если при последней проверке веб-служба на 80 порту (HTTP) была недоступна, Zabbix получает 0. Условие становится истинным (1), и триггер переходит в статус «Проблема». Если в течение последних 150 секунд (2.5 минут) Zabbix не получил ни одного значения по этому элементу данных, функция nodata() возвращает 1. Условие выполняется, и триггер бьет тревогу.
Выражение восстановления с условием last(/CS 2024/net.tcp.service[http,,80])=1 переведет триггер из состояния «Проблема» обратно в состояние «ОК», как только веб-служба на 80 порту снова станет доступной.
4. Шаблон R7 — CS 2024 middle
Шаблон предназначен для распределённой установки Корпоративного сервера 2024.
4.1. Структура
| Имя | Описание |
|---|---|
| R7 — CS — API Linux | Ноды сервиса API |
| R7 — CS — Filesorage Linux | Ноды сервиса Filesorage |
| R7 — CS — Processing Linux | Ноды сервиса Backend Processing |
| R7 — CS — Registry Linux | Ноды сервиса Registry |
| R7 — CS — Search Linux | Ноды сервиса Search |
| R7 — CS — SSO Linux | Ноды сервиса SSO |
| R7 — CS — Webscenario | Проверка веб-доступности |
шаблон middle состоит из нескольких связанных шаблонов. Поэтому при настройке необходимо проверить не только основной шаблон, но и соответствующие узлы сервисов.
Для корректной работы шаблона R7 — CS — Webscenario необходимо заполнить данные в макросах:

4.2. Элементы данных
| Имя | Ключ | Описание |
|---|---|---|
| R7-CS: Process info raw | proc.get[dotnet,,R7. Storage.Server.Api.H ost.dll,process] | Получает информацию о процессе dotnet. |
| R7-CS: number of context switches | ctx_switches | Показывает частоту переключения процессора между потоками процесса. |
| R7-CS: number of page faults | page_faults | Показывает количество обращений процесса к данным, не находящимся в его рабочем наборе. Увеличение этого значения может указывать на дефицит физической памяти или неоптимальное использование кэша. |
| R7-CS: number of threads | threads | Позволяет отслеживать утечки потоков или аномальное увеличение параллелизма. |
| R7-CS: percentage of real memory | pmem | Процент от общего объема физической памяти, занимаемой процессом. Оценка нагрузки на ОЗУ |
| R7-CS: process state | state | Состояние процесса |
| R7-CS: size of data segment from process | data | Размер сегмента данных процесса (data segment). Отражает объем памяти, выделенной под данные приложения |
| R7-CS: size of process | size | Общий размер процесса. Характеризует общий объем памяти, занимаемый исполняемым образом. |
| R7-CS: size of swap space | swap | Объем использованного swap-пространства (подкачки) для данного процесса. |
| R7-CS: total CPU seconds (system) | cpu time system | Общее время использования CPU в режиме ядра (system time) для процесса (в секундах). Показывает нагрузку на системные вызовы. |
| R7-CS: total CPU seconds (user) | cpu time user | Общее время использования CPU в пользовательском режиме (user time) для процесса. |
| R7-CS: virtual memory size | v size | Общий объем виртуальной памяти, выделенной процессу. |
| R7-CS: Cratyc HTTP-сервиса API | net.tcp.service[h ttp, 38033] | Выполняет проверку доступности TCP-порта 38033, на котором работает HTTP-сервис API. |
| R7-CS: Cratyc HTTP-сервиса Filesorage | net.tcp.service[h ttp, 11580] | Проверяет доступность HTTP-сервиса Filesorage по порту 11580 |
| R7-CS: Cratyc TCP-сервиса Filesorage | net.tcp.service[t cp, 11581] | Проверяет доступность TCP-сервиса Filesorage по порту 11581 |
| R7-CS: Cratyc HTTP-сервиса Registry | net.tcp.service[h ttp, 7777] | Проверяет доступность HTTP-сервиса Registry по порту 7777 |
| R7-CS: Cratyc HTTP-сервиса Search | net.tcp.service[h ttp, 2664] | Проверяет доступность HTTP-сервиса поиска (Search) по порту 2664 |
| R7-CS: Cratyc HTTP-сервиса SSO | net.tcp.service[h ttp, 38034] | Проверяет доступность сервиса SSO по порту 38034 |
4.3. Веб-сценарии
Веб-сценарии работают по тому же принципу, что и в CS 2024 single: сначала выполняется авторизация, затем проверяется доступность соответствующего модуля (подробнее см. п. 3.2).
4.4. Триггеры
Триггеры middle контролируют доступность отдельных сервисов и портов.
Для сетевых сервисов используется два условия:
- сервис недоступен;
- от элемента данных не поступают новые значения.
Это позволяет отличать реальную проблему сервиса от ситуации, когда агент перестал передавать данные.
| Имя | Выражение проблемы | Выражение восстановления | Описание |
|---|---|---|---|
| Доступность P7-Календарь | last(/CS 2024/web.test.fail[Доступность P7-Календарь])=1 or nodata(/CS 2024/web.test.error[Доступность P7-Календарь],150s)=0 | Контроль веб-сценария P7-Календаря. | |
| Доступность P7-Управление | last(/CS 2024/web.test.fail[Доступность P7-Управление])=1 or nodata(/CS 2024/web.test.error[Доступность P7-Управление],150s)=0 | Контроль веб-сценария P7-Управления. | |
| Доступность P7-Диск | last(/CS 2024/web.test.fail[Доступность P7-Диск])=1 or nodata(/CS 2024/web.test.error[Доступность P7-Диск],150s)=0 | Контроль веб-сценария P7-Диска. | |
| Доступность P7-Почта | last(/CS 2024/web.test.fail[Доступность P7-Почта])=1 or nodata(/CS 2024/web.test.error[Доступность P7-Почта],150s)=0 | Контроль веб-сценария P7-Почты. | |
| Доступность P7-Проекты | last(/CS 2024/web.test.fail[Доступность P7-Проекты])=1 or nodata(/CS 2024/web.test.error[Доступность P7-Проекты],150s)=0 | Контроль веб-сценария P7-Проектов. | |
| Доступность P7-Контакты | last(/CS 2024/web.test.fail[Доступность P7-Контакты]=1 or nodata(/CS 2024/web.test.error[Доступность P7-Контакты],150s)=0 | Контроль веб-сценария P7-Контактов. | |
| Доступность Сервера документов | last(/CS 2024/web.test.fail[Доступность Сервер документов)]=1 or nodata(/CS 2024/web.test.error[Доступность Сервер документов],150s)=0 | Контроль веб-сценария Сервера документов. | |
| Доступность P7-Графика | last(/CS 2024/web.test.fail[Доступность P7-Графика)]=1 or nodata(/CS 2024/web.test.error[Доступность P7-Графика],150s)=0 | Контроль веб-сценария P7-Графики. | |
| Недоступен порт http-службы API | max(/R7 — CS 2024 middle/net.tcp.service[http,,38033], #3)=0 | count(/R7 — CS 2024 middle/net.tcp.service[http,,38033], #3, «eq», «1»)>=3 | Сигнализирует о недоступности HTTP-интерфейса API. |
| Недоступен порт http-службы Filestorage | last(/R7 — CS 2024 middle/net.tcp.service[http,,11580])=0 | last(/R7 — CS 2024 middle/net.tcp.service[http,,11580])=1 | Контроль HTTP-сервиса Filestorage. |
| Недоступен порт http-службы Registry | last(/R7 — CS 2024 middle/net.tcp.service[http,,7777])=0 | last(/R7 — CS 2024 middle/net.tcp.service[http,,7777])=1 | Контроль Registry. |
| Недоступен порт http-службы Search | last(/R7 — CS 2024 middle/net.tcp.service[http,,2664])=0 | last(/R7 — CS 2024 middle/net.tcp.service[http,,2664])=1 | Контроль Search. |
| Недоступен порт http-службы SSO | last(/R7 — CS 2024 middle/net.tcp.service[http,,38034])=0 | last(/R7 — CS 2024 middle/net.tcp.service[http,,38034])=1 | Контроль SSO. |
| Недоступен порт tcp-службы Filestorage | last(/R7 — CS 2024 middle/net.tcp.service[tcp,,11581])=0 | last(/R7 — CS 2024 middle/net.tcp.service[tcp,,11581])=1 | Проверка TCP-порта 11581 Filestorage. |
5. Шаблон Gluster Storage
Шаблон используется для мониторинга состояния кластера Gluster Storage. Он позволяет контролировать:
- количество томов;
- количество узлов;
- количество активных узлов.
5.1. Элементы данных
| Имя | Ключ | Описание |
|---|---|---|
| Gluster Storage Volume Number | gluster_storage_info[ «volume_count»] | Возвращает общее количество томов, созданных в кластере. |
| Gluster Storage Nodes | gluster_storage_info[ «node_count»] | Возвращает общее количество узлов кластера. |
| Gluster Storage Active Nodes | gluster_storage_info[ «nodes_active»] | Возвращает количество активных узлов. |
5.2. Триггеры
| Имя | Выражение проблемы | Описание |
|---|---|---|
| Gluster storage nodes is not online | last(/Gluster Storage Template/gluster_storage_info[«nodes_active»]) < last(/Gluster Storage Template/gluster_storage_info[«node_count»]) | Срабатывает, если количество активных узлов меньше общего количества узлов кластера. |
5.3. Настройка автоматического обнаружения
Для работы правил автоматического обнаружения:
1. Распакуйте архив с шаблоном на сервере, который отслеживается Zabbix.
2. Перенесите gstatus_discovery.py в /etc/zabbix/
3. Перенесите файл glusterfs.conf в /etc/zabbix/zabbix_agent2.conf.d/
4. Разрешите пользователю zabbix запускать скрипт:
visudo zabbix ALL=(ALL) NOPASSWD: /etc/zabbix/gstatus_discovery.py
5. Проверьте работу скрипта:
sudo -H -u zabbix bash -c 'python3 /etc/zabbix/gstatus_discovery.py'
6. Импортируйте шаблон Gluster Storage в Zabbix (см. п.2.2.).
Скрипт получает сведения о томах и узлах Gluster Storage и передаёт их в Zabbix для автоматического обнаружения.
5.4. Прототипы элементов данных
| Имя | Ключ | Описание |
|---|---|---|
| GlusterFS Утилизация пула {#VOLUME_NAME} | gluster_volume_uses_space[{#VOLUME_NAME}] | Показывает процент использованного пространства в указанном томе. |
| Gluster Volume % Free Space {#VOLUME_NAME} | gluster_volume_free_space[{#VOLUME_NAME}] | Возвращает процент свободного пространства в томе. |
| Gluster Volume nr_entries {#VOLUME_NAME} | gluster_volume_info[«nr_entries», {#VOLUME_NAME}] | Показывает количество файлов и директорий в томе. |
| Gluster Volume snapshot_count on {#VOLUME_NAME} | gluster_volume_info[«snapshot_count», {#VOLUME_NAME}] | Возвращает количество снапшотов тома. |
| Gluster Volume state on {#VOLUME_NAME} | gluster_volume_info[«health», {#VOLUME_NAME}] | Показывает состояние тома. |
| Gluster Volume Total Size on {#VOLUME_NAME} | gluster_volume_info[«size_total», {#VOLUME_NAME}] | Общий размер тома. |
| Gluster Volume Used Size on {#VOLUME_NAME} | gluster_volume_info[«size_used», {#VOLUME_NAME}] | Объём занятого пространства. |
5.5. Прототипы триггеров
| Имя | Выражение проблемы | Описание |
|---|---|---|
| Gluster nr_entries is above 0 | last(/Gluster Storage Template/gluster_volume_info[«nr_entries», {«#VOLUME_NAME}]})>0 | Сигнализирует о наличии файлов или директорий в томе. |
| Gluster Volume Free Space is less than {$GLUSTERFS.SPACE.MIN.WARN} | last(/Gluster Storage Template/gluster_volume_free_space[{#VOLUME_NAME}]), #1:now-5m)<{$GLUSTERFS.SPACE.MIN.WARN} | Сигнализирует о недостатке свободного места. |
| Gluster Volume state in {#VOLUME_NAME} is down | find(/Gluster Storage Template/gluster_volume_info[«health», {«#VOLUME_NAME}]), #5, «like», «up»)=0 | Сигнализирует о переходе тома GlusterFS в нерабочее состояние. |
6. Шаблон PostgreSQL_Zabbix
Шаблон PostgreSQL используется для контроля состояния базы данных и основных показателей её работы. Перед импортом шаблона необходимо установить PostgreSQL-плагин для Zabbix Agent 2 и создать пользователя для мониторинга.
6.1. Установка и настройка
Шаг 1. Установите плагин PostgreSQL
Подключите официальный репозиторий Zabbix:
wget https://repo.zabbix.com/zabbix/7.0/debian/pool/main/z/zabbix-release/ zabbix-release_latest_7.0+debian13_all.deb dpkg -i zabbix-release_latest_7.0+debian13_all.deb apt update apt install zabbix-agent2-plugin-postgresql
Шаг 2. Проверьте конфигурацию плагина
Обычно конфигурационный файл находится здесь:
/etc/zabbix/zabbix_agent2.d/plugins.d/postgresql.conf
Проверьте наличие строки:
Plugins.PostgreSQL.System.Path=/usr/lib/zabbix-agent2/plugins/postgresql
В большинстве дистрибутивов путь уже задан автоматически.
Если путь отличается, найдите исполняемый файл:
find / -name postgresql 2>/dev/null
Шаг 3. Проверьте подключение конфигурации
В zabbix_agent2.conf должна быть подключена конфигурация плагинов:
Include=/etc/zabbix/zabbix_agent2.d/plugins.d/*.conf
Шаг 4. Перезапустите Zabbix Agent 2
systemctl restart zabbix-agent2
Шаг 5. Проверьте журнал агента
/var/log/zabbix/zabbix_agent2.log
В журнале должно появиться сообщение об успешной загрузке PostgreSQL-плагина.
Шаг 6. Создайте пользователя PostgreSQL
Создайте пользователя для мониторинга:
CREATE USER zbx_monitor WITH PASSWORD '<PASSWORD>' INHERIT; GRANT pg_monitor TO zbx_monitor;
Шаг 7. Разрешите подключение в pg_hba.conf
Отредактируйте pg_hba.conf конфигурационный файл, чтобы разрешить подключения для пользователя zbx_monitor.
Например, для разрешения локальных TCP-подключений с одного и того же хоста можно добавить одну из перечисленных ниже строк:

Шаг 8. Импортируйте шаблон PostgreSQL
Импортируйте шаблон в Zabbix способом, описанным в разделе 2.2.
6.2. Макросы PostgreSQL
| Имя | Описание | Значение по умолчанию |
|---|---|---|
| {$PG.CONNSTRING.AGENT 2} | URI или именованная сессия экземпляра PostgreSQL. | tcp://localhost:5432 |
| {$PG.USER} | Имя пользователя PostgreSQL. | zbx_monitor |
| {$PG.PASSWORD} | Пароль пользователя PostgreSQL. | |
| {$PG.DATABASE} | База данных, используемая для подключения. | postgres |
| {$PG.LLD.FILTER.DBNAME} | Фильтр баз данных, доступных для обнаружения. | . + |
| {$PG.LLD.FILTER.APPLICATION} | Фильтр приложений, доступных для обнаружения. | . + |
| {$PG.DEADLOCKS.MAX.WA RN} | Максимальное количество взаимодействующих для срабатывания триггера. | 0 |
| {$PG.CONN_TOTAL_PCT.M AX.WARN} | Максимальный процент используемых подключений. | 90 |
| {$PG.CONFLICTS.MAX.WA RN} | Максимальное количество конфликтов восстановления. | 0 |
| {$PG.QUERY_ETIME.MAX. WARN} | Порог времени выполнения медленного запроса. | 30 |
| {$PG.SLOW_QUERIES.MAX .WARN} | Максимальное количество медленных запросов для срабатывания триггера. | 5 |
6.3. Элементы данных PostgreSQL
Элементы данных получают статистику PostgreSQL. Часть элементов является мастер-элементами: они получают полный набор данных, а остальные элементы извлекают из него отдельные показатели.
| Имя | Ключ | Описание |
|---|---|---|
| Get bgwriter | pgsql.bgwriter[«$PG.CONNSTRING .AGENT2]»,»{$PG.USER}»,»{$PG.PASSWORD}»,»{$PG.DATABASE}» | Получение полной статистики фонового писателя PostgreSQL. |
| Get archive | pgsql.archive[«$PG.CONNSTRING .AGENT2]»,»{$PG.USER}»,»{$PG.PASSWORD}»,»{$PG.DATABASE}» | Получение статистики архивации WAL. |
| Get dbstat | pgsql.dbstat[«$PG.CONNSTRING.AGENT2]»,»{$PG.USER}»,»{$PG.PASSWORD}»,»{$PG.DATABASE}» | Получение статистики по базам данных. |
| Get dbstat sum | pgsql.dbstat.sum[«$PG.CONNSTRING .AGENT2]»,»{$PG.USER}»,»{$PG.PASSWORD}»,»{$PG.DATABASE}» | Суммарная статистика по базам данных. |
| Get connections sum | pgsql.connections[«$PG.CONNSTRING .AGENT2]»,»{$PG.USER}»,»{$PG.PASSWORD}»,»{$PG.DATABASE}» | Информация о подключениях. |
| Get WAL | pgsql.wal.stat[«$PG.CONNSTRING .AGENT2]»,»{$PG.USER}»,»{$PG.PASSWORD}»,»{$PG.DATABASE}» | Статистика WAL. |
| Get locks | pgsql.locks[«$PG.CONNSTRING .AGENT2]»,»{$PG.USER}»,»{$PG.PASSWORD}»,»{$PG.DATABASE}» | Информация о блокировках. |
| Custom queries | pgsql.custom.query[«$PG.CONNSTRING .AGENT2]»,»{$PG.USER}»,»{$PG.PASSWORD}»,»{$PG.DATABASE}» | Выполнение пользовательского SQL-запроса. |
| Get replication | pgsql.replication.process[«$PG.CONNSTRING .AGENT2]»,»{$PG.USER}»,»{$PG.PASSWORD}»,»{$PG.DATABASE}» | Информация о процессах репликации. |
| Get queries | pgsql.queries[«$PG.CONNSTRING .AGENT2]»,»{$PG.USER}»,»{$PG.PASSWORD}»,»{$PG.DATABASE}»»,»{$PG.QUERY_ETIME.MAX.WARN}» | Информация о медленных запросах. |
| Version | pgsql.version[«$PG.CONNSTRING .AGENT2]»,»{$PG.USER}»,»{$PG.PASSWORD}»,»{$PG.DATABASE}» | Версия PostgreSQL. |
| WAL: Bytes written | pgsql.wal.write | Количество байт, записанных в WAL. |
| WAL: Bytes received | pgsql.wal.receive | Количество байт, полученных при репликации. |
| WAL: Segments count | pgsql.wal.count | Количество WAL-сегментов в pg_wal. |
| Bqwriter: Buffers allocated per second | pgsql.bqwriter.buffers_alloc.rate | Количество выделенных буферов в секунду. |
| Bqwriter: Buffers written directly by a backend per second | pgsql.bqwriter.buffers_backend.rate | Количество буферов, записанных backend-процессом в секунду. |
| Bqwriter: Number of bqwriter cleaning scan stopped per second | pgsql.bqwriter.maxwritten_clean.rate | Количество остановок очистки bqwriter из-за лимита записей. |
| Bqwriter: Times a backend executed its own fsync per second | pgsql.bqwriter.buffers_backend_fsync.rate | Количество операций fsync, выполненных backend. |
| Checkpoint: Buffers written by the background writer per second | pgsql.bqwriter.buffers_clean.rate | Количество буферов, очищенных bqwriter. |
| Checkpoint: Buffers written during checkpoints per second | pgsql.bqwriter.buffers_checkpoint.rate | Количество буферов, записанных во время checkpoint. |
| Checkpoint: Scheduled per second | pgsql.bqwriter.checkpoints_time.d.rate | Количество плановых checkpoint. |
| Checkpoint: Requested per second | pgsql.bqwriter.checkpoints_req.rate | Количество checkpoint по запросу. |
| Checkpoint: Checkpoint write time per second | pgsql.bqwriter.checkpoint_write_time.rate | Время записи checkpoint. |
| Checkpoint: Checkpoint sync time per second | pgsql.bgwriter.checkpoint_sync_time.rate | Время синхронизации checkpoint. |
| Archive: Count of archived files | pgsql.archive.count_archived_files | Количество успешно архивированных WAL-файлов. |
| Dbstat: Conflicts per second | pgsql.dbstat.sum.conflicts.rate | Количество конфликтов за секунду. |
| Dbstat: Deadlocks per second | pgsql.dbstat.sum.deadlocks.rate | Количество взаимодейников за секунду. |
| Dbstat: Disk blocks read per second | pgsql.dbstat.sum.blks_read.rate | Количество блоков, прочитанных с диска за секунду. |
| Dbstat: Hit blocks read per second | pgsql.dbstat.sum.blks_hit.rate | Количество блоков, прочитанных из кэша за секунду. |
| Dbstat: Number temp bytes per second | pgsql.dbstat.sum.temp_bytes.rate | Объём временных файлов за секунду. |
| Dbstat: Number temp files per second | pgsql.dbstat.sum.temp_files.rate | Количество временных файлов за секунду. |
| Dbstat: Roll backed transactions per second | pgsql.dbstat.sum.xact_rollback.rate | Количество откатов транзакций за секунду. |
| Dbstat: Rows deleted per second | pgsql.dbstat.sum.tup_deleted.rate | Количество удалённых строк за секунду. |
| Dbstat: Rows fetched per second | pgsql.dbstat.sum.tup_fetched.rate | Количество полученных строк за секунду. |
| Dbstat: Rows inserted per second | pgsql.dbstat.sum.tup_inserted.rate | Количество вставленных строк за секунду. |
| Dbstat: Rows returned per second | pgsql.dbstat.sum.tup_returned.rate | Количество возвращённых строк за секунду. |
| Dbstat: Rows updated per second | pgsql.dbstat.sum.tup_updated.rate | Количество обновлённых строк за секунду. |
| Dbstat: Backends connected | pgsql.dbstat.sum.numbackends | Количество активных подключений. |
| Connections sum: Active | pgsql.connections.sum.active | Количество активных подключений. |
| Connections sum: Fastpath function call | pgsql.connections.sum.fastpath_function_call | Количество подключений, выполняющих fastpath-функции. |
| Connections sum: Idle | pgsql.connections.sum.idle | Количество простаивающих подключений. |
| Connections sum: Idle in transaction | pgsql.connections.sum.idle_in_transaction | Количество подключений в ожидании транзакции. |
| Connections sum: Prepared | pgsql.connections.sum.prepared | Количество подготовленных транзакций. |
| Connections sum: Total | pgsql.connections.sum.total | Общее количество подключений. |
| Connections sum: Total, % | pgsql.connections.sum.total_pct | Процент от максимального числа подключений. |
| Connections sum: Waiting | pgsql.connections.sum.waiting | Количество подключений, ожидающих блокировку. |
| Connections sum: Idle in transaction (aborted) | pgsql.connections.sum.idle_in_transaction_aborted | Количество подключений в прерванной транзакции. |
| Connections sum: Disabled | pgsql.connections.sum.disabled | Количество отключённых подключений. |
| Age of oldest xid | pgsql.oldest.xid[«$PG.CONNSTRI NG.AGENT2″],»{$PG.USER}»,»{$PG.PASSWORD}»,»{$PG.DATABASE}» | Возраст самого старого XID. |
| Count of autovacuum workers | pgsql.autovacuum.count[«$PG.CO NNSTRING.AGENT2]»,»{$PG.USER}»,»{$PG.PASSWORD}»,»{$PG.DATABASE }» | Количество работающих процессов autovacuum. |
| Cache hit ratio, % | pgsql.cache.hit | Процент попаданий в кэш. |
| Uptime | pgsql.uptime[«$PG.CONNSTRING.A GENT2}», «{$PG.USER}», «{$PG.PASS WORD}», «{$PG.DATABASE}» | Время работы PostgreSQL. |
| Replication: Lag in bytes | pgsql.replication.lag.b[«{$PG.C ONNSTRING.AGENT2}», «{$PG.USER}» , «{$PG.PASSWORD}», «{$PG.DATABASE}» | Задержка репликации в байтах. |
| Replication: Lag in seconds | pgsql.replication.lag.sec[«{$PG .CONNSTRING.AGENT2}», «{$PG.USER }», «{$PG.PASSWORD}», «{$PG.DATABASE}» | Задержка репликации в секундах. |
| Replication: Recovery role | pgsql.replication.recovery_role [«{$PG.CONNSTRING.AGENT2}», «{$PG.G.USER}», «{$PG.PASSWORD}», «{$PG.DATABASE}» | Роль сервера: primary или standby. |
| Replication: Standby count | pgsql.replication.count[«{$PG.C ONNSTRING.AGENT2}», «{$PG.USER}» , «{$PG.PASSWORD}», «{$PG.DATABASE}» | Количество standby-серверов. |
| Replication: Status | pgsql.replication.status[«{$PG.CONNSTRING.AGENT2}», «{$PG.USER}» , «{$PG.PASSWORD}», «{$PG.DATABASE}» | Состояние репликации. |
| Ping | pgsql.ping[«{$PG.CONNSTRING.AGE NT2}», «{$PG.USER}», «{$PG.PASSWORD} RD}», «{$PG.DATABASE}» | Проверка доступности PostgreSQL. |
6.4. Триггеры PostgreSQL
| Имя | Выражение проблемы | Описание |
|---|---|---|
| PostgreSQL: Version has changed | last(/PostgreSQL by Zabbix agent 2/pgsql.version[«{$PG.CONNSTRING.AGENT 2}», «{$PG.USER}», «{$PG.PASSWORD}», «{$PG.DATABASE}»], #1) <>last(/PostgreSQL by Zabbix agent 2/pgsql.version[«{$PG.CONNSTRING.AGENT 2}», «{$PG.USER}», «{$PG.PASSWORD}», «{$PG.DATABASE}»], #2) and length(last(/PostgreSQL by Zabbix agent 2/pgsql.version[«{$PG.CONNSTRING.AGENT 2}», «{$PG.USER}», «{$PG.PASSWORD}», «{$PG.DATABASE}»])>0 | Срабатывает при изменении версии PostgreSQL. |
| PostgreSQL: Dbstat: Checksum failures detected | last(/PostgreSQL by Zabbix agent 2/pgsql.dbstat.sum.checksum_failures.rate)>0 | Обнаружение ошибок контрольных сумм. |
| PostgreSQL: Total number of connections is too high | min(/PostgreSQL by Zabbix agent 2/pgsql.connections.sum.total_pct,5m) > {$PG.CONN_TOTAL_PCT.MAX.WARN} | Слишком высокий процент используемых подключений. |
| PostgreSQL: Oldest xid is too big | last(/PostgreSQL by Zabbix agent 2/pgsql.oldest.xid[«$PG.CONNSTRING.AG ENT2″],»{$PG.USER}»,»{$PG.PASSWORD}»,»{$PG.DATABASE}») > 18000000 | Возраст самого старого XID превышает критическое значение. |
| PostgreSQL: Service has been restarted | last(/PostgreSQL by Zabbix agent 2/pgsql.uptime[«$PG.CONNSTRING.AGENT2 ]»,»{$PG.USER}»,»{$PG.PASSWORD}»,»{$PG .DATABASE}») < 10m | Фиксирует недавний перезапуск PostgreSQL. |
| PostgreSQL: Service is down | last(/PostgreSQL by Zabbix agent 2/pgsql.ping[«$PG.CONNSTRING.AGENT2]»,»{$PG.USER}»,»{$PG.PASSWORD}»,»{$PG.D ATABASE}») =0 | PostgreSQL недоступен. |
6.5. Прототипы элементов данных Replication discovery
| Имя | Ключ | Описание |
|---|---|---|
| Application [{#APPLICATION_NAME}]: Get replication | pgsql.replication.get_metrics[«{#APPLI CATION_NAME}»] | Получение сводной информации о репликации. |
| Application [{#APPLICATION_NAME}]: Replication flush lag | pgsql.replication.process.flush_lag[«{#APPLICATION_NAME}»] | Задержка репликации на стадии flush. |
| Application [{#APPLICATION_NAME}]: Replication replay lag | pgsql.replication.process.replay_lag[«{#APPLICATION_NAME}»] | Задержка репликации на стадии replay. |
| Application [{#APPLICATION_NAME}]: Replication write lag | pgsql.replication.process.write_lag[«{#APPLICATION_NAME}»] | Задержка репликации на стадии write. |
6.6. Прототипы элементов данных Database discovery
| Имя | Ключ | Описание |
|---|---|---|
| DB [#{DBNAME}]: Get dbstat | pgsql.dbstat.get_metrics[«{#DBNAME}»] | Получение статистики базы данных. |
| DB [#{DBNAME}]: Get locks | pgsql.locks.get_metrics[«#{DBNAME}»] | Получение информации о блокировках. |
| DB [#{DBNAME}]: Get queries | pgsql.queries.get_metrics[«#{DBNAME}»] | Получение информации о запросах. |
| DB [#{DBNAME}]: Database age | pgsql.db.age[«${PG.CONNSTRING.AGENT2}»,»${PG.USER}»,»${PG.PASSWORD}»,»#{DBNAME}»] | Возраст базы данных в транзакциях. |
| DB [#{DBNAME}]: Bloating tables | pgsql.db.boating_tables[«${PG.CONNSTRING.G.AGENT2}»,»${PG.USER}»,»${PG.PASSWORD}»,»#{DBNAME}»] | Количество таблиц с раздуванием. |
| DB [#{DBNAME}]: Database size | pgsql.db.size[«${PG.CONNSTRING.AGENT2}»,»${PG.USER}»,»${PG.PASSWORD}»,»#{DBNAME}»] | Размер базы данных в байтах. |
| DB [#{DBNAME}]: Blocks hit per second | pgsql.dbstat.blks_hit.rate[«#{DBNAME}»] | Попадания в кэш в секунду. |
| DB [#{DBNAME}]: Disk blocks read per second | pgsql.dbstat.blks_read.rate[«#{DBNAME}»] | Блоки, прочитанные с диска в секунду. |
| DB [#{DBNAME}]: Detected conflicts per second | pgsql.dbstat.conflicts.rate[«#{DBNAME}»] | Конфликты репликации в секунду. |
| DB [#{DBNAME}]: Detected deadlocks per second | pgsql.dbstat.deadlocks.rate[«#{DBNAME}»] | Взаимоблокировки в секунду. |
| DB [#{DBNAME}]: Temp_bytes written per second | pgsql.dbstat.temp_bytes.rate[«#{DBNAME}»] | Объём временных файлов в секунду. |
| DB [#{DBNAME}]: Temp_files created per second | pgsql.dbstat.temp_files.rate[«#{DBNAME}»] | Количество временных файлов в секунду. |
| DB [#{DBNAME}]: Tuples deleted per second | pgsql.dbstat.tup_deleted.rate[«{#DBNAME}»] | Количество удалённых строк в секунду. |
| DB [#{DBNAME}]: Tuples fetched per second | pgsql.dbstat.tup_fetched.rate[«{#DBNAME}»] | Количество полученных строк в секунду. |
| DB [#{DBNAME}]: Tuples inserted per second | pgsql.dbstat.tup_inserted.rate[«{#DBNAME}»] | Количество вставленных строк в секунду. |
| DB [#{DBNAME}]: Tuples returned per second | pgsql.dbstat.tup_returned.rate[«{#DBNAME}»] | Количество возвращённых строк в секунду. |
| DB [#{DBNAME}]: Tuples updated per second | pgsql.dbstat.tup_updated.rate[«{#DBNAME}»] | Количество обновлённых строк в секунду. |
| DB [#{DBNAME}]: Commits per second | pgsql.dbstat.xact_commit.rate[«{#DBNAME}»] | Количество зафиксированных транзакций в секунду. |
| DB [#{DBNAME}]: Rollbacks per second | pgsql.dbstat.xact_rollback.rate[«{#DBNAM E}»] | Количество откатов транзакций в секунду. |
| DB [#{DBNAME}]: Backends connected | pgsql.dbstat.numbackends[«{#DBNAME}»] | Текущее количество подключений. |
| DB [#{DBNAME}]: Checksum failures | pgsql.dbstat.checksum_failures.rate[«{#DB NAME}»] | Количество ошибок контрольных сумм. |
| DB [#{DBNAME}]: Disk blocks read time per second | pgsql.dbstat.blk_read_time.rate[«{#DBNAM E}»] | Время чтения блоков. |
| DB [#{DBNAME}]: Disk blocks write time | pgsql.dbstat.blk_write_time.rate[«{#DBNA ME}»] | Время записи блоков. |
| DB [#{DBNAME}]: Num of accessexclusive locks | pgsql.locks.accessexclusive[«{#DBNAME}»] | Количество блокировок AccessExclusive. |
| DB [#{DBNAME}]: Num of accessshare locks | pgsql.locks.accessshare[«{#DBNAME}»] | Количество блокировок AccessShare. |
| DB [#{DBNAME}]: Num of exclusive locks | pgsql.locks.exclusive[«{#DBNAME}»] | Количество блокировок Exclusive. |
| DB [#{DBNAME}]: Num of rowexclusive locks | pgsql.locks.rowexclusive[«{#DBNAME}»] | Количество блокировок RowExclusive. |
| DB [#{DBNAME}]: Num of rowshare locks | pgsql.locks.rowshare[«{#DBNAME}»] | Количество блокировок RowShare. |
| DB [#{DBNAME}]: Num of sharerowexclusive locks | pgsql.locks.sharerowexclusive[«{#DBNAME}»] | Количество блокировок ShareRowExclusive. |
| DB [#{DBNAME}]: Num of shareupdateexclusive locks | pgsql.locks.shareupdateexclusive[«{#DBNAME}ME»] | Количество блокировок ShareUpdateExclusive. |
| DB [#{DBNAME}]: Num of share total | pgsql.locks.share[«{#DBNAME}»] | Количество блокировок Share. |
| DB [#{DBNAME}]: Num of locks total | pgsql.locks.total[«{#DBNAME}»] | Общее количество блокировок. |
| DB [#{DBNAME}]: Queries max maintenance time | pgsql.queries.mro.time_max[«{#DBNAME}»] | Максимальное время обслуживающего запроса. |
| DB [#{DBNAME}]: Queries max query time | pgsql.queries.query.time_max[«{#DBNAME}»] | Максимальное время обычного запроса. |
| DB [#{DBNAME}]: Queries max transaction time | pgsql.queries.tx.time_max[«{#DBNAME}»] | Максимальное время транзакционного запроса. |
| DB [#{DBNAME}]: Queries slow maintenance count | pgsql.queries.mro.slow_count[«{#DBNAME}»] | Количество медленных обслуживающих запросов. |
| DB [#{DBNAME}]: Queries slow query count | pgsql.queries.query.slow_count[«{#DBNAME}»] | Количество медленных обычных запросов. |
| DB [#{DBNAME}]: Queries slow transaction count | pgsql.queries.tx.slow_count[«{#DBNAME}»] | Количество медленных транзакций. |
| DB [#{DBNAME}]: Queries sum maintenance time | pgsql.queries.mro.time_sum[«{#DBNAME}»] | Суммарное время обслуживающих запросов. |
| DB [#{DBNAME}]: Queries sum query time | pgsql.queries.query.time_sum[«{#DBNAME}»] | Суммарное время обычных запросов. |
| DB [#{DBNAME}]: Queries sum transaction time | pgsql.queries.tx.time_sum[«{#DBNAME}»] | Суммарное время транзакционных запросов. |
6.7. Триггеры Database discovery
| Имя | Выражение проблемы | Описание |
|---|---|---|
| PostgreSQL: DB [{#DBNAME}]: Too many recovery conflicts | min(/PostgreSQL by Zabbix agent 2/pgsql.dbstat.conflicts.rate[«{#DBNAME}» ], 5m) > {$PG.CONFLICTS.MAX.WARN: «{#DBNAME}»} | Срабатывает при превышении допустимого количества конфликтов репликации за 5 минут. |
| PostgreSQL: DB [{#DBNAME}]: Checksum failures detected | last(/PostgreSQL by Zabbix agent 2/pgsql.dbstat.checksum_failures.rate[«{#DBNAME}»])>0 | Обнаруживает ошибки контрольных сумм. |
| PostgreSQL: DB [{#DBNAME}]: Too many slow queries | min(/PostgreSQL by Zabbix agent 2/pgsql.queries.query.slow_count[«{#DBNAME}»], 5m})>{$PG.SLOW_QUERIES.MAX.WARN: «{#DBNAME}»} | Слишком большое количество медленных запросов за 5 минут. |
7. Шаблон RabbitMQ cluster
Шаблон предназначен для мониторинга RabbitMQ через Management API.
7.1. Подготовка RabbitMQ
На каждом узле кластера, который необходимо мониторить, должен быть включён Management Plugin.
Шаг 1. Включите Management Plugin
rabbitmq-plugins enable rabbitmq management
Шаг 2. Создайте пользователя для Zabbix
rabbitmqctl add_user zbx_monitor <ПАРОЛЬ>
Шаг 3. Назначьте права (доступ ко всей информации через management API):
rabbitmqctl set_permissions -p / zbx_monitor
Шаг 4. Назначьте тег (например, monitoring)
rabbitmqctl set_user_tags zbx_monitor monitoring
Шаг 5. Импортируйте шаблон
Импортируйте шаблон RabbitMQ cluster в Zabbix.
7.2. Макросы RabbitMQ
| Имя | Описание | Значение по умолчанию |
|---|---|---|
| {$RABBITMQ.API.USER} | Имя пользователя | zbx_monitor |
| {$RABBITMQ.API.PASSWORD} | Пароль пользователя | Zabbix |
| {$RABBITMQ.API.CLUSTER_HOST} | IP-адрес или доменное имя узла | 127.0.0.1 |
| {$RABBITMQ.API.PORT} | Порт Management API RabbitMQ | 15672 |
| {$RABBITMQ.API.SCHEME} | Протокол подключения к API: http или https | http |
| {$RABBITMQ.LLD.FILTER.EXCHANGE.MATCHES} | Регулярное выражение для включения exchange в автоматическое обнаружение | * |
| {$RABBITMQ.LLD.FILTER.EXCHANGE.NOT_MATCHES} | Регулярное выражение для исключения exchange из обнаружения | CHANGE_IF_NEEDED |
Пароль пользователя мониторинга необходимо заменить на фактический пароль. Не рекомендуется оставлять значение по умолчанию.
7.3. Элементы данных
| Имя | Ключ | Описание |
|---|---|---|
| Get overview | web.page.get[«{«RBABITMQ.API.SCHEME}://{«RBABITMQ.API.USER}:{«RBABITMQ.API.PASSWORD}@{«RBABITMQ.API.CLUSTER_HOST}:{«RBABITMQ.API.PORT}/api/overview»} | Получает общую статистику кластера через HTTP API. |
| Get exchanges | web.page.get[«{«RBABITMQ.API.SCHEME}://{«RBABITMQ.API.USER}:{«RBABITMQ.API.PASSWORD}@{«RBABITMQ.API.CLUSTER_HOST}:{«RBABITMQ.API.PORT}/api/exchanges»} | Получает метрики всех exchange. |
| Connections total | rabbitmq.overview.object_tot als.connections | Общее количество подключений. |
| Channels total | rabbitmq.overview.object_tot als.channels | Общее количество каналов. |
| Queues total | rabbitmq.overview.object_tot als.queues | Общее количество очередей. |
| Consumers total | rabbitmq.overview.object_tot als.consumers | Общее количество consumers. |
| Exchanges total | rabbitmq.overview.object_tot als.exchanges | Общее количество exchange. |
| Messages total | rabbitmq.overview.queuee_tota ls.messages | Общее количество сообщений. |
| Messages ready for delivery | rabbitmq.overview.queuee_tota ls.messages.ready | Сообщения, ожидающие доставки. |
| Messages unacknowledged | rabbitmq.overview.queuee_tota ls.messages.unacknowledged | Сообщения, которые ещё не подтверждены consumer. |
| Messages acknowledged | rabbitmq.overview.messages.a ck | Подтверждённые consumer сообщения. |
| Messages acknowledged per second | rabbitmq.overview.messages.a ck.rate | Скорость подтверждения сообщений. |
| Messages confirmed | rabbitmq.overview.messages.c onfirm | Подтверждённые издателем сообщения. |
| Messages confirmed per second | rabbitmq.overview.messages.c onfirm.rate | Скорость подтверждения издателем. |
| Messages delivered | rabbitmq.overview.messages.d eliver_get | Количество доставленных сообщений. |
| Messages delivered per second | rabbitmq.overview.messages.d eliver_get.rate | Скорость доставки сообщений. |
| Messages published | rabbitmq.overview.messages.p ublish | Количество опубликованных сообщений. |
| Messages published per second | rabbitmq.overview.messages.p ublish.rate | Скорость публикации. |
| Messages publish_in | rabbitmq.overview.messages.p ublish_in | Количество сообщений, опубликованных в exchange. |
| Messages publish_in per second | rabbitmq.overview.messages.p ublish_in.rate | Скорость публикации в exchange. |
| Messages publish_out | rabbitmq.overview.messages.p ublish_out | Количество сообщений, опубликованных из exchange. |
| Messages publish_out per second | rabbitmq.overview.messages.p ublish_out.rate | Скорость публикации из exchange. |
| Messages returned unrouteable | rabbitmq.overview.messages.r eturn_unrouteable | Количество недоставленных сообщений, возвращённых издателю. |
| Messages returned unrouteable per second | rabbitmq.overview.messages.r eturn_unrouteable.rate | Скорость возврата недоставленных сообщений. |
| Messages returned redeliver | rabbitmq.overview.messages.r edeliver | Количество повторно доставленных сообщений. |
| Messages returned redeliver per second | rabbitmq.overview.messages.r edeliver.rate | Скорость повторной доставки. |
7.4. Триггеры
| Имя | Выражение проблемы | Описание |
|---|---|---|
| RabbitMQ cluster: Failed to fetch overview data | nodata(/RabbitMQ cluster by Zabbix agent/web.page.get[«{$RABBIT MQ.API.SCHEME}://{$RABBITMQ. API.USER}: {$RABBITMQ.API.PASSWORD}@{$R ABBITMQ.API.CLUSTER_HOST}: {$RABBITMQ.API.PORT}/api/ overview»], 30m)=1 | Zabbix не получал данные от RabbitMQ в течение 30 минут. |
7.5. Прототип элементов данных Health Check
| Имя | Ключ | Описание |
|---|---|---|
| Healthcheck: alarms in effect in the cluster {#SINGLETON} | web.page.get[«{$RABBITMQ .API.SCHEME}:// {$RABBITMQ.API.USER}: {$RABBITMQ.API.PASSWORD} @{$RABBITMQ.API.CLUSTER_HOST}: {$RABBITMQ.API.PORT}/api/health/checks/ alarms{#SINGLETON}»] | При отсутствии активных тревог RabbitMQ возвращает 200 OK. При наличии проблем — 503 Service Unavailable. |
7.6. Прототип триггеров Health Check
| Имя | Выражение проблемы | Описание |
|---|---|---|
| RabbitMQ cluster: There are active alarms in the cluster | last(/RabbitMQ cluster by Zabbix agent/web.page.get[«{$RA BBITMQ.API.SCHEME}://{$R ABBITMQ.API.USER}: {$RABBITMQ.API.PASSWORD} @{$RABBITMQ.API.CLUSTER_HOST}: {$RABBITMQ.API.PORT}/api/health/checks/ alarms{#SINGLETON}»])=0 | Обнаруживает активные аварийные состояния в RabbitMQ. |
7.7. Прототип элементов данных Exchanges discovery
Автоматическое обнаружение позволяет создать элементы мониторинга для каждого обнаруженного exchange.
| Имя | Ключ | Описание |
|---|---|---|
| Exchange [{#VHOST}] [{#EXCHANGE}] [{#TYPE}]: Get data | rabbitmq.get_exchanges [{«#VHOST}/{#EXCHANGE}/{#TYPE}» ] | Получает метрики конкретного exchange. |
| Exchange [{#VHOST}] [{#EXCHANGE}] [{#TYPE}]: Messages acknowledged | rabbitmq.exchange.messages.ack[«{#VHOST}/{#EXCHANGE}/{#TYPE}» ] | Количество подтверждённых consumer сообщений. |
| Exchange [{#VHOST}] [{#EXCHANGE}] [{#TYPE}]: Messages acknowledged per second | rabbitmq.exchange.messages.ack.rate[«{#VHOST}/{#EXCHANGE}/{#TYPE}» ] | Скорость подтверждения сообщений. |
| Exchange [{#VHOST}] [{#EXCHANGE}] [{#TYPE}]: Messages confirmed | rabbitmq.exchange.messages.confirm[«{#VHOST}/{#EXCHANGE}/{#TYPE}» ] | Количество подтверждённых издателем сообщений. |
| Exchange [{#VHOST}] [{#EXCHANGE}] [{#TYPE}]: Messages confirmed per second | rabbitmq.exchange.messages.confirm.rate[«{#VHOST}/{#EXCHANGE}/{#TYPE}» ] | Скорость подтверждения издателем. |
| Exchange [{#VHOST}] [{#EXCHANGE}] [{#TYPE}]: Messages delivered | rabbitmq.exchange.messages.deliver_get[«{#VHOST}/{#EXCHANGE}/{#TYPE}» ] | Количество доставленных сообщений. |
| Exchange [{#VHOST}] [{#EXCHANGE}] [{#TYPE}]: Messages delivered per second | rabbitmq.exchange.messages.deliver_get.rate[«{#VHOST}/{#EXCHANGE}/{#TYPE}» ] | Скорость доставки сообщений. |
| Exchange [{#VHOST}] [{#EXCHANGE}] [{#TYPE}]: Messages published | rabbitmq.exchange.messages.publish[«{#VHOST}/{#EXCHANGE}/{#TYPE}» ] | Количество опубликованных сообщений. |
| Exchange [{#VHOST}] [{#EXCHANGE}] [{#TYPE}]: Messages published per second | rabbitmq.exchange.messages.publish.rate[«{#VHOST}/{#EXCHANGE}/{#TYPE}» ] | Скорость публикации сообщений. |
| Exchange [{#VHOST}] [{#EXCHANGE}] [{#TYPE}]: Messages publish_in | rabbitmq.exchange.messages.publish_in[«{#VHOST}/{#EXCHANGE}/{#TYPE}» | Количество сообщений, опубликованных в exchange. |
| Exchange [{#VHOST}] [{#EXCHANGE}] [{#TYPE}]: Messages publish_in per second | rabbitmq.exchange.messages.publish_in.rate[«{#VHOST}/{#EXCHANGE}/{#TYPE}» | Скорость публикации в exchange. |
| Exchange [{#VHOST}] [{#EXCHANGE}] [{#TYPE}]: Messages publish_out | rabbitmq.exchange.messages.publish_out[«{#VHOST}/{#EXCHANGE}/{#TYPE}» | Количество сообщений, опубликованных из exchange. |
| Exchange [{#VHOST}] [{#EXCHANGE}] [{#TYPE}]: Messages publish_out per second | rabbitmq.exchange.messages.publish_out.rate[«{#VHOST}/{#EXCHANGE}/{#TYPE}» | Скорость публикации из exchange. |
| Exchange [{#VHOST}] [{#EXCHANGE}] [{#TYPE}]: Messages returned unruptable | rabbitmq.exchange.messages.return_unruptable[«{#VHOST}/{#EXCHANGE}/{#TYPE}» | Количество недосталенных сообщений. |
| Exchange [{#VHOST}] [{#EXCHANGE}] [{#TYPE}]: Messages returned unruptable per second | rabbitmq.exchange.messages.return_unruptable.rate[«{#VHOST}/{#EXCHANGE}/{#TYPE}» | Скорость возврата недосталенных сообщений. |
| Exchange [{#VHOST}] [{#EXCHANGE}] [{#TYPE}]: Messages redelivered | rabbitmq.exchange.messages.redeliver[«{#VHOST}/{#EXCHANGE}/{#TYPE}» | Количество повторно доставленных сообщений. |
| Exchange [{#VHOST}] [{#EXCHANGE}] [{#TYPE}]: Messages redelivered per second | rabbitmq.exchange.messages.redeliver.rate[«{#VHOST}/{#EXCHANGE}/{#TYPE}» | Скорость повторной доставки сообщений. |
8. Проверка после настройки
После импорта и настройки шаблонов рекомендуется выполнить следующие проверки.
8.1. CS 2024 single/middle
- Узел находится в состоянии Доступен.
- Элементы
net.tcp.serviceполучают значения. - Элементы
proc.numполучают значения. - Веб-сценарии выполняются без ошибок.
- Триггеры не находятся в состоянии проблемы.
8.2. Gluster Storage.
Проверьте:
- запускается ли
gstatus_discovery.py; - обнаруживаются ли узлы и тома;
- поступают ли значения node_count и nodes_active;
- корректно ли определяется состояние томов.
8.3. PostgreSQL
Проверьте:
- загружен ли PostgreSQL-плагин;
- нет ли ошибок в
zabbix_agent2.log; - пользователь zbx_monitor может подключиться к PostgreSQL;
- элементы pgsql.* получают значения;
- автоматически обнаруживаются базы данных.
8.4. RabbitMQ
Проверьте:
- включён ли rabbitmq_management;
- существует ли пользователь zbx_monitor;
- доступны ли Management API;
- получают ли значения Get overview и Get exchanges;
- работает ли Health Check;
- обнаруживаются ли exchange.
9. Если мониторинг не работает
При проблемах рекомендуется сначала определить, на каком уровне возникает ошибка:
Zabbix → Agent 2 → сервис → порт/API → приложение
9.1. Сервис недоступен
Проверьте:
- запущен ли сервис;
- открыт ли необходимый порт;
- не блокирует ли подключение firewall;
- доступен ли сервис с сервера Zabbix.
9.2. Нет данных от Zabbix Agent 2
Проверьте:
- запущен ли zabbix-agent2;
- корректна ли конфигурация;
- загружен ли необходимый плагин;
- отсутствуют ли ошибки в журнале агента.
9.3. Веб-сценарий завершается ошибкой
Проверьте:
- правильность
{$sHEMA}; - значение
{$DOMAIN}; - значения макросов модулей;
- логин и пароль пользователя мониторинга;
- доступность URL с сервера Zabbix;
- HTTP-код ответа.
9.4. PostgreSQL не мониторится
Проверьте:
- установлен ли PostgreSQL-плагин;
- загружен ли он Zabbix Agent 2;
- разрешено ли подключение в
pg_hba.conf; - существует ли пользователь zbx_monitor;
- выдана ли ему роль pg_monitor.
9.5. RabbitMQ не мониторится
Проверьте:
- включён ли rabbitmq_management;
- доступен ли порт 15672;
- корректны ли логин и пароль;
- указан ли правильный
{$RABBITMQ.API.CLUSTER_HOST}; - доступен ли Management API.













