Описание системы мониторинга
Мониторинг Offline ELM обеспечивается с помощью следующих сервисов:
- Influxdb — хранение данных о хосте и Docker-контейнерах (версия 2.7.5)
- Telegraf — получение данных о хосте и Docker-контейнерах и сохранение в БД Influxdb, запускается совместно с сервисами ELM (версия 1.30.0)
- Prometheus — получение данных о метриках ELM Server (версия 2.51.0)
- Grafana — отображение данных мониторинга в web-интерфейсе (версия 10.4.1)
- Nginx-exporter — сервис для сбора метрик с сервера nginx (web-ui) и преобразования их в формат для считывания Prometheus (версия 1.1.0).
Мониторинг Offline ELM предоставляет возможности по наглядному отслеживанию как состояния самого хоста (загрузка ЦП, оперативной памяти хоста, потребление ресурсов контейнерами), так и работы системы лицензирования Offline ELM как таковой (фиксирование запросов лицензии, ошибок работы, состояния сертификатов и т. д.). Помимо этого предоставляются возможности по оповещению о различных состояниях Offline ELM (оповещения о состоянии лицензии, контейнеров, USB-токена).
Конфигурационные файлы сервисов мониторинга
Файлы, используемые для конфигурации мониторинга
Путь | Описание |
---|---|
elm-monitoring-data/grafana/provisioning/dashboards | Перечень JSON-файлов, описывающих содержимое dashboard-страниц, доступных для просмотра в Grafana. |
elm-monitoring-data/grafana/provisioning/datasources | Файл datasource.yml описывает источники данных мониторинга для отображения в Grafana. |
elm-monitoring-data/grafana/provisioning/alerting | Перечень файлов с описанием методов оповещения пользователей с помощью Grafana:
|
elm-monitoring-data/prometheus/prometheus.yml | В файле prometheus.yml перечислены адреса Spring Actuator для получения значений метрик, поддерживаемых в ELM. По умолчанию, при запуске ELM через docker-compose, адресами являются названия сервисов, перечисленных для запуска в файлах docker-compose.yml. |
elm-offline-data/config/telegraf/telegraf.conf | Файл с описанием данных системы, доступных для получения контейнером telegraf и указанием адреса БД influxdb, куда сохранять полученные данные. |
elm-offline-data/.env | Файл для установки переменных окружения, связанных с сервером Offline ELM. |
elm-monitoring-data/.env | Файл для установки переменных окружения, связанных с сервисами мониторинга. |
Переменные окружения мониторинга ELM
Переменные окружения устанавливаются в файле .env. После их изменения требуется перезапуск контейнеров.
Переменные окружения делятся на два типа:
1. Устанавливаются для сервера Offline ELM в файле .env, который располагается в директории с конфигурационными файлами сервера (по умолчанию elm-offline-data/.env).
Название параметра | Описание параметра | Значение по умолчанию |
---|---|---|
MONITORING_SERVER_ADDRESS | Адрес, на который будет проброшен actuator | 127.0.0.1 |
MONITORING_SERVER_PORT | Порт, на который будет вывешиваться actuator | 8080 |
MONITORING_SERVER_USERNAME | Имя пользователя для авторизации на actuator | admin |
MONITORING_SERVER_PASSWORD | Пароль для авторизации на actuator | password |
ELM_INSTANCE_ID | Определяет основной или резервный сервер ELM | node1 |
2. Устанавливаются непосредственно в директории с конфигурационными файлами сервисов мониторинга в файле .env (по умолчанию elm-monitoring-data/.env) .
Название параметра | Описание параметра | Значение по умолчанию |
---|---|---|
MONITORING_INFLUXDB_ADDRESS | Адрес, на который будет проброшен influxdb | 127.0.0.1 |
MONITORING_INFLUXDB_PORT | Порт, на который будет вывешиваться influxdb | 8086 |
MONITORING_GRAFANA_ADDRESS | Адрес, на который будет проброшена Grafana | 0.0.0.0 |
MONITORING_GRAFANA_PORT | Порт, на который будет вывешиваться Grafana | 3000 |
PROMETHEUS_RETENTION_TIME | Время хранения метрик prometheus | 90d |
PROMETHEUS_RETENTION_SIZE | Ограничение хранения метрик prometheus по размеру | 50GB |
SMTP_HOST | Адрес SMTP-сервера | - |
SMTP_NAME | Имя пользователя | - |
SMTP_PASSWORD | Пароль | - |
SMTP_FROM_ADDRESS | Почта, с которой будут рассылаться оповещения | admin@grafana.localhost |
SMTP_FROM_NAME | Имя, используемое для рассылки оповещений | Grafana |
SMTP_SKIP_VERIFY | Пропустить проверку SSL-сертификата сервера | false |
SMTP_CERT_FILE | Файл сертификата для настройки защищенного SSL-соединения | - |
SMTP_KEY_FILE | Файл ключей для настройки защищенного SSL-соединения | - |
NOTIFICATION_EMAIL_ADDRESSES | Перечень адресов для рассылки e-mail оповещений, разделенных символом ';' | example@email.com user1@mail.com user2@mail.com |
NOTIFICATION_TELEGRAM_BOT_TOKEN | Токен для доступа к Telegram-боту для рассылки оповещений, можно получить, создав бота с помощью запроса к Telegram-боту @BotFather | - |
NOTIFICATION_TELEGRAM_USER_ID | Идентификатор пользователя для оповещения, можно получить с помощью запроса к Telegram-боту @userinfobot | - |
Web-интерфейс системы мониторинга
Авторизация
После запуска системы мониторинга Offline ELM администратору системы мониторинга становится доступен web-интерфейс Grafana по адресу:
http://<MONITORING_GRAFANA_ADDRESS>:<MONITORING_GRAFANA_PORT>/.
- <MONITORING_GRAFANA_ADDRESS> — это адрес сервера Offline ELM в сети, установленный в переменной окружения MONITORING_GRAFANA_ADDRESS (значение по умолчанию 0.0.0.0);
- <MONITORING_GRAFANA_PORT> — порт сервиса Grafana, установленный в переменной окружения MONITORING_GRAFANA_PORT (значение по умолчанию 3000).
Авторизоваться можно по умолчанию с логином admin и паролем password.
Рисунок 12 — Страница авторизации Grafana
После авторизации в web-интерфейсе Grafana для доступа к данным мониторинга с Offline ELM требуется перейти в раздел "Dashboards".
Для пользователя доступны два дашборда:
elm_alert_metrics — информация о состоянии метрик сервера Offline ELM.
- elm_monitoring — информация о состоянии хоста.
Рисунок 13 — Страница "Dashboards", выбор раздела мониторинга
Панель мониторинга "elm_alert_metrics"
Панель мониторинга "elm_alert_metrics" отображает информацию о состоянии внутренних метрик Offline ELM, а также web-интерфейса ELM.
Рисунок 14 — Дашборд "elm_alert_metrics"
Запуск системы мониторинга Offline ELM
Сервис для мониторинга ELM представлен стеком сервисов с конфигурационными файлами, который можно запустить, используя docker-compose файл. Файлы системы мониторинга в этом архиве находятся в директории elm-monitoring-data-1.4-20 и имеют следующую структуру:
. ├── docker-compose.yml ├── .env ├── grafana │ └── provisioning │ ├── alerting │ │ ├── alert_notification.yml │ │ └── alert_rules.yml │ ├── dashboards │ │ ├── dashboard.yml │ │ ├── elm_alert_metrics.json │ │ └── elm_monitor.json │ ├── datasources │ │ └── datasource.yml │ └── notifiers │ ├── email.yml │ └── telegram.yml └── prometheus └── prometheus.yml
Сервис Telegraf запускается вместе с сервером Offline ELM, параметры его запуска прописаны в docker-compose.yml файле. Конфигурационные файлы данного сервиса расположены в папке config.
. ├── config │ └── telegraf │ └── telegraf.conf └── docker-compose.yml
Для мониторинга состояния контейнеров Telegraf необходимо предоставить ему доступ к сокету Docker демона, для этого необходимо передать id группы пользователей docker.
Установить в переменной DOCKER_GROUP_ID значение группы пользователя docker. Узнать id группы docker можно командой:
$ getent group docker| cut -d: -f3 999
В файле .env, расположенном в директории elm-offline-data-1.4-х, установить id пользователя в переменной DOCKER_GROUP_ID.
DOCKER_GROUP_ID="999"
Для запуска системы мониторинга Offline ELM требуется произвести следующие шаги:
1. Перейти в директорию с конфигурационными файлами мониторинга (по умолчанию elm-monitoring-data-1.4-20).
2. Запустить систему мониторинга Offline ELM командой:
$ docker compose up -d
3. Убедиться, что все контейнеры Offline ELM успешно запустились, используя команду:
$ docker compose ps
Теперь с системой мониторинга Offline ELM можно взаимодействовать через web-интерфейс Grafana. Более подробно работа с интерфейсом мониторинга описана в разделе Web-интерфейс системы мониторинга.
Остановка системы мониторинга
Данные мониторинга и конфигурации дашбордов хранятся в Docker volume. Если вы удалите volume, данные будут утеряны.
Для остановки системы мониторинга Offline ELM требуется произвести следующие шаги:
1. Перейти в директорию с конфигурационными файлами мониторинга (по умолчанию elm-monitoring-data-1.4-20).
2. Выполнить команду:
$ docker compose down
Если сервисы мониторинга не запущены, в частности InfluxDB, в логах Telegraf появятся ошибки. Лог с ошибками — результат того, что Telegraf не может подключиться к InfluxDB. Пример текста ошибки:
"telegraf | 2024-08-20T15:29:16+07:00 E! [agent] Error writing to outputs.influxdb_v2: failed to send metrics to any configured server(s)"
Настройка удаленного мониторинга
Сервисы мониторинга можно запустить совместно с Offline ELM на одном хосте. В таком случае дополнительной настройки подключения не требуется, однако рекомендуется запускать сервисы мониторинга на отдельном хосте. Для этого необходимо выполнить следующие настройки:
1. Настроить переменные окружения в файле .env (elm-offline-data/.env) на стороне сервера Offline ELM. А именно:
- адрес MONITORING_SERVER_ADDRESS сервера Offline ELM, куда Prometheus будет подключаться для сбора метрик. Так как дефолтное значение переменной "MONITORING_SERVER_ADDRESS=127.0.0.1", без её установки мониторинг сервера Offline ELM не будет доступен при запуске сервисов мониторинга на отдельном хосте.
- порт MONITORING_SERVER_PORT сервера Offline ELM, куда Prometheus будет подключаться для сбора метрик;
- логин и пароль пользователя (MONITORING_SERVER_USERNAME и MONITORING_SERVER_PASSWORD), которые будут использоваться Prometheus для авторизации, InstanceID ноды.
2. В конфигурационном файле Telegraf telergaf.conf (elm-offline-data/config/telegraf/telegraf.conf) в разделе [[outputs.influxdb_v2]] необходимо указать адрес и порт сервиса мониторинга influxdb через переменную urls/
$ diff telegraf_old.conf telegraf.conf < urls = ["http://influxdb:8086"] --- > urls = ["http://192.168.1.2:8086"]
3. В конфигурационном файле prometheus.yml (elm-monitoring-data/prometheus/prometheus.yml) изменить адрес "targets" на адрес и порт, указанные в переменных MONITORING_SERVER_ADDRESS и MONITORING_SERVER_PORT на сервере Offline ELM в .env файле.
$ diff prometheus_old.yml prometheus.yml < - targets: ['elmi-offline-server:8097'] --- > - targets: ['192.168.1.1:8097']
4. В конфигурационном файле prometheus.yml (elm-monitoring-data/prometheus/prometheus.yml) изменить при необходимости данные логина и пароля пользователя для подключения к актуатору сервера Offline ELM, если для него в .env файле были указаны иные значения (MONITORING_SERVER_USERNAME и MONITORING_SERVER_PASSWORD).
basic_auth: username: 'user1' password: 'password1'
5. В docker-compose.yml файле для контейнера nginx-exporter, который собирает информацию о web-сервере, указать адрес и порт данного web-сервера, который запускается совместно с основным сервером Offline ELM в контейнере elmi-offline-web-ui. Порт web-сервера может быть изменен в .env файле с помощью переменной окружения ELM_WEB_UI_PORT.
$ diff docker-compose_old.yml docker-compose.yml < - https://elmi-offline-web-ui:80/nginx_status --- > - https://192.618.1.1:80/nginx_status
6. В elm-monitoring-data/.env файле установить переменную MONITORING_INFLUXDB_ADDRESS, которая указывает, на каком адресе будет доступен сервис InfluxDB.
7. Необходимо перезапустить сервер Offline ELM и сервисы мониторинга.
$ docker compose down $ docker compose up -d
8. Если подключение Telegraf к InfulxDB было настроено корректно, то после обновления страницы в интерфейсе Grafana на дашборде elm_alert_metrics вы увидете node1 в значениях Host. Если это так, то можно переходить к дальнейшей настройке. Если в значении указано None, то проверьте правильность настройки подключения.
9. Для панелей ELM USB token alert, Web UI Status, Licensing state, Licensing expiry, Certificate state, Certificate expiry выполните следующие действия:
Рисунок 15 — Панели до настройки источника данных
9.1. На панели через меню с 3 вертикальными точками нажмите "Edit".
9.2. Для панелей, отображающих даты, под самой панелью перейдите в раздел "Transform data", в выпадающем меню "Operation", как и для панели состояния нужно выбрать поле, значение "instance" в котором будет соответствовать указанному IP-адресу в файле конфигурации prometheus.yml.
Рисунок 16 — Выбор данных в "Transform data"
9.3. В "Value options" в выпадающем меню "Fields" нужно выбрать актуальное поле, где значение "instance" будет соответствовать указанному IP-адресу в файле конфигурации prometheus.yml.
Рисунок 17 — Выбор источника данных
Метрики сервера Offline ELM
Мониторинг инфраструктуры
Цель мониторинга | Наименование панели | Описание метрики | Алерт | Действие |
---|---|---|---|---|
Контроль работоспособности Docker контейнеров | Docker container healthcheck state |
| Наименование: ELM container healthcheck state node1 Условие: Код возврата ненулевой Severity: critical |
|
Контроль доступности USB-токена | ELM USB token Status | elm_server_tokenState_value_events — Состояние доступности USB-токена | Наименование: ELM USB token status alert node1 Условие: Код возврата ненулевой Severity: critical |
|
Контроль ошибок доступности USB-токена | ELM Token access errors | elm_server_tokenAccessError_value_events — Ошибки доступности USB-токена | Наименование: ELM token access errors node1 Условие: Severity: critical |
|
Контроль доступности web-интерфейса | Web UI Status | nginx_up | Наименование: ELM Web UI status alert Условие: Код возврата не равен 1 Severity: medium |
|
Контроль работоспособности базы данных | DB errors | elm_server_databaseError_value_events — Ошибка доступа к БД | Наименование: ELM DB errors alert node1 Условие: Severity: critical |
|
Мониторинг состояния лицензии и сертификатов
Цель мониторинга | Наименование панели | Описание метрики | Алерт | Действие |
---|---|---|---|---|
Заблаговременно сообщить о необходимости продления лицензии | Licensing state | elm_server_licensingState_value_events — Состояние срока действия лицензии:
| Наименование: License renewal alert node1 Условие: Код возврата ненулевой Severity: high | Запросить продление лицензии у поставщика оборудования |
Контроль срока действия лицензии | Licensing expiry date | elm_server_licensingExpiry_value_events — Дата окончания срока действия лицензии | Алерт не предусмотрен | - |
Сообщить о необходимости продления сертификата на USB-токене | Certificate state | elm_server_certificateState_value_events — Состояние срока действия сертификата
| Наименование: ELM certificate state alert node1 Условие: Код возврата ненулевой Severity: critical | Запросить продление сертификата на USB-токене у поставщика оборудования |
Контроль срока действия сертификата на USB токене | Certificate expiry date | elm_server_certificateExpiry_value_events — Дата окончания срока действия сертификата | Алерт не предусмотрен | - |
Мониторинг лицензируемых продуктов
Цель мониторинга | Наименование панели | Описание метрики | Алерт | Действие |
---|---|---|---|---|
Мониторинг запросов лицензии | ELM license request | elm_server_licenseRequest_value_events — Запрос файла лицензии от устройства/ПО | Наименование: ELM license request alert node1 Условие: Severity: medium |
|
Мониторинг неудачных запросов лицензии | ELM license request | elm_server_licenseRequestFailed_value_events — Ошибка получения файла персональной лицензии устройством | Наименование: ELM license request errors alert node1 Условие: Severity: high |
|
Контроль ошибок аутентификации от лицензируемых продуктов | Authentication errors ELM | elm_server_authFailed_value_events — Ошибка аутентификации от устройства или ПО | Наименование: ELM authentication errors alert node1 Условие: В течение 4 часов каждый час фиксируется больше 3 ошибок Severity: low |
|
Контроль обращений от неподдерживаемых продуктов в рамках установленной лицензии | Authentication errors ELM | elm_server_unsupportedAuthRequest_value_events — Запрос аутентификации от устройств или ПО, которое не поддерживается лицензией | Наименование: ELM unsupported authentication request alert node1 Условие: В течение 4 часов каждый час фиксируется больше 3 ошибок Severity: low |
|
Мониторинг работоспособности сервера Offline ELM
Цель мониторинга | Наименование панели | Описание метрики | АлертМетрики сервера Offline ELM | Действие |
---|---|---|---|---|
Контроль способности сервера Offline ELM обрабатывать клиентские запросы | denial of service ELM | elm_server_serviceDenial_value_events — Отказ в обслуживании (отклонение запросов из-за загруженности сервера) | Наименование: ELM denial of service alert node1 Условие: Severity: medium |
|
Мониторинг автоматически созданных блокирующих ip-правил | ELM Block IP addresses | elm_server_blockIp_value_events — Автоматическая блокировка IP-адреса | Наименование: ELM block IP addresses alert node1 Условие: Severity: medium |
|
Мониторинг блокировки доступа по ip | ELM Access denied by IP addresses | elm_server_ipAccessDenied_value_events — Запрет доступа по IP | Наименование: ELM access denied by IP addresses alert node1 Условие: Severity: low |
|
Мониторинг подключений к web-интерфейсу | ELM processed WEB connections |
| Алерт не предусмотрен | - |
ELM active WEB connections |
| Алерт не предусмотрен | - |
Панель мониторинга "elm_monitor"
Панель мониторинга "elm_monitor" предоставляет администратору Offline ELM общую информацию о хосте, в котором запущен Offline ELM, а также информацию о Docker-контейнерах Offline ELM.
Рисунок 18 — Панель мониторинга "elm_monitor"
На данной панели мониторинга представлена следующая информация:
- Средняя загруженность системы (за 1/5/15 минут);
- Количество ядер процессора;
- Загруженность процессора (в процентах);
- Количество используемой/общей оперативной памяти;
- Загрузка процессора Docker-контейнерами ELM;
- Использование памяти Docker-контейнерами ELM и JVM;
- Входящий и исходящий сетевой трафик Docker-контейнеров ELM (прирост за каждые 10 секунд);
- Информация о Docker-контейнерах ELM:
- имя сервиса;
- идентификатор процесса;
- код возврата (при работе контейнера — код 0);
- время старта контейнера;
- время работы контейнера;
- флаг нехватки оперативной памяти;
- проверка работоспособности сервисов и количество ошибок его проверки.
Алерты
На панели мониторинга "elm_alert_metrics" представлен список алертов.
Рисунок 19 — Панель алертов
Подробнее о каждом алерте и его смысле можно прочитать в таблице из раздела Метрики сервера Offline.
Система оповещений о событиях ELM
Оповещение пользователя осуществляется с помощью механизма оповещений сервиса Grafana на основе событий (алертов) системных метрик и метрик, передаваемых ELM.
По умолчанию доступны следующие типы оповещений:
- рассылка с помощью E-mail;
- отправка сообщений через Telegram-бота.
Оповещения предусмотрены для всех алертов. Вы можете гибко настроить группы пользователей, которым должны отправляться оповещения об алертах разных меток severity.
Всего предусмотрены 4 группы меток severity для алертов:
- critical — требуется незамедлительная реакция. Процесс лицензирования прерван;
- high — уведомление о необходимости продления лицензии, или какой-то продукт не может получить лицензию;
- medium — продолжительное время отсутствуют запросы лицензии от лицензируемых продуктов или недоступен web-интерфейс;
- low — нелегитимные попытки авторизации от неподдерживаемых продуктов.
Оповещения приходят в двух случаях:
- появление проблемы (например, срок лицензии подходит к концу) — приходит оповещение с пометкой Firing;
- разрешение проблемы (например, срок лицензии был продлен) — приходит оповещение с пометкой Resolved.
Настройка оповещений
Настройка параметров оповещений может осуществляться через интерфейс Grafana в разделе "Alerting" → "Notification policies".
Либо через указание переменных окружения в файле .env перед запуском сервиса мониторинга.
Доступные переменные окружения:
Наименование переменной | Описание |
---|---|
NOTIFICATION_EMAIL_ADDRESSES | перечень адресов для рассылки e-mail оповещений для contact point "Email and telegram notification" |
NOTIFICATION_TELEGRAM_BOT_TOKEN | токен для доступа к Telegram-боту для рассылки оповещений для contact point "Email and telegram notification". Токен можно получить, создав бота с помощью запроса к Telegram-боту @BotFather |
NOTIFICATION_TELEGRAM_USER_ID | идентификатор пользователя для оповещения для contact point "Email and telegram notification". |
При настройке оповещений с помощью e-mail также необходимо указать в .env файле параметры SMTP-сервера, через который должна осуществляться рассылка:
Наименование переменной | Описание |
---|---|
SMTP_HOST | адрес SMTP-сервера |
SMTP_NAME | имя пользователя |
SMTP_PASSWORD | пароль |
SMTP_FROM_ADDRESS | почта, с которой будут рассылаться оповещения |
SMTP_FROM_NAME | имя, используемое для рассылки оповещений |
SMTP_SKIP_VERIFY | пропустить проверку SSL-сертификата сервера |
SMTP_CERT_FILE | файл сертификата для настройки защищенного SSL-соединения |
SMTP_KEY_FILE | файл ключей для настройки защищенного SSL-соединения |
Для работы оповещений через данные, указанные в .env, (они же contact point под названием "Email and telegram notification") необходимо в разделе "Notification policies", в параметре Default policy выбрать "Email and telegram notification" contact point вместо "grafana-default-email".
Рисунок 20 — Раздел "Notification policies"
Рисунок 21 — Установка "Email and telegram notification"
Для проверки правильности настройки contact point (то есть места, куда Grafana будет присылать эти оповещения ), есть возможность отправки тестовых оповещений. Для это необходимо перейти в раздел "Alerting" → "Contanct points". У Contact point с названием "Email and telegram notification" нажать кнопку "View". Далее можно будет отправить тестовое оповещение в Telegram или на почту.
Рисунок 22 — Отправка тестового оповещения на почту
Рисунок 23 — Пример оповещения о необходимости продления лицензии, отправленного на почту
Рисунок 24 — Пример оповещения о необходимости продления лицензии, отправленного в Telegram