Добавление пользовательского шаблона в Zabbix
В VK Private Cloud управление системой мониторинга Zabbix происходит через Ansible.
Если стандартных шаблонов для использования Zabbix недостаточно, добавьте пользовательские шаблоны. С их помощью можно:
- собирать дополнительные метрики, которые важны для мониторинга инфраструктуры Платформы;
- настраивать свои триггеры, графики и дашборды;
- применять мониторинг одинаково на всех нужных узлах через Ansible;
- сохранять настройки при обновлениях и восстановлении Платформы — это защитит их от потери.
Добавление пользовательских шаблонов в Zabbix выполняется в следующем порядке:
- Выполните подготовку.
- Настройте получение метрик.
- Создайте конфигурационный файл с UserParameter.
- Создайте шаблон в веб-интерфейсе Zabbix.
- (Опционально) Создайте общую панель и экспортируйте ее.
- Загрузите файлы в Ansible.
В итоге получите набор файлов:
- (Опционально) Файл с расширением
.shили.py— скрипт для получения метрик. - Файл с расширением
.conf. Содержит пользовательские параметры (UserParameter) — указания для Zabbix по запуску скрипта или bash-команды. - Файл XML — настройки шаблона Zabbix: элементы данных, триггеры, графики.
- (Опционально) Файл JSON — настройки дашборда.
В примере приведен мониторинг открытых файлов (LimitNOFILE) для systemd-сервисов.
- Подключитесь к деплой-ноде по SSH (подробнее — в разделе Подключение к деплой-ноде).
- Убедитесь в наличии доступа к Inventory-файлам
vkcloudиansible-openstack. - Подготовьте доступ в веб-интерфейс Zabbix с правами администратора.
Настройте способ получения метрик на одном из узлов с работающим агентом Zabbix (zabbix-agent) и целевым источником данных.
Каждую отдельную метрику можно получить двумя способами:
-
С помощью bash-команды. Подходит для метрик, которые можно получить в нужном формате с помощью bash-команды.
Команду нужно добавить напрямую в файл с UserParameter на шаге 2. Пример команд — в разделе Использование bash-команд.
-
С помощью скрипта. Подходит для метрик, получение которых требует сложной логики: условий, обработки вывода, несколько источников. Подробнее о создании скрипта — в разделе Использование скрипта.
Пример получения данных из /proc:
-
Получите PID процесса сервиса. Пример команды для получения PID процесса сервиса
mariadb-glance:$ systemctl status mariadb-glance | grep PIDПример ответа:
Main PID: 347075 (mysqld) -
Получите лимиты процесса:
$ cat /proc/347075/limitsЗдесь
347075— PID процесса сервиса, полученный на предыдущем шаге.Пример ответа:
Limit Soft Limit Hard Limit UnitsMax cpu time unlimited unlimited secondsMax file size unlimited unlimited bytesMax data size unlimited unlimited bytesMax stack size 8388608 unlimited bytesMax core file size unlimited unlimited bytesMax resident set unlimited unlimited bytesMax processes 257065 257065 processesMax open files 163640 163640 filesMax locked memory 8388608 8388608 bytesMax address space unlimited unlimited bytesMax file locks unlimited unlimited locksMax pending signals 257065 257065 signalsMax msgqueue size 819200 819200 bytesMax nice priority 0 0Max realtime priority 0 0Max realtime timeout unlimited unlimited us -
Получите значение лимита на максимальное количество разрешенных открытых файлов (Hard Limit):
$ grep "Max open files" /proc/347075/limits | tr -s ' ' | cut -d' ' -f5Пример ответа:
163640 -
Получите количество открытых файлов:
$ sudo find "/proc/347075/fd" -mindepth 1 -maxdepth 1 | wc -lПример ответа:
54
После выполнения bash-команд будут получены данные для передачи в Zabbix. Если формат вывода и способ получения вас устраивают, добавьте команду в файл с UserParameter и перейдите к шагу 2. Если нет, настройте сбор метрик с помощью скрипта. Подробнее — в разделе Использование скрипта.
Скрипт служит прослойкой между Zabbix и операционной системой: Zabbix передает имя сервиса, скрипт находит его PID и возвращает метрики. Это избавляет от привязки к PID, который постоянно меняется.
В примере ниже скрипт собирает четыре метрики:
discovery— список запущенных systemd-сервисов (для правила обнаружения в Zabbix);max— эффективныйLimitNOFILE(Hard Limit) у процессов сервиса;current— максимальное количество открытых файлов среди процессов сервиса в данный момент;total— суммарное количество открытых файлов по всем процессам сервиса.
Чтобы использовать скрипт для получения метрик:
-
Подготовьте скрипт
zbx_systemd_fd_test.sh.При написании скрипта придерживайтесь следующих рекомендаций:
- Минимум зависимостей — по возможности получайте данные напрямую из
/procи/sys, а не через специализированные утилиты. - Скорость выполнения — лишняя логика увеличивает время работы и может влиять на стабильность сбора метрик.
- Минимум ресурсов — ресурсозатратные скрипты при частом запуске создают высокую нагрузку на CPU и RAM.
- По возможности без
sudo— если данные доступны без повышения прав, скрипт будет безопаснее.
При необходимости скрипт можно написать на языке Python. В этом случае адаптируйте дальнейшие действия под этот скрипт и сохраните файл с расширением
.py. - Минимум зависимостей — по возможности получайте данные напрямую из
-
Проверьте работу скрипта на выбранном ранее узле
cpn001:$ chmod 755 ./zbx_systemd_fd_test.shПример проверки метрик:
$ sudo ./zbx_systemd_fd_test.sh max mariadb-glance163640$ sudo ./zbx_systemd_fd_test.sh current mariadb-glance54$ sudo ./zbx_systemd_fd_test.sh total mariadb-glance54$ sudo ./zbx_systemd_fd_test.sh max public_haproxy500000$ sudo ./zbx_systemd_fd_test.sh current public_haproxy128$ sudo ./zbx_systemd_fd_test.sh total public_haproxy135 -
Убедитесь, что скрипт выполняется быстро. Пример замера времени выполнения:
$ time sudo ./zbx_systemd_fd_test.sh current public_haproxy128real 0m0.068suser 0m0.009ssys 0m0.013s -
После проверки скрипта сохраните его под именем
zbx_systemd_fd_test.shв локальной директории. -
Проверьте запуск скрипта от пользователя Zabbix и настройте права.
Скрипт в Zabbix выполняется от имени пользователя
zabbix. По умолчанию этот пользователь есть вsudoers, поэтому вызовы сsudoработают без пароля.Пример проверки:
$ sudo -u zabbix bash$ sudo ./zbx_systemd_fd_test.sh current public_haproxy129Если пользователь
zabbixисключен изsudoers, скрипт запросит пароль и в автоматическом режиме не сработает.Запускайте метрики без
sudo, если им хватает обычных прав, и сsudo— только там, где нужен доступ к системным данным. По возможности вместоsudoдайте пользователюzabbixдоступ через группу (какhaproxy-adminилиetcd-admin). Если безsudoне обойтись, учитывайте дополнительную нагрузку на каждый опрос: проверкиsudoers, записи в лог, возможные обращения к LDAP.
Файл с UserParameter определяет, как Zabbix-агент будет запускать скрипт.
-
Подготовьте файл
zbx_systemd_fd.conf, который будет содержать UserParameter.При подготовке придерживайтесь следующих рекомендаций:
-
В файле с UserParameter всегда указывайте абсолютные пути к файлам и командам.
Неправильно:
UserParameter=systemd.fd.max[*],grep "Max open files" /proc/$1/limits | tr -s ' ' | cut -d' ' -f5Правильно:
UserParameter=systemd.fd.max[*],grep "Max open files" /proc/$1/limits | /usr/bin/tr -s ' ' | /usr/bin/cut -d' ' -f5 -
Добавляйте
2>/dev/nullв конце каждого UserParameter, чтобы сообщения об ошибках не попали в Zabbix как значения метрик. -
Если скрипт или его конкретный режим не принимает параметры, как, например, в случае с
discovery, использовать[*]и"$1"не нужно.
Пример описания UserParameter:
UserParameter=systemd.fd.discovery,/usr/local/bin/zbx_systemd_fd.sh discovery 2>/dev/nullUserParameter=systemd.fd.max[*],/usr/local/bin/zbx_systemd_fd.sh max "$1" 2>/dev/nullUserParameter=systemd.fd.current[*],sudo -n /usr/local/bin/zbx_systemd_fd.sh current "$1" 2>/dev/nullUserParameter=systemd.fd.total[*],sudo -n /usr/local/bin/zbx_systemd_fd.sh total "$1" 2>/dev/nullВ примере приведены три UserParameter с префиксом
systemd.fd.*. У каждого — свое назначение (например, текущее значение, максимум,discovery).discoveryпринимает один аргумент, остальные — два. В Zabbix запрашивается метрика по имени, напримерsystemd.fd.current[public_haproxy]. Агент находит соответствующий UserParameter и запускает команду, например:sudo -n /usr/local/bin/zbx_systemd_fd.sh current public_haproxy. Скрипт возвращает число, например128— это и есть значение метрики для Zabbix. -
-
Сохраните подготовленный файл
zbx_systemd_fd.confв локальной папке рядом со скриптом.
-
Определите, на каких узлах будет запускаться скрипт:
- На всех узлах — роль
common, группаvkcloud. - Только на вычислительных узлах — роль
compute, группаvkcloud_compute. - Только на управляющих узлах — роль по тематике сервиса.
- Только на Ceph-узлах — роль
ceph. - Комбинация ролей или собственная группа.
- На всех узлах — роль
-
По выбранным узлам определите Ansible-роль и группу, чтобы использовать их далее при настройке. Сохраните название группы.
В инструкции скрипт предназначен для всех узлов, поэтому далее используется роль
commonи группаvkcloud.
Чтобы сервис zabbix-server получал данные и появилась возможность настройки на живых метриках, разместите скрипт и файл с UserParameter в веб-интерфейсе Zabbix:
-
Разместите код скрипта из файла
zbx_systemd_fd_test.shв директории/usr/local/bin/на узлеcpn001под именемzbx_systemd_fd.sh:$ sudo vi /usr/local/bin/zbx_systemd_fd.sh -
Дайте права скрипту на исполнение:
$ sudo chmod 755 /usr/local/bin/zbx_systemd_fd.sh -
Разместите файл с UserParameter в директории
/etc/zabbix/zabbix_agentd.d/под именемzbx_systemd_fd.conf:$ sudo vi /etc/zabbix/zabbix_agentd.d/zbx_systemd_fd.conf -
Перезапустите Zabbix-агент:
$ sudo systemctl restart zabbix-agent.service -
Проверьте, что агент видит метрики.
Пример проверки через
zabbix_agentd:$ zabbix_agentd -t systemd.fd.discoverysystemd.fd.discovery [t|{"data":[{"{#SERVICE}":"atd.service"},{"{#SERVICE}":"atopacct.service"},...$ zabbix_agentd -t 'systemd.fd.max[sshd.service]'systemd.fd.max[sshd.service] [t|524288]$ zabbix_agentd -t 'systemd.fd.current[sshd.service]'systemd.fd.current[sshd.service] [t|5]$ zabbix_agentd -t 'systemd.fd.total[sshd.service]'systemd.fd.total[sshd.service] [t|5]
Перейдите в веб-интерфейсе Zabbix (подробнее — в разделе Портал мониторинга).
-
Перейдите в раздел Configuration → Templates и нажмите Create template.
-
Заполните параметры:
-
Template name — имя создаваемого шаблона. Пример:
Template App Systemd MaxOpenFiles. -
Template groups — группа, соответствующая целевым узлам:
VKCP— для мониторинга всех узлов.OpenStack Controllers— для управляющих узлов.Hypervisors— для вычислительных узлов.
Если подходящей группы нет, создайте ее: перейдите в раздел Configuration → Host groups и нажмите Create host group. Добавьте в нее тестовый узел, остальные — после завершения настройки.
-
-
(Опционально) Настройте макросы:
-
Нажмите на имя созданного шаблона и перейдите в раздел Macros.
-
Добавьте макросы для фильтрации сервисов:
-
Макрос —
{$SYSTEMD_FD_SVC_MATCH}, значение —.*. -
Макрос —
{$SYSTEMD_FD_SVC_NOT_MATCH}, значение —^$.Пример значения для исключения системных сервисов:
{$SYSTEMD_FD_SVC_NOT_MATCH} = ^(dbus\.service|systemd-.*\.service)$
-
-
-
Создайте правило обнаружения:
-
Нажмите на имя созданного шаблона, перейдите в раздел Discovery rules и нажмите Create discovery rule.
-
Заполните параметры:
- Name —
Running systemd services discovery. - Type —
Zabbix agent. - Key —
systemd.fd.discovery. - Update interval —
10m. - Keep lost resources period —
1d.
- Name —
-
-
(Опционально) Если была выполнена настройка макросов, перейдите на вкладку Filters и добавьте:
{#SERVICE}matches{$SYSTEMD_FD_SVC_MATCH}.{#SERVICE}does not match{$SYSTEMD_FD_SVC_NOT_MATCH}.
-
Протестируйте правило обнаружения:
- Нажмите кнопку Test.
- Укажите имя тестового узла и порт
10050. - Нажмите Get value and test.
Если ошибок нет и вывод аналогичен выводу скрипта при его тестировании, продолжите выполнение инструкции.
-
Нажмите на созданное правило обнаружения, перейдите в раздел Item prototypes и нажмите Create item prototype.
-
Добавьте три элемента данных:
-
Максимальный лимит открытых файлов:
- Name —
[{#SERVICE}] Max open files limit. - Type —
Zabbix agent. - Key —
systemd.fd.max[{#SERVICE}]. - Type of information —
Numeric (unsigned). - Units —
files. - Update interval —
10m.
- Name —
-
Текущее число открытых файлов:
- Name —
[{#SERVICE}] Current open files. - Type —
Zabbix agent. - Key —
systemd.fd.current[{#SERVICE}]. - Type of information —
Numeric (unsigned). - Units —
files. - Update interval —
1m.
- Name —
-
Общее число открытых файлов по сервису:
- Name —
[{#SERVICE}] Total open files. - Type —
Zabbix agent. - Key —
systemd.fd.total[{#SERVICE}]. - Type of information —
Numeric (unsigned). - Units —
files. - Update interval —
1mили5m.
- Name —
-
-
Протестируйте каждый элемент:
-
Нажмите кнопку Test.
-
Укажите:
- Имя тестового узла.
- Порт
10050. - В поле Macros — имя существующего systemd-сервиса. Пример:
etcd.service. - Нажмите Get value and test.
-
Если ошибок нет, будет отображен вывод, аналогичный выводу скрипта при его тестировании.
-
Нажмите на созданное правило обнаружения, перейдите в раздел Trigger prototypes и нажмите Create trigger prototype.
-
Заполните параметры:
-
Name —
[{#SERVICE}] Open files usage is above 90% of LimitNOFILE. -
Severity —
WarningилиAverage. -
Expression — введите выражение:
last(/Template App Systemd MaxOpenFiles/systemd.fd.max[{#SERVICE}])>0 andmin(/Template App Systemd MaxOpenFiles/systemd.fd.current[{#SERVICE}],5m)>=(last(/Template App Systemd MaxOpenFiles/systemd.fd.max[{#SERVICE}])*0.9)
-
-
Добавьте выражение восстановления:
-
OK event generation —
Recovery expression. -
Recovery expression — введите выражение:
max(/Template App Systemd MaxOpenFiles/systemd.fd.current[{#SERVICE}],5m)<(last(/Template App Systemd MaxOpenFiles/systemd.fd.max[{#SERVICE}])*0.85)Триггер срабатывает при достижении 90%, а проблема считается решенной при снижении до 85%.
-
-
Нажмите на созданное правило обнаружения, перейдите в раздел Graph prototypes и нажмите Create graph prototype.
-
Заполните параметры:
-
Name —
[{#SERVICE}] Open files vs limit. -
Items — элементы данных. Нажмите Add prototype и добавьте следующие элементы:
systemd.fd.current[{#SERVICE}].systemd.fd.max[{#SERVICE}].- (Опционально)
systemd.fd.total[{#SERVICE}].
-
-
Создайте дашборд в веб-интерфейсе Zabbix:
-
Перейдите в раздел Configuration → Templates.
-
Нажмите на имя созданного шаблона, перейдите в раздел Dashboards и нажмите Create dashboard.
-
Заполните параметры:
- Name —
Systemd MaxOpenFiles overview. - Добавьте виджет с типом Graph prototype и выберите созданный прототип графика.
- Name —
-
-
(Опционально) Привяжите узел
cpn001к шаблону, чтобы выполнить предпросмотр данных:-
Перейдите в раздел Configuration → Hosts и нажмите на имя выбранного узла.
-
Добавьте шаблон и нажмите Update.
-
Подождите около 10 минут — это интервал автообнаружения.
-
В разделе Monitoring → Hosts на странице нужного узла проверьте:
- Graphs — графики по каждому сервису.
- Latest data — текущие значения метрик.
- Dashboards — шаблонный дашборд.
-
-
Перейдите в раздел Monitoring → Dashboard и нажмите Create dashboard.
-
Заполните параметры:
-
Name:
Systemd MaxOpenFiles dashboard. -
Добавьте виджет:
- Type:
Problems. - Host groups: группа из шаблона. Пример:
VKCP. - Problem:
Open files usage is above 90% of LimitNOFILE.
- Type:
-
-
Примените виджет и сохраните панель.
-
Перейдите в раздел Configuration → Templates.
-
Выделите шаблон и нажмите Export → XML.
-
Сохраните файл как
Template_App_Systemd_MaxOpenFiles.xml. -
Удалите из файла строки с UUID:
$ sed -i '/<uuid>/d' Template_App_Systemd_MaxOpenFiles.xml
UUID привязывают шаблон к конкретной инсталляции сервиса zabbix-server.
При импорте на другую инсталляцию они создадут конфликты.
Мелкие правки в шаблоне можно вносить напрямую в XML-файл. При крупных изменениях повторите экспорт из веб-интерфейса Zabbix.
-
Подготовьте информацию:
- Логин и пароль администратора Zabbix.
- Идентификатор дашборда — из URL вида
https://<ZABBIX>/zabbix/zabbix.php?action=dashboard.view&dashboardid=376.
-
Получите URL сервера Zabbix с деплой-ноды:
$ ansible -i vkcloud.yml -e env=vkcloud -m debug \-a "msg={{ zabbix_server_url }}" vkcloud_zabbix[0] -
Получите токен аутентификации:
$ curl -s -X POST -H "Content-Type: application/json" \-d '{"jsonrpc": "2.0","method": "user.login","params": {"user": "Admin","password": "<ПАРОЛЬ>"},"id": 1}' http://<УЗЕЛ_ZABBIX>/zabbix/api_jsonrpc.phpПример ответа:
{"jsonrpc":"2.0","result":"0a6baaa74fce1c60f2f618a3de2019af","id":1} -
Установите утилиту
jq, если она не установлена:# dnf install jq -y -
Экспортируйте дашборд:
$ curl -s -X POST -H "Content-Type: application/json" \-d '{"jsonrpc": "2.0","method": "dashboard.get","params": {"output": "extend","selectPages": "extend","selectUsers": "extend","selectUserGroups": "extend","dashboardids": ["<ID_ДАШБОРДА>"]},"auth": "<ТОКЕН_АУТЕНТИФИКАЦИИ>","id": 1}' http://<УЗЕЛ_ZABBIX>/zabbix/api_jsonrpc.php \| jq '.result[0] | del(.dashboardid, .uuid, .pages[].dashboard_pageid, .pages[].widgets[].widgetid)'Пример обработанного вывода:
{"name": "Systemd MaxOpenFiles dashboard","userid": "1","private": "1","display_period": "30","auto_start": "1","pages": [{"name": "","display_period": "0","widgets": [{"type": "problems","name": "","x": "0","y": "0","width": "24","height": "5","view_mode": "0","fields": [{"type": "2", "name": "groupids", "value": "34"},{"type": "1", "name": "problem", "value": "Open files usage is above 90% of LimitNOFILE"},{"type": "0", "name": "severities", "value": "3"}]}]}],"users": [],"userGroups": []} -
Сохраните результат в файл
systemd-maxopenfiles-dashboard.json.
-
Скопируйте файл шаблона в роль
zabbix_server:$ cp ~/zabbix-custom/systemd_fd/Template_App_Systemd_MaxOpenFiles.xml \../ansible-openstack/roles/zabbix/zabbix_server/files/zabbix-templates-6/ -
Скопируйте файл дашборда при его наличии:
$ cp ~/zabbix-custom/systemd_fd/systemd-maxopenfiles-dashboard.json \../ansible-openstack/roles/zabbix/zabbix_server/files/dashboards-6/ -
В файле
group_vars/vkcloud/zabbix.ymlзарегистрируйте шаблон, привязку к группе и дашборд:-
В секции
zabbix_template_listукажите имя файла без расширения. Пример:Template_App_Systemd_MaxOpenFiles.Добавление шаблона в
zabbix_template_list:zabbix_template_list:- Common_monitoring- HAProxy private- HAProxy public# ... другие шаблоны ...- Template_App_Systemd_MaxOpenFiles #Добавленный файл с шаблоном -
В секции
zabbix_groups_map_tmpв параметреtemplatesукажите имя шаблона, под которым он будет отображаться в Zabbix. Пример:Template App Systemd MaxOpenFiles.Привязка шаблона к группе узлов в
zabbix_groups_map_tmp:zabbix_groups_map_tmp:VKCP:meta:- '{{ consul_dc }}'templates:- Common_monitoring- Linux by Zabbix agent- Template App Chrony Service- Template App Systemd MaxOpenFiles #Добавленное имя шаблономВ примере используется Zabbix-группа
VKCP, которая содержит все узлы инсталляции. Если шаблон нужен только для части узлов, внесите изменения в соответствующую группу вzabbix_groups_map_tmp. -
Если вы создали дашборд, добавьте имя его файла без расширения в секцию
zabbix_dashboards_6в файле./group_vars/vkcloud/zabbix.yml.Добавление дашборда в
zabbix_dashboards_6:zabbix_dashboards_6:- component-status-dashboard- global-view- zabbix-server-health- postgres-dashboards- systemd-maxopenfiles-dashboard #Добавленный файл с дашбордом
-
-
Запустите плейбук для применения настроек Zabbix-сервера:
$ ansible-playbook -i vkcloud.yml --diff -e env=vkcloud \-e zabbix_api4ansible=true \../ansible-openstack/playbooks/zabbix_configure_resources.yml
Для дальнейших правок:
- Мелкие изменения вносите напрямую в XML- и JSON-файлы в директории
../ansible-openstack/roles/zabbix/zabbix_server/files/. - При крупных изменениях повторите экспорт из веб-интерфейса или API и замените файлы.
- В обоих случаях обязательно перезапустите плейбук
zabbix_configure_resources.yml.
Скопируйте скрипт и файлы с UserParameter на целевые узлы через Ansible:
-
Выберите Ansible-роль в зависимости от области действия метрики:
- Мониторинг HAProxy — роль
haproxy. - Мониторинг вычислительных узлов — роль
compute. - Мониторинг всех узлов — роль
common.
Группа узлов в Ansible должна совпадать с группой узлов в Zabbix (подробнее — в разделе Определение области действия метрики). Иначе на части узлов UserParameter не будет установлен, либо Zabbix-сервер будет опрашивать не все узлы.
- Мониторинг HAProxy — роль
-
Разместите файлы в Ansible-роли:
-
Через Jinja2 разместите файл с UserParameter в директории
templates/, а скрипт просто скопируйте вfiles/. -
Выделите для файлов мониторинга отдельную директорию
monitoring/, чтобы не смешивать их с другими файлами роли. -
Скопируйте файл с UserParameter в директорию
templates/monitoring/с расширением.j2:$ mkdir -p ../ansible-openstack/roles/common/templates/monitoring/$ cp ~/zabbix-custom/systemd_fd/zbx_systemd_fd.conf \../ansible-openstack/roles/common/templates/monitoring/zbx_systemd_fd.conf.j2 -
Скопируйте скрипт в директорию
files/monitoring/:$ mkdir -p ../ansible-openstack/roles/common/files/monitoring/$ cp ~/zabbix-custom/systemd_fd/zbx_systemd_fd.sh \../ansible-openstack/roles/common/files/monitoring/
-
-
В файле
roles/common/tasks/monitoring.ymlдобавьте задачи:- name: "Zabbix | Add custom user params for openfiles checks"template:src: "monitoring/zbx_systemd_fd.conf.j2"dest: "/etc/zabbix/zabbix_agentd.d/zbx_systemd_fd.conf"owner: rootgroup: zabbixmode: 0640notify: restart zabbix-agent- name: "Zabbix | Add custom zabbix script for openfiles checks"copy:src: "monitoring/zbx_systemd_fd.sh"dest: "/usr/local/bin/zbx_systemd_fd.sh"owner: rootgroup: rootmode: 0755notify: restart zabbix-agent -
Убедитесь, что в файле
handlers/main.ymlесть обработчик с именемrestart zabbix-agent. Если нет, добавьте его:- name: restart zabbix-agentsystemd:name: "{{ 'zabbix-agent2' if 'zabbix-lts-agent2' in ansible_facts.packages else 'zabbix-agent' }}"state: restarted -
Если файл
tasks/monitoring.ymlбыл создан заново, добавьте его вызов в файлtasks/main.yml:- include_tasks:file: tasks/monitoring.ymlapply:tags: monitoringtags: monitoringТег
monitoringпозволяет запускать только задачи мониторинга, не выполняя всю роль. -
Запустите плейбук
common.yml:$ ansible-playbook -i vkcloud.yml --diff -e env=vkcloud \--tags monitoring ../ansible-openstack/playbooks/common.yml
После успешного выполнения все целевые узлы начнут отправлять метрики в Zabbix.
Чтобы сохранить изменения:
-
Убедитесь, что директории
vkcloudиansible-openstackоформлены как Git-репозитории и изменения можно получить командойgit status:-
Пример для Inventory:
$ cd ~/inventory/vkcloud$ git statusOn branch masterChanges not staged for commit:modified: group_vars/vkcloud/zabbix.yml -
Пример для
ansible-openstack:$ cd ../ansible-openstack$ git statusOn branch masterChanges not staged for commit:modified: roles/common/tasks/monitoring.ymlUntracked files:roles/common/files/monitoring/zbx_systemd_fd.shroles/common/templates/monitoring/zbx_systemd_fd.conf.j2roles/zabbix/zabbix_server/files/dashboards-6/systemd-maxopenfiles-dashboard.jsonroles/zabbix/zabbix_server/files/zabbix-templates-6/Template_App_Systemd_MaxOpenFiles.xml
-
-
Создайте директорию для хранения diff-файлов вне репозиториев:
$ mkdir -p ~/zabbix-custom/openfiles-dashboard -
Сохраните изменения из обоих репозиториев:
$ cd ~/inventory/vkcloud$ git add --all$ git diff --cached --no-renames --full-index \> ~/zabbix-custom/openfiles-dashboard/vkcloud.diff$ cd ../ansible-openstack$ git add --all$ git diff --cached --no-renames --full-index \> ~/zabbix-custom/openfiles-dashboard/ansible-openstack.diff -
После обновления Платформы восстановите изменения:
$ cd ~/inventory/vkcloud$ git apply ~/zabbix-custom/openfiles-dashboard/vkcloud.diff$ cd ../ansible-openstack$ git apply ~/zabbix-custom/openfiles-dashboard/ansible-openstack.diff