Система мониторинга Offline ELM предоставляет возможности по отслеживанию состояния как самого хоста, на котором запущен Offline ELM (загрузка ЦП, оперативной памяти хоста, потребление ресурсов контейнерами), так и работы системы лицензирования (фиксирование запросов лицензии, ошибок работы, состояния сертификатов и т. д.). Помимо этого, можно настроить оповещения о различных событиях для своевременного реагирования на инциденты или плановые административные работы.
Система для мониторинга ELM представлена стеком сервисов:
Файлы системы мониторинга находятся в архиве elm-monitoring-data-1.5-1.tar.gz. В данном архиве предоставляется две конфигурации мониторинга:
Набор файлов, необходимых для запуска Offline ELM и сервисов мониторинга:
Файлы, используемые для конфигурации мониторинга
| Путь | Описание |
|---|---|
| elm-monitoring-data-1.5-1/elm-*-monitoring-data-1.5-1/grafana/provisioning/dashboards | Перечень JSON-файлов, описывающих содержимое dashboard-страниц, доступных для просмотра в Grafana. |
| elm-monitoring-data-1.5-1/elm-*-monitoring-data-1.5-1/grafana/provisioning/datasources | Файл datasource.yml описывает источники данных мониторинга для отображения в Grafana. |
| elm-monitoring-data-1.5-1/elm-*-monitoring-data-1.5-1/grafana/provisioning/alerting | Перечень файлов с описанием методов оповещения пользователей с помощью Grafana:
|
| elm-monitoring-data-1.5-1/elm-*-monitoring-data-1.5-1/prometheus/prometheus.yml | В файле prometheus.yml перечислены адреса Spring Actuator для получения значений метрик, поддерживаемых в ELM. По умолчанию, при запуске ELM через docker-compose, адресами являются названия сервисов, перечисленных для запуска в файлах docker-compose.yml. |
| elm-monitoring-data-1.5-1/elm-*-monitoring-data-1.5-1/loki/config/loki-config.yaml | Файл с описанием конфигурации сервиса Loki. |
| elm-offline-data-1.5-1/config/telegraf/telegraf.conf | Файл с описанием данных системы, доступных для получения контейнером telegraf и указанием адреса БД influxdb, куда сохранять полученные данные. |
| elm-offline-data-1.5-1/config/promtail/promtail.yaml | Файл с конфигурацией сервиса Promtail. |
| elm-offline-data-1.5-1/.env | Файл для установки переменных окружения, связанных с сервером Offline ELM. |
| elm-monitoring-data-1.5-1/.env | Файл для установки переменных окружения, связанных с сервисами мониторинга. |
Переменные окружения устанавливаются в файле .env. После их изменения требуется перезапуск контейнеров.
Переменные окружения делятся на два типа:
1. Устанавливаются для сервера Offline ELM в файле .env, который располагается в директории с конфигурационными файлами сервера (по умолчанию elm-offline-data-1.5-1/.env).
| Название параметра | Описание параметра | Значение по умолчанию |
|---|---|---|
MONITORING_SERVER_ADDRESS | Адрес, на который будет проброшен actuator | 127.0.0.1 |
MONITORING_SERVER_PORT | Порт, на который будет вывешиваться actuator | 8080 |
| MONITORING_SERVER_USERNAME | Имя пользователя для авторизации на actuator | admin |
| MONITORING_SERVER_PASSWORD | Пароль для авторизации на actuator | password |
| LOKI_ADDRESS | Адрес, используемый для подключения promtail к loki | loki |
| LOKI_PORT | Порт, используемый для подключения promtail к loki | 3100 |
| ELM_INSTANCE_ID | Определяет основной или резервный сервер ELM | node1 |
2. Устанавливаются непосредственно в директории с конфигурационными файлами сервисов мониторинга в файле .env (по умолчанию elm-*-monitoring-data-1.5-1/.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 | - |
Для упрощенного запуска мониторинга Offline ELM поставляется скрипт инсталляции install-offline.sh. Данный скрипт хранится вместе с конфигурационными файлами и образами Offline ELM. Также его можно скачать отдельно с ownCloud по ссылкам из раздела Получение файлов для запуска Offline ELM.
1. Перед запуском необходимо установить права на исполнение с помощью команды:
sudo chmod +x ./install-offline.sh |
2. Получить информацию о доступных опциях скрипта можно, запустив скрипт с флагом --help или без параметров:
$ ./install-offline.sh
Script usage: ./install-offline.sh [OPTIONS]
Options:
--elm-images <ARCHIVE> path to archive with images
--elm-data <ARCHIVE> path to archive with config and compose files
--monitoring-images <ARCHIVE> path to archive with images for monitoring
--monitoring-data <ARCHIVE> path to archive with data for monitoring
--env <FILE> path to .env file
usage with option --elm-images
--elm-dir <DIRECTORY> path to directory where need to unpack archive with data files
usage with option --elm-data
--monitoring-dir <DIRECTORY> path to directory where need to unpack archive with data files for monitoring
usage with option --monitoring-data
-h, --help output this help
Required options:
One of the options --elm-images, --elm-data, --monitoring-images, --monitoring-data must be set |
3. Для запуска скрипта с распаковкой конфигурационных файлов и загрузкой образов мониторинга Offline ELM используйте следующую команду:
$ ./install-offline.sh --monitoring-images elm-monitoring-images-1.5-1.tar.gz --monitoring-data elm-monitoring-data-1.5-1.tar.gz |
$ ./install-offline.sh --monitoring-images elm-monitoring-images-1.5-1.tar.gz --monitoring-data elm-monitoring-data-1.5-1.tar.gz Loaded image: influxdb:2.7.5 Loaded image: prometheus:v2.51.0 Loaded image: grafana:10.4.1 Loaded image: loki:2.9.10 INFO: Extract files: elm-monitoring-data-1.5-1/ elm-monitoring-data-1.5-1/elm-one-node-monitoring-data-1.5-1/ elm-monitoring-data-1.5-1/elm-one-node-monitoring-data-1.5-1/grafana/ elm-monitoring-data-1.5-1/elm-one-node-monitoring-data-1.5-1/grafana/provisioning/ elm-monitoring-data-1.5-1/elm-one-node-monitoring-data-1.5-1/grafana/provisioning/notifiers/ elm-monitoring-data-1.5-1/elm-one-node-monitoring-data-1.5-1/grafana/provisioning/notifiers/telegram.yml elm-monitoring-data-1.5-1/elm-one-node-monitoring-data-1.5-1/grafana/provisioning/notifiers/email.yml elm-monitoring-data-1.5-1/elm-one-node-monitoring-data-1.5-1/grafana/provisioning/alerting/ elm-monitoring-data-1.5-1/elm-one-node-monitoring-data-1.5-1/grafana/provisioning/alerting/alert_notification.yml elm-monitoring-data-1.5-1/elm-one-node-monitoring-data-1.5-1/grafana/provisioning/alerting/alert_rules.yml elm-monitoring-data-1.5-1/elm-one-node-monitoring-data-1.5-1/grafana/provisioning/datasources/ elm-monitoring-data-1.5-1/elm-one-node-monitoring-data-1.5-1/grafana/provisioning/datasources/datasource.yml elm-monitoring-data-1.5-1/elm-one-node-monitoring-data-1.5-1/grafana/provisioning/dashboards/ elm-monitoring-data-1.5-1/elm-one-node-monitoring-data-1.5-1/grafana/provisioning/dashboards/elm_monitor.json elm-monitoring-data-1.5-1/elm-one-node-monitoring-data-1.5-1/grafana/provisioning/dashboards/dashboard.yml elm-monitoring-data-1.5-1/elm-one-node-monitoring-data-1.5-1/grafana/provisioning/dashboards/elm_alert_metrics_offline_single.json elm-monitoring-data-1.5-1/elm-one-node-monitoring-data-1.5-1/docker-compose.yml elm-monitoring-data-1.5-1/elm-one-node-monitoring-data-1.5-1/loki/ elm-monitoring-data-1.5-1/elm-one-node-monitoring-data-1.5-1/loki/config/ elm-monitoring-data-1.5-1/elm-one-node-monitoring-data-1.5-1/loki/config/loki-config.yaml elm-monitoring-data-1.5-1/elm-one-node-monitoring-data-1.5-1/prometheus/ elm-monitoring-data-1.5-1/elm-one-node-monitoring-data-1.5-1/prometheus/prometheus.yml elm-monitoring-data-1.5-1/elm-one-node-monitoring-data-1.5-1/.env elm-monitoring-data-1.5-1/elm-two-nodes-monitoring-data-1.5-1/ elm-monitoring-data-1.5-1/elm-two-nodes-monitoring-data-1.5-1/grafana/ elm-monitoring-data-1.5-1/elm-two-nodes-monitoring-data-1.5-1/grafana/provisioning/ elm-monitoring-data-1.5-1/elm-two-nodes-monitoring-data-1.5-1/grafana/provisioning/notifiers/ elm-monitoring-data-1.5-1/elm-two-nodes-monitoring-data-1.5-1/grafana/provisioning/notifiers/telegram.yml elm-monitoring-data-1.5-1/elm-two-nodes-monitoring-data-1.5-1/grafana/provisioning/notifiers/email.yml elm-monitoring-data-1.5-1/elm-two-nodes-monitoring-data-1.5-1/grafana/provisioning/alerting/ elm-monitoring-data-1.5-1/elm-two-nodes-monitoring-data-1.5-1/grafana/provisioning/alerting/alert_notification.yml elm-monitoring-data-1.5-1/elm-two-nodes-monitoring-data-1.5-1/grafana/provisioning/alerting/alert_rules.yml elm-monitoring-data-1.5-1/elm-two-nodes-monitoring-data-1.5-1/grafana/provisioning/datasources/ elm-monitoring-data-1.5-1/elm-two-nodes-monitoring-data-1.5-1/grafana/provisioning/datasources/datasource.yml elm-monitoring-data-1.5-1/elm-two-nodes-monitoring-data-1.5-1/grafana/provisioning/dashboards/ elm-monitoring-data-1.5-1/elm-two-nodes-monitoring-data-1.5-1/grafana/provisioning/dashboards/elm_alert_metrics_offline_reserve.json elm-monitoring-data-1.5-1/elm-two-nodes-monitoring-data-1.5-1/grafana/provisioning/dashboards/elm_monitor.json elm-monitoring-data-1.5-1/elm-two-nodes-monitoring-data-1.5-1/grafana/provisioning/dashboards/dashboard.yml elm-monitoring-data-1.5-1/elm-two-nodes-monitoring-data-1.5-1/docker-compose.yml elm-monitoring-data-1.5-1/elm-two-nodes-monitoring-data-1.5-1/loki/ elm-monitoring-data-1.5-1/elm-two-nodes-monitoring-data-1.5-1/loki/config/ elm-monitoring-data-1.5-1/elm-two-nodes-monitoring-data-1.5-1/loki/config/loki-config.yaml elm-monitoring-data-1.5-1/elm-two-nodes-monitoring-data-1.5-1/prometheus/ elm-monitoring-data-1.5-1/elm-two-nodes-monitoring-data-1.5-1/prometheus/prometheus.yml elm-monitoring-data-1.5-1/elm-two-nodes-monitoring-data-1.5-1/.env Success! |
После завершения работы скрипта на систему будут загружены docker-образы, а файлы конфигурации распакованы в каталог elm-monitoring-data-1.5-1.
├── elm-one-node-monitoring-data-1.5-1
│ ├── docker-compose.yml
│ ├── grafana
│ │ └── provisioning
│ │ ├── alerting
│ │ │ ├── alert_notification.yml
│ │ │ └── alert_rules.yml
│ │ ├── dashboards
│ │ │ ├── dashboard.yml
│ │ │ ├── elm_alert_metrics_offline_single.json
│ │ │ └── elm_monitor.json
│ │ ├── datasources
│ │ │ └── datasource.yml
│ │ └── notifiers
│ │ ├── email.yml
│ │ └── telegram.yml
│ ├── loki
│ │ └── config
│ │ └── loki-config.yaml
│ └── prometheus
│ └── prometheus.yml
└── elm-two-nodes-monitoring-data-1.5-1
├── docker-compose.yml
├── grafana
│ └── provisioning
│ ├── alerting
│ │ ├── alert_notification.yml
│ │ └── alert_rules.yml
│ ├── dashboards
│ │ ├── dashboard.yml
│ │ ├── elm_alert_metrics_offline_reserve.json
│ │ └── elm_monitor.json
│ ├── datasources
│ │ └── datasource.yml
│ └── notifiers
│ ├── email.yml
│ └── telegram.yml
├── loki
│ └── config
│ └── loki-config.yaml
└── prometheus
└── prometheus.yml
21 directories, 22 files |
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE loki 2.9.10 6dc62b620873 7 months ago 77.5MB influxdb 2.7.5 69e1e1673bcf 11 months ago 378MB grafana 10.4.1 ccb72d0beb64 12 months ago 430MB prometheus v2.51.0 1d3b7f56885b 12 months ago 262MB |
1. Выполните загрузку Docker-образов на хост:
docker load < elm-monitoring-images-1.5-1.tar.gz |
2. Распакуйте архив elm-monitoring-data-1.5-1.tar.gz:
tar -xf elm-monitoring-data-1.5-1.tar.gz |
Для запуска мониторинга необходимо распаковать архив elm-monitoring-data-1.5-1.tar.gz. Структура файлов архива:
elm-monitoring-data-1.5-1
├── elm-one-node-monitoring-data-1.5-1
│ ├── .env
│ ├── docker-compose.yml
│ ├── grafana
│ │ └── provisioning
│ │ ├── alerting
│ │ │ ├── alert_notification.yml
│ │ │ └── alert_rules.yml
│ │ ├── dashboards
│ │ │ ├── dashboard.yml
│ │ │ ├── elm_alert_metrics_offline_single.json
│ │ │ └── elm_monitor.json
│ │ ├── datasources
│ │ │ └── datasource.yml
│ │ └── notifiers
│ │ ├── email.yml
│ │ └── telegram.yml
│ ├── loki
│ │ └── config
│ │ └── loki-config.yaml
│ └── prometheus
│ └── prometheus.yml
└── elm-two-nodes-monitoring-data-1.5-1
├── .env
├── docker-compose.yml
├── grafana
│ └── provisioning
│ ├── alerting
│ │ ├── alert_notification.yml
│ │ └── alert_rules.yml
│ ├── dashboards
│ │ ├── dashboard.yml
│ │ ├── elm_alert_metrics_offline_reserve.json
│ │ └── elm_monitor.json
│ ├── datasources
│ │ └── datasource.yml
│ └── notifiers
│ ├── email.yml
│ └── telegram.yml
├── loki
│ └── config
│ └── loki-config.yaml
└── prometheus
└── prometheus.yml
20 directories, 24 files |
В этом разделе описан запуск системы мониторинга для одной ноды Offline ELM, поэтому далее рассматривается алгоритм работы с папкой elm-one-node-monitoring-data-1.5-1.
Запуск системы мониторинга на одной системе с Offline ELM не рекомендуется. Однако такая реализация возможна. В этом случае сервисы мониторинга и Offline ELM будут подключены через внутреннюю сеть Docker. |
Сервисы Telegraf и Promtail запускаются вместе с сервером Offline ELM, параметры их запуска прописаны в docker-compose.yml файле и .env.
1. В файле .env, расположенном в директории, в которой запущен Offline ELM (по умолчанию elm-offline-data-1.5-1), необходимо указать DOCKER_GROUP_ID — значение группы пользователя docker. Узнать id группы docker можно командой:
$ getent group docker| cut -d: -f3 999 |
DOCKER_GROUP_ID="999" |
2. Перезапустите контейнеры Offline ELM, чтобы настройки конфигурации применились:
$ docker compose down $ docker compose up -d |
1. Выполните подготовку файлов мониторинга согласно инструкции Подготовка файлов мониторинга.
2. Если требуется, укажите необходимые переменные окружения из раздела Переменные окружения мониторинга ELM.
3. Перейдите в папку elm-one-node-monitoring-data-1.5-1. Выполните команду запуска контейнеров мониторинга:
$ docker compose up -d |
Перейдите в web-интерфейс (дефолтный адрес: http://localhost:3000), отобразится web-интрефейс Grafana.
На этом базовая настройка мониторинга закончена. Более гибкая настройка мониторинга описана в разделе Переменные окружения мониторинга ELM.
Сервисы Telegraf и Promtail запускаются вместе с сервером Offline ELM, параметры их запуска прописаны в docker-compose.yml файле и .env.
. ├── config │ ├── telegraf │ └── telegraf.conf │ └── promtail │ └── promtail.yaml └── docker-compose.yml |
1. Перейдите в папку с запущенным сервисом Offline ELM (по умолчанию elm-offline-data-1.5-1). В файле .env укажите следующие переменные окружения:
$ getent group docker| cut -d: -f3 999 |
Пример итоговой конфигурации в .env файле для мониторинга Offline ELM:
MONITORING_SERVER_USERNAME=user1 MONITORING_SERVER_PASSWORD=password123 MONITORING_SERVER_ADDRESS=192.168.1.1 # адрес интерфейса на сервере, где запущен Offline ELM MONITORING_SERVER_PORT=8097 LOKI_ADDRESS=192.168.1.5 # адрес сервера, на котором запущена система мониторинга LOKI_PORT=3100 DOCKER_GROUP_ID=999 |
2. Перейдите в папку c конфигурационным файлом telegraf.conf на сервере, где запущен Offline ELM по пути elm-offline-data-1.5-1/config/telegraf/telegraf.conf. В разделе [[outputs.influxdb_v2]] в переменной urls укажите адрес и порт сервиса influxdb, который будет запущен на сервере с системой мониторинга. Т. е. укажите адрес самого сервера в локальной сети. Порт рекомендуется оставить дефолтным — 8086.
$ diff telegraf.conf_old telegraf.conf < urls = ["http://influxdb:8086"] --- > urls = ["http://192.168.1.5:8086"] |
3. Перезапустите контейнеры, чтобы применились настройки конфигурации:
$ docker compose down $ docker compose up -d |
1. Выполните подготовку файлов мониторинга согласно инструкции Подготовка файлов мониторинга.
2. Перейдите в директорию elm-one-node-monitoring-data-1.5-1. с файлами мониторинга. Выполните настройку через переменные окружения в .env файле.
MONITORING_INFLUXDB_ADDRESS=192.168.1.5 MONITORING_INFLUXDB_PORT=8086 MONITORING_GRAFANA_ADDRESS=192.168.1.5 MONITORING_GRAFANA_PORT=3000 |
3. В конфигурационном файле prometheus.yml (elm-one-node-monitoring-data-1.5-1/prometheus/prometheus.yml) измените адрес "targets: ['elmi-offline-server:8097']" на адрес и порт, которые были указаны при конфигурировании Offline ELM в переменных MONITORING_SERVER_ADDRESS и MONITORING_SERVER_PORT.
static_configs:
- targets: ['192.168.1.1:8097'] # Адрес сервера Offline ELM и порт, указанные в переменных MONITORING_SERVER_ADDRESS и MONITORING_SERVER_PORT
labels:
host: elmi-offline-server |
4. В конфигурационном файле prometheus.yml (elm-one-node-monitoring-data-1.5-1/prometheus/prometheus.yml) измените при необходимости данные логина и пароля пользователя для подключения к актуатору (отвечает за мониторинг) сервисов ELM. Эти данные указывались в переменных окружения MONITORING_SERVER_USERNAME и MONITORING_SERVER_PASSWORD.
basic_auth:
username: 'user1'
password: 'password123' |
5. В конфигурационном файле prometheus.yml (elm-one-node-monitoring-data-1.5-1/prometheus/prometheus.yml) укажите адрес сервера, на котором запущен Offline ELM для сервиса nginx-exporter.
static_configs:
- targets: ['192.168.1.1:9113'] # Адрес сервера Offline ELM и порт сервиса nginx-exporter (по умолчанию 9113)
labels:
host: nginx-exporter |
6. Запустите сервисы мониторинга.
$ docker compose up -d |
7. Убедитесь, что все контейнеры системы мониторинга ELM успешно запущены, используя команду "docker compose ps":
$ docker compose ps NAME COMMAND SERVICE STATUS PORTS grafana "/run.sh" grafana running 0.0.0.0:3000->3000/tcp influxdb "/entrypoint.sh infl…" influxdb running 0.0.0.0:8086->8086/tcp loki "/usr/bin/loki -conf…" loki running 0.0.0.0:3100->3100/tcp prometheus "/bin/prometheus --c…" prometheus running 0.0.0.0:9090->9090/tcp, :::9090->9090/tcp |
8. Зайдите в web-интерфейс Grafana.
Web-интерфейс Grafana доступен по следующему адресу:
http://<MONITORING_GRAFANA_ADDRESS>:<MONITORING_GRAFANA_PORT>/
Авторизоваться можно по умолчанию с логином admin и паролем password.
Перейдите в раздел Dashboards. Здесь представлен список всех дашбордов:

Рисунок 12 — Список дашбордов мониторинга ELM
1. Перейдите в elm_alert_metrics_offline. Если в списке Host написано node1, на графиках видны метрики, и алерты горят зеленым, значит подключение прошло успешно. Осталось настроить несколько панелей (ELM USB token alert, Web UI Status, Licensing state, Licensing expiry, Certificate state, Certificate expiry).

Рисунок 13 — Дашбор "elm_alert_metrics_offline"
2. На панели через меню с 3 вертикальными точками нажмите "Edit".
3. Для панелей, отображающих даты (Certificate expiry date, Licensing expiry date), под самой панелью перейдите в раздел "Transform data", в выпадающем меню "Operation", как и для панели состояния выберите поле, значение "instance" в котором будет соответствовать указанному IP-адресу в файле конфигурации prometheus.yml.

Рисунок 14 — Выбор данных в "Transform data"
4. В "Value options" в выпадающем меню "Fields" выберите актуальное поле, где значение "instance" будет соответствовать указанному IP-адресу в файле конфигурации prometheus.yml.

Рисунок 15 — Выбор источника данных
5. Для панелей ELM USB token alert, Web UI Status, Licensing state, Certificate state достаточно в "Value options" в выпадающем меню "Fields" выберите актуальное поле, где значение "instance" будет соответствовать указанному IP-адресу в файле конфигурации prometheus.yml.
6. После каждого изменения в верхнем правом углу необходимо сохранять и применять конфигурацию.

Рисунок 16 — Сохранение конфигурации Grafana
Настройка системы мониторинга завершена.

Рисунок 17 — Вид системы мониторинга для одной ноды Offline ELM, дашборд "elm_alert_metrics_offline"

Рисунок 18 — Вид системы мониторинга для одной ноды Offline ELM, дашборд "elm_monitor"
Для запуска мониторинга необходимо распаковать архив elm-monitoring-data-1.5-1.tar.gz. Структура файлов архива:
elm-monitoring-data-1.5-1
├── elm-one-node-monitoring-data-1.5-1
│ ├── .env
│ ├── docker-compose.yml
│ ├── grafana
│ │ └── provisioning
│ │ ├── alerting
│ │ │ ├── alert_notification.yml
│ │ │ └── alert_rules.yml
│ │ ├── dashboards
│ │ │ ├── dashboard.yml
│ │ │ ├── elm_alert_metrics_offline_single.json
│ │ │ └── elm_monitor.json
│ │ ├── datasources
│ │ │ └── datasource.yml
│ │ └── notifiers
│ │ ├── email.yml
│ │ └── telegram.yml
│ ├── loki
│ │ └── config
│ │ └── loki-config.yaml
│ └── prometheus
│ └── prometheus.yml
└── elm-two-nodes-monitoring-data-1.5-1
├── .env
├── docker-compose.yml
├── grafana
│ └── provisioning
│ ├── alerting
│ │ ├── alert_notification.yml
│ │ └── alert_rules.yml
│ ├── dashboards
│ │ ├── dashboard.yml
│ │ ├── elm_alert_metrics_offline_reserve.json
│ │ └── elm_monitor.json
│ ├── datasources
│ │ └── datasource.yml
│ └── notifiers
│ ├── email.yml
│ └── telegram.yml
├── loki
│ └── config
│ └── loki-config.yaml
└── prometheus
└── prometheus.yml
20 directories, 24 files |
В этом разделе описан запуск системы мониторинга для двух нод Offline ELM, поэтому далее рассматривается алгоритм работы с папкой elm-two-nodes-monitoring-data-1.5-1.
Настройка Offline ELM для обоих нод отличается только IP-адресами сервера, на котором запущена каждая инсталляция Offline ELM и ELM_INSTANCE_ID=node1/node2. |
Сервисы Telegraf и Promtail запускаются вместе с сервером Offline ELM, параметры его запуска прописаны в docker-compose.yml файле. Конфигурационные файлы данного сервиса расположены в папке config.
. ├── config │ └── telegraf │ └── telegraf.conf └── docker-compose.yml |
1. Перейдите в папку с запущенным сервисом Offline ELM. В файле .env, расположенном в директории elm-offline-data-1.5-1, требуется указать следующие переменные окружения:
$ getent group docker| cut -d: -f3 999 |
DOCKER_GROUP_ID="999" |
Пример итоговой конфигурации в .env файле для node1 Offline ELM:
ELM_INSTANCE_ID=node1 MONITORING_SERVER_USERNAME=user1 MONITORING_SERVER_PASSWORD=password123 MONITORING_SERVER_ADDRESS=192.168.1.1 # адрес интерфейса на сервере, где запущена node1 Offline ELM MONITORING_SERVER_PORT=8097 LOKI_ADDRESS=192.168.1.5 # адрес сервера, на котором запущена система мониторинга LOKI_PORT=3100 DOCKER_GROUP_ID=999 |
Пример итоговой конфигурации в .env файле для node2 Offline ELM:
ELM_INSTANCE_ID=node2 MONITORING_SERVER_USERNAME=user1 MONITORING_SERVER_PASSWORD=password123 MONITORING_SERVER_ADDRESS=192.168.1.2 # адрес интерфейса на сервере, где запущена node2 Offline ELM MONITORING_SERVER_PORT=8097 LOKI_ADDRESS=192.168.1.5 # адрес сервера, на котором запущена система мониторинга LOKI_PORT=3100 DOCKER_GROUP_ID=999 |
2. Перейдите в папку c конфигурационным файлом telegraf.conf на сервере, где запущен Offline ELM по пути elm-offline-data-1.5-1/config/telegraf/telegraf.conf. В разделе [[outputs.influxdb_v2]] в переменной urls укажите адрес и порт сервиса influxdb, который будет запущен на сервере с системой мониторинга. Т. е. укажите адрес самого сервера в локальной сети. Порт рекомендуется оставить дефолтным — 8086.
$ diff telegraf.conf_old telegraf.conf < urls = ["http://influxdb:8086"] --- > urls = ["http://192.168.1.5:8086"] |
3. Перезапустите контейнеры, чтобы применились настройки конфигурации.
$ docker compose down $ docker compose up -d |
1. Выполните подготовку файлов мониторинга согласно инструкции Подготовка файлов мониторинга.
2. Перейдите в директорию elm-two-nodes-monitoring-data-1.5-1. с файлами мониторинга. Выполните настройку через переменные окружения в .env файле.
MONITORING_INFLUXDB_ADDRESS=192.168.1.5 MONITORING_INFLUXDB_PORT=8086 MONITORING_GRAFANA_ADDRESS=192.168.1.5 MONITORING_GRAFANA_PORT=3000 |
3. В конфигурационном файле prometheus.yml (elm-two-nodes-monitoring-data-1.5-1/prometheus/prometheus.yml) измените адрес "targets: ['elmi-offline-server:8097']" и "targets: ['elmi-offline-server2:8097']" на адрес и порт, которые были указаны при конфигурировании node1 и node2 Offline ELM в переменных MONITORING_SERVER_ADDRESS и MONITORING_SERVER_PORT.
static_configs:
- targets: ['192.168.1.1:8097'] # Адрес сервера node1 Offline ELM и порт, указанные в переменных MONITORING_SERVER_ADDRESS и MONITORING_SERVER_PORT
labels:
host: elmi-offline-server
- targets: ['192.168.1.2:8097'] # Адрес сервера node2 Offline ELM и порт, указанные в переменных MONITORING_SERVER_ADDRESS и MONITORING_SERVER_PORT
labels:
host: elmi-offline-server2 |
4. В конфигурационном файле prometheus.yml (elm-two-nodes-monitoring-data-1.5-1/prometheus/prometheus.yml) измените при необходимости данные логина и пароля пользователя для подключения к актуатору (отвечает за мониторинг) сервисов ELM. Эти данные указывались в переменных окружения MONITORING_SERVER_USERNAME и MONITORING_SERVER_PASSWORD.
basic_auth:
username: 'user1'
password: 'password123' |
5. В конфигурационном файле prometheus.yml (elm-two-nodes-monitoring-data-1.5-1/prometheus/prometheus.yml) укажите адрес сервера, на котором запущен Offline ELM для сервиса nginx-exporter.
static_configs:
- targets: ['192.168.1.1:9113']
labels:
host: nginx-exporter
- targets: ['192.168.1.2:9113']
labels:
host: nginx-exporter2 |
6. Запустите сервисы мониторинга.
$ docker compose up -d |
7. Убедитесь, что все контейнеры системы мониторинга ELM успешно запущены, используя команду "docker compose ps":
$ docker compose ps NAME COMMAND SERVICE STATUS PORTS grafana "/run.sh" grafana running 0.0.0.0:3000->3000/tcp influxdb "/entrypoint.sh infl…" influxdb running 0.0.0.0:8086->8086/tcp loki "/usr/bin/loki -conf…" loki running 0.0.0.0:3100->3100/tcp prometheus "/bin/prometheus --c…" prometheus running 0.0.0.0:9090->9090/tcp, :::9090->9090/tcp |
8. Зайдите в web-интерфейс Grafana.
Web-интерфейс Grafana доступен по следующему адресу:
http://<MONITORING_GRAFANA_ADDRESS>:<MONITORING_GRAFANA_PORT>/
Авторизоваться можно по умолчанию с логином admin и паролем password.
Перейдите в раздел Dashboards. Здесь представлен список всех дашбордов:

Рисунок 19 — Список дашбордов мониторинга ELM
1. Перейдите в elm_alert_metrics_offline. Если в списке Host написано node1, на графиках видны метрики, и алерты горят зеленым, значит подключение прошло успешно. Осталось настроить несколько панелей:

Рисунок 20 — Дашборд "elm_alert_metrics_offline2"
2. На панели через меню с 3 вертикальными точками нажмите "Edit".
3. Для панелей, отображающих даты (Licensing expiry date), под самой панелью перейдите в раздел "Transform data", в выпадающем меню "Operation", как и для панели состояния выберите поле, значение "instance" в котором будет соответствовать указанному IP-адресу в файле конфигурации prometheus.yml.

Рисунок 21 — Выбор данных в "Transform data"
4. В "Value options" в выпадающем меню "Fields" выберите актуальное поле, значение "instance" в котором будет соответствовать указанному IP-адресу в файле конфигурации prometheus.yml.

Рисунок 22 — Выбор источника данных
5. Для панелей ELM USB token Status, Web UI Status, Licensing state, Certificate state достаточно в "Value options" в выпадающем меню "Fields" выбрать актуальное поле, где значение "instance" будет соответствовать указанному IP-адресу в файле конфигурации prometheus.yml.
6. Для панели Certificate expiry date после выбора в разделе "Transform data", в выпадающем меню "Operation" верного источника данных, в правом меню в разделе "Value options" в выпадающем меню "Fields" необходимо выбрать "ExpiryCertificate".

Рисунок 23 — Установка значения ExpiryCertificate для панели "Certificate expiry date"
7. После каждого изменения в верхнем правом углу необходимо сохранять и применять конфигурацию.

Рисунок 24 — Сохранение конфигурации Grafana
Настройка системы мониторинга двух нод Offline ELM завершена.

Рисунок 25 — Вид системы мониторинга для двух нод Offline ELM, дашборд "elm_alert_metrics_offline2"

Рисунок 26 — Вид системы мониторинга для двух нод Offline ELM, дашборд "elm_monitor"
Данные мониторинга и конфигурации дашбордов хранятся в Docker volume. Если вы удалите volume, данные будут утеряны. |
Для остановки системы мониторинга Offline ELM требуется произвести следующие шаги:
1. Перейти в директорию с конфигурационными файлами мониторинга (по умолчанию elm-*-monitoring-data-1.5-1).
2. Выполнить команду:
$ docker compose down |
$ docker compose down [+] Running 4/4 ⠿ Container influxdb Removed 3.7s ⠿ Container prometheus Removed 3.9s ⠿ Container grafana Removed 3.8s ⠿ Container loki Removed 4.5s |
Если сервисы мониторинга не запущены, в частности 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 администратору системы мониторинга становится доступен web-интерфейс Grafana по адресу:
http://<MONITORING_GRAFANA_ADDRESS>:<MONITORING_GRAFANA_PORT>/
Авторизоваться можно по умолчанию с логином admin и паролем password.

Рисунок 27 — Страница авторизации Grafana
После авторизации в web-интерфейсе Grafana для доступа к данным мониторинга с Offline ELM требуется перейти в раздел "Dashboards".
Для пользователя доступны два дашборда:
elm_alert_metrics — информация о состоянии метрик сервера Offline ELM.

Рисунок 28 — Страница "Dashboards", выбор раздела мониторинга
Панель мониторинга elm_alert_metrics_offline позволяет администратору получать информацию о состоянии внутренних метрик Offline ELM, сроках действия лицензии, сертификатов на токене, доступности токена и состоянии web-сервера.

Рисунок 29 — Дашборд "elm_alert_metrics"
Панель мониторинга elm_alert_metrics_offline2 позволяет администратору получать информацию о состоянии внутренних метрик Offline ELM, сроках действия лицензии, сертификатов на токене, доступности токена и состоянии web-сервера.

Рисунок 30 — Дашборд "elm_alert_metrics_offline2"
Переключаться между дашбордами двух нод Offline ELM можно с помощью меню Host.

Рисунок 31 — Переключение между нодами на дашборде "elm_alert_metrics_offline2"
Панель мониторинга elm_monitor предоставляет администратору Offline ELM общую информацию о хосте, в котором запущен Offline ELM, а также информацию о Docker-контейнерах Offline ELM.

Рисунок 32 — Панель мониторинга "elm_monitor"
На данной панели мониторинга представлена следующая информация:
Переключаться между дашбордами двух нод Offline ELM можно с помощью меню Host.

Рисунок 33 — Переключение между нодами на дашборде "elm_monitor"
| Цель мониторинга | Панель | Описание метрики | Алерт | Действие |
|---|---|---|---|---|
Контроль работоспособности Docker-контейнеров | Docker container healthcheck state |
| Наименование:
Условие: Код возврата ненулевой Severity: critical |
|
Контроль доступности USB-токена | ELM USB token Status | elm_server_tokenState_value_events — Состояние доступности USB-токена | Наименование:
Условие: Код возврата ненулевой Severity: critical |
|
| Контроль ошибок доступности USB-токена | ELM Token access errors | elm_server_tokenAccessError_value_events — Ошибки доступности USB-токена | Наименование:
Условие: Severity: critical |
|
Контроль доступности web-интерфейса | Web UI Status | nginx_up | Наименование:
Условие: Код возврата не равен 1 Severity: medium |
|
| Контроль работоспособности базы данных | DB errors | elm_server_databaseError_value_events — Ошибка доступа к БД | Наименование:
Условие: Severity: critical |
|
| Цель мониторинга | Панель | Описание метрики | Алерт | Действие |
|---|---|---|---|---|
| Заблаговременно сообщить о необходимости продления лицензии | Licensing state | elm_server_licensingState_value_events — Состояние срока действия лицензии:
| Наименование:
Условие: Код возврата ненулевой Severity: high | Запросить продление лицензии у поставщика оборудования |
| Контроль срока действия лицензии | Licensing expiry date | elm_server_licensingExpiry_value_events — Дата окончания срока действия лицензии | Алерт не предусмотрен | - |
| Сообщить о необходимости продления сертификата на USB-токене | Certificate state | elm_server_certificateState_value_events — Состояние срока действия сертификата
| Наименование:
Условие: Код возврата ненулевой Severity: critical | Запросить продление сертификата на USB-токене у поставщика оборудования |
| Контроль срока действия сертификата на USB-токене | Certificate expiry date | elm_server_certificateExpiry_value_events — Дата окончания срока действия сертификата | Алерт не предусмотрен | - |
| Цель мониторинга | Панель | Описание метрики | Алерт | Действие |
|---|---|---|---|---|
| Мониторинг запросов лицензии | ELM license request | elm_server_licenseRequest_value_events — Запрос файла лицензии от устройства/ПО | Алерт не предусмотрен |
|
| Мониторинг неудачных запросов лицензии | ELM license request | elm_server_licenseRequestFailed_value_events — Ошибка получения файла персональной лицензии устройством | Наименование:
Условие: Severity: high |
|
| Контроль ошибок аутентификации от лицензируемых продуктов | Authentication errors ELM | elm_server_authFailed_value_events — Ошибка аутентификации от устройства или ПО | Наименование:
Условие: В течение 4 часов каждый час фиксируется больше 3 ошибок Severity: low |
|
| Контроль обращений от неподдерживаемых продуктов в рамках установленной лицензии | Authentication errors ELM | elm_server_unsupportedAuthRequest_value_events — Запрос аутентификации от устройств или ПО, которое не поддерживается лицензией | Наименование:
Условие: В течение 4 часов каждый час фиксируется больше 3 ошибок Severity: low |
|
| Цель мониторинга | Панель | Описание метрики | Алерт | Действие |
|---|---|---|---|---|
| Контроль способности сервера Offline ELM обрабатывать клиентские запросы | denial of service ELM | elm_server_serviceDenial_value_events — Отказ в обслуживании (отклонение запросов из-за загруженности сервера) | Наименование:
Условие: Severity: medium |
|
| Мониторинг автоматически созданных блокирующих IP-правил | ELM Block IP addresses | elm_server_blockIp_value_events — Автоматическая блокировка IP-адреса | Наименование:
Условие: Severity: medium |
|
| Мониторинг блокировки доступа по IP | ELM Access denied by IP addresses | elm_server_ipAccessDenied_value_events — Запрет доступа по IP | Наименование:
Условие: Severity: low |
|
| Мониторинг подключений к web-интерфейсу | ELM processed WEB connections |
| Алерт не предусмотрен | - |
| ELM active WEB connections |
| Алерт не предусмотрен | - |
На панели мониторинга elm_alert_metrics представлен список алертов для мониторинга одной ноды Offline ELM.

Рисунок 34 — Панель алертов для одной ноды
При мониторинге двух нод Offline ELM выводятся только 20 алертов. Если какой-либо алерт меняет состояние с Normal, то он автоматически попадает в этот список.

Рисунок 35 — Панель алертов для мониторинга двух нод
Подробнее о каждом алерте и его смысле можно прочитать в таблице из раздела Метрики сервера Offline.
В официальной документации описана логика работы алертов в Grafana — Grafana Alerting.
Оповещение пользователя осуществляется с помощью механизма оповещений сервиса Grafana на основе событий (алертов) системных метрик и метрик, передаваемых ELM.
По умолчанию доступны следующие типы оповещений:
Оповещения предусмотрены для всех алертов. Вы можете гибко настроить группы пользователей, которым должны отправляться оповещения об алертах разных меток severity.
Всего предусмотрены 4 группы меток severity для алертов:
Оповещения приходят в двух случаях:
В официальной документации описана логика работы оповещений Grafana — Configure notifications.
Настройка параметров оповещений может осуществляться через интерфейс Grafana в разделе "Alerting" → "Notification policies".
Через указание переменных окружения в файле .env перед запуском сервиса мониторинга можно сконфигурировать параметры подключения к Telegram-боту и SMTP-серверу.
Переменные окружения для настройки оповещений через Telegram:
| Наименование переменной | Описание |
|---|---|
| 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:
| Наименование переменной | Описание |
|---|---|
| NOTIFICATION_EMAIL_ADDRESSES | перечень адресов для рассылки e-mail оповещений для contact point "Email and telegram notification" |
| 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".

Рисунок 36 — Раздел "Notification policies"

Рисунок 37 — Установка "Email and telegram notification"
Для проверки правильности настройки contact point (то есть места, куда Grafana будет присылать эти оповещения ), есть возможность отправки тестовых оповещений. Для это необходимо перейти в раздел "Alerting" → "Contact points". У Contact point с названием "Email and telegram notification" нажать кнопку "View". Далее можно будет отправить тестовое оповещение в Telegram или на почту.

Рисунок 38 — Отправка тестового оповещения на почту

Рисунок 39 — Пример оповещения о необходимости продления лицензии, отправленного на почту

Рисунок 40 — Пример оповещения о необходимости продления лицензии, отправленного в Telegram