Мониторинг Offline ELM обеспечивается с помощью следующих сервисов:
Файлы, используемые для конфигурации мониторинга
Путь | Описание |
---|---|
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 | Файл для установки переменных окружения, связанных с сервисами мониторинга. |
Переменные окружения устанавливаются в файле .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 | - |
Сервис для мониторинга ELM представлен стеком сервисов с конфигурационными файлами, который можно запустить, используя docker-compose файл. Файлы системы мониторинга в этом архиве находятся в директории elm-monitoring-data-1.4 и имеют следующую структуру:
. ├── docker-compose.yml ├── .env ├── grafana │ └── provisioning │ ├── alerting │ │ ├── alert_notification.yml │ │ ├── alert_policies.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 |
Для запуска системы мониторинга Offline ELM требуется произвести следующие шаги:
1. Перейти в директорию с конфигурационными файлами мониторинга (по умолчанию elm-monitoring-data-1.4).
2. Запустить систему мониторинга Offline ELM командой:
$ docker compose up -d |
3. Убедиться, что все контейнеры Offline ELM успешно запустились, используя команду:
$ docker compose ps |
$ docker compose ps NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS monitoring-Grafana-1 nexus.eltex.loc:4430/Grafana/Grafana:7.3.2 "/run.sh" Grafana 20 seconds ago Up 16 seconds 0.0.0.0:3000->3000/tcp, :::3000->3000/tcp monitoring-influxdb-1 nexus.eltex.loc:4430/library/influxdb:1.8.3 "/entrypoint.sh influxd" influxdb 20 seconds ago Up 16 seconds 8086/tcp monitoring-prometheus-1 nexus.eltex.loc:4430/prom/prometheus:v2.23.0 "/bin/prometheus --config.file=/etc/prometheus/prometheus.yml --storage.tsdb.path=/prometheus --web.console.libraries=/usr/share/prometheus/console_libraries --web.console.templates=/usr/share/prometheus/consoles" prometheus 20 seconds ago Up 17 seconds 0.0.0.0:9090->9090/tcp, :::9090->9090/tcp monitoring-telegraf-1 nexus.eltex.loc:4430/library/telegraf:1.18.1 "/entrypoint.sh telegraf" telegraf 20 seconds ago Up 16 seconds 8092/udp, 8125/udp, 8094/tcp |
Теперь с системой мониторинга Offline ELM можно взаимодействовать через web-интерфейс Grafana. Более подробно работа с интерфейсом мониторинга описана в разделе Web-интерфейс системы мониторинга.
Для остановки системы мониторинга Offline ELM требуется произвести следующие шаги:
1. Перейти в директорию с конфигурационными файлами мониторинга (по умолчанию elm-monitoring-data-1.4).
2. Выполнить команду:
$ docker compose down |
elm@elm-server:/opt/elm/monitoring$ docker compose down [+] Running 4/4 ⠿ Container monitoring-influxdb-1 Removed 2.1s ⠿ Container monitoring-prometheus-1 Removed 1.8s ⠿ Container monitoring-telegraf-1 Removed 1.6s ⠿ Container monitoring-Grafana-1 Removed elm@elm-server:/opt/elm/monitoring$ |
Если сервисы мониторинга не запущены, в частности 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. А именно:
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. Зайдите в web-интерфейс Grafana. Для панелей ELM USB token alert, Web UI Status, Licensing state, Licensing expiry, Certificate state, Certificate expiry выполните следующие действия:
8.1. На панели через меню с 3 вертикальными точками нажмите "Edit".
8.2. Для панелей, отображающих даты, под самой панелью перейдите в раздел "Transform data", в выпадающем меню "Operation", как и для панели состояния нужно выбрать поле, значение "instance" в котором будет соответствовать указанному IP-адресу в файле конфигурации prometheus.yml.
Рисунок 12 — Выбор данных в "Transform data"
8.3. В "Value options" в выпадающем меню "Fields" нужно выбрать актуальное поле, где значение "instance" будет соответствовать указанному IP-адресу в файле конфигурации prometheus.yml.
Рисунок 13 — Выбор источника данных
После запуска системы мониторинга Offline ELM администратору системы мониторинга становится доступен web-интерфейс Grafana по адресу http://<MONITORING_GRAFANA_ADDRESS>:<MONITORING_GRAFANA_PORT>/.
Авторизоваться можно по умолчанию с логином admin и паролем password.
Рисунок 14 — Страница авторизации Grafana
После авторизации в web-интерфейсе Grafana для доступа к данным мониторинга с Offline ELM требуется перейти в раздел "Dashboards".
Для пользователя доступны два дашборда:
elm_alert_metrics — информация о состоянии метрик сервера Offline ELM.
Рисунок 15 — Страница "Dashboards", выбор раздела мониторинга
Панель мониторинга "elm_alert_metrics" отображает информацию о состоянии внутренних метрик Offline ELM, а также web-интерфейса ELM.
Рисунок 16 — Дашборд "elm_alert_metrics"
Наименование дашборда | Наименование в Grafana | Наименование в Grafana | Описание | Наличие алерта |
---|---|---|---|---|
Состояние контейнеров | ||||
Docker container healthcheck state | docker_container_health | container elmi-offline-db healthcheck state code | Состояние контейнера elmi-offline-db | + |
docker_container_health | container elmi-offline-server healthcheck state code | Состояние контейнера elmi-offline-server | ||
Ошибки БД и отказ в обслуживании сервера | ||||
DB errors and denial of service ELM | databaseError | DB errors | Ошибка доступа к БД (Server) | - |
serviceDenial | Device service denial | Отказ в обслуживании (отклонение запросов из-за загруженности сервера) | - | |
Запрос лицензий | ||||
ELM license request | licenseRequest | License request | Запрос файла лицензии от устройства/ПО | - |
licenseRequestFailed | License request errors | Ошибка получения файла персональной лицензии устройством | - | |
Ошибки аутентификации и обращения от неподдерживаемых устройств | ||||
Authentication errors ELM | authFailed | Auth failed request | Ошибка аутентификации от устройства или ПО | - |
unsupportedAuthRequest | Unsupported auth request | Запрос аутентификации от устройств или ПО, которое не поддерживается лицензией | - | |
Ошибки доступа к USB-токену | ||||
ELM Token access errors | tokenAccessError | Token access errors | Ошибки доступности USB-токена | + |
Блокировка IP-адреса системой безопасности | ||||
ELM Block IP addresses | blockIp | IP block | Автоматическая блокировка IP-адреса | - |
Запрет доступа по IP | ||||
ELM Access denied by IP addresses | ipAccessDenied | IP access denied | Запрет доступа по IP | - |
Состояние токена | ||||
ELM USB token Status | tokenState | Token state | Состояние доступности USB-токена | - |
Состояния лицензии | ||||
Certificate state | certificateState | Certificate state | Состояние срока действия сертификата.
| |
Certificate expiry date | certificateExpiry | Certificate expiry date | Дата окончания срока действия сертификата | - |
Licensing state | licensingState | Licensing state | Состояние срока действия лицензии.
| + |
Licensing expiry date | licensingExpiry | Licensing expiry | Дата окончания срока действия лицензии | - |
Наименование дашборда | Наименование в Grafana | Описание | Наличие алерта |
---|---|---|---|
ELM active WEB connections | active | Текущее число активных клиентских соединений, включая Waiting-соединения | - |
reading | Текущее число соединений, в которых nginx в настоящий момент читает заголовок запроса | ||
waiting | Текущее число бездействующих клиентских соединений в ожидании запроса | ||
writing | Текущее число соединений, в которых nginx в настоящий момент отвечает клиенту | ||
ELM processed WEB connections | handled | Суммарное число обработанных соединений. Как правило, значение этого параметра такое же, как accepted, если не достигнуто какое-нибудь системное ограничение | - |
accepted free | Суммарное число принятых клиентских соединений | ||
total requests | Суммарное число клиентских запросов | ||
Web UI Status | nginx_up | Текущее состояние web-сервера | - |
Панель мониторинга "elm_monitor" предоставляет администратору Offline ELM общую информацию о хосте, в котором запущен Offline ELM, а также информацию о Docker-контейнерах Offline ELM.
Рисунок 17 — Панель мониторинга "elm_monitor"
На данной панели мониторинга представлена следующая информация:
На панели мониторинга "elm_alert_metrics" представлен список алертов:
Рисунок 18 — Панель алертов
Оповещение пользователя осуществляется с помощью механизма оповещений сервиса Grafana на основе событий (алертов) системных метрик и метрик, передаваемых ELM.
По умолчанию доступны следующие типы оповещений:
Оповещения предусмотрены для следующих алертов:
Docker container healthcheck state (состояние Docker контейнеров Offline ELM);
Оповещения приходят в двух случаях:
Настройка параметров оповещений может осуществляться через интерфейс Grafana в разделе "Alerting" → "Notification policies".
Либо через указание переменных окружения в файле .env перед запуском сервиса мониторинга.
Доступные переменные окружения:
Название переменной | Описание |
---|---|
NOTIFICATION_EMAIL_ADDRESSES | перечень адресов для рассылки e-mail оповещений, разделенных символом ';' |
NOTIFICATION_TELEGRAM_BOT_TOKEN | токен для доступа к Telegram-боту для рассылки оповещений можно получить, создав бота с помощью запроса к Telegram-боту @BotFather |
NOTIFICATION_TELEGRAM_USER_ID | идентификатор пользователя для оповещения можно получить с помощью запроса к Telegram-боту @userinfobot |
При настройке оповещений с помощью 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-соединения |
Для проверки правильности настройки оповещений Grafana предоставляет возможность отправки тестовых оповещений. Для это необходимо перейти в раздел "Alerting" → "Contanct points". У Contact point с названием "Email and telegram notification" нажать кнопку "View" (рисунок 19). Далее можно будет отправить тестовое оповещение в Telegram или на почту (рисунок 20).
Рисунок 19 — Раздел "Alerting" → "Contact points"
Рисунок 20 — Окно просмотра contact point
Функционал Offline ELM предполагает использование резервирования, т. е. применение двух серверов одновременно. Можно настроить мониторинг таким образом, чтобы получать всю необходимую информацию в одном месте об обоих серверах Offline ELM.
На ноде2 в папке с конфигурационными файлами (elm-offline-data) выполнить следующие действия:
1. Настроить переменные окружения в файле .env (elm-offline-data/.env) на стороне сервера Offline ELM. А именно:
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. В elm-monitoring-data/.env файле установить переменную MONITORING_INFLUXDB_ADDRESS, которая указывает, на каком адресе будет доступен сервис InfluxDB.
4. Для сбора метрик с двух нод необходимо в конфигурационном файле Prometheus указать адрес ноды2. В файле elm-monitoring-data/prometheus/prometheus.yml в разделе"static_configs" добавить еще один "targets", указав адрес и порт ноды2 Offline ELM.
static_configs: - targets: ['192.168.1.1:8097'] labels: host: elmi-offline-server-node1 - targets: ['192.168.2.1:8097'] labels: host: elmi-offline-server-node2 |
5. В конфигурационном файле prometheus.yml (elm-monitoring-data/prometheus/prometheus.yml) изменить при необходимости данные логина и пароля пользователя для подключения к актуатору сервера Offline ELM, если для него в .env файле были указаны иные значения (MONITORING_SERVER_USERNAME и MONITORING_SERVER_PASSWORD).
basic_auth: username: 'user1' password: 'password1' |
6. Необходимо перезапустить сервер Offline ELM и сервисы мониторинга.
$ docker compose down $ docker compose up -d |
Изменения конфигурации, внесенные в Grafana, переключения между графиками разных нод могут применяться не сразу, а через определенный промежуток времени. Иногда этот интервал может достигать пяти минут. |
Переключение между панелями двух нод выполняется с выбором соответствующей ноды в списке "Host".
Рисунок 21 — Выбор ноды
При переключении между нодами панели автоматически выбираются и переключаются на данные выбранной ноды. Однако следующие панели настроены только для node1:
Web UI Status
ELM USB token Status
Certificate state
Licensing state
Certificate expiry date
Licensing expiry date
Для отображения данных node2 необходимо вручную создать для них панели. Выполните следующие шаги:
1. Cоздайте дубликат панели state. Для этого наведите на панель, с которой будете делать копию, нажмите на три появляющиеся вертикальные точки и в меню "More" выберите "Dublicate" (рисунок 22).
Рисунок 22 — Создание дубликата
2. На панели-дубликате через то же меню с 3 вертикальными точками нажмите "Edit" и выполните следующие настройки (для лучшего понимания в скобках указаны обозначения параметров на рисунке 23):
Рисунок 23 — Выбор источника данных
2.1. Поменяйте заголовок панели (Title) чтобы их отличать, например, "Certificate state node2" (1), при необходимости также поменяйте заголовок и для панели, с которой сделали копию.
2.2. В поле "Metrics browser" замените значение в кавычках с node1 на node2 (2).
2.3. Далее нажмите на "Run queries" (3), таким образом проверив, что данные указаны верно, и обновив информацию.
2.4. В "Value options" в выпадающем меню "Fields" нужно выбрать актуальное поле с "instanceID=node2" (4).
3. Нажмите сначала кнопку "Save", а затем синюю кнопку "Apply" в правом верхнем углу, на панели должно отобразиться текущее актуальное состояние метрики.
Для панелей, содержащих срок действия ("Certificate expiry date" и "Licensing expiry date"), настройка немного отличается. Для лучшего понимания в скобках указаны обозначения параметров на рисунке 24.
3.1. Создайте дубликат панели, для этого наведите на панель, с которой будете делать копию, нажмите на три вертикальные точки и в меню "More" выберите "Dublicate".
3.2. На панели-дубликате через то же меню с 3 вертикальными точками нажмите "Edit".
3.3. Поменяйте заголовок панели (Title) чтобы их отличать, например, "Licensing expiry date node2" (1), при необходимости также поменяйте заголовок и для панели, с которой сделали копию.
3.4. В поле "Metrics browser" замените значение в кавычках с node1 на node2 (2).
Рисунок 24 — Изменение значения InstanceID
4. Под самой панелью перейдите в раздел "Transform data". В выпадающем меню "Operation", как и для панели состояния нужно выбрать актуальную метрику с "InstanceID=node2" (рисунок 25).
Рисунок 25 — Выбор метрики на вкладке "Transform data"
5. В "Value options" в выпадающем меню "Fields" нужно выбрать актуальное поле с "instanceID=node2", при выборе которого показывается корректная дата (не 1970 год).
Рисунок 26 — Выбор источника данных
6. После этого нажмите "Save", а затем синюю кнопку "Apply" в правом верхнем углу, на панели должен отобразиться срок.
По умолчанию оповещение добавлено для node1, но при добавлении еще одного узла, например node2, для него необходимо добавить оповещение:
1. Для этого в Grafana зайдите в раздел "Alerting" →"Alert rules" и сделайте копию c существующего алерта, как показано на скриншоте:
Рисунок 27 — Создание дубликата алерта
2. Измените наименование оповещения в разделе "1. Enter alert rule name", для того чтобы их можно было различать, например, Docker container healthcheck state node2.
3. Далее в разделе "2. Define query and alert condition" нужно для каждого запроса отредактировать параметр host, т. е. вместо node1 указать node2.
Рисунок 28 — Настройка фильтра данных для алерта
4. После этого в правом верхнем углу нажмите подсвеченную синим цветом кнопку "Save rule and exit". Если сохранить не удается, то место с ошибкой будет подсвечено, нужно заполнить его, обычно в разделе "3. Set evaluation behavior" нужно указать "Evaluation group", см. пункт 3 в предыдущем разделе "Добавление оповещения в Grafana".
Рисунок 29 — Создание "Evaluation group" для алерта
5. Вернитесь в раздел "Alert rules". Нажмите кнопку "Export rules", далее "Download" и сохраните алерты в файл. Файл можно назвать как и текущий файл alert_rules.yml и далее заменить им файл в директории Grafana/provisioning/alertig, перезагрузить мониторинг.
Рисунок 30 — Экспорт правил алерта
Для информирования о необходимости продления лицензии существует алерт "License renewal alert" группа "license_notify". Когда создается отдельное оповещения для node2 необходимо в разделе "4. Configure labels and notifications" удостовериться, что установлена метка "alert_label=license_notify", для того чтобы оповещения приходили раз в неделю, а не как для остальных оповещений раз в 4 часа.
Рисунок 31 — Установка метки для алерта "License renewal alert"