АрхитектураСервис предназначен для мониторинга состояния модулей проекта SoftWLC, проверки связности между компонентами системы и доступности баз данных, оповещениях о нештатных ситуациях. Состоит из нескольких компонентов:
Модуль Eltex-core-checker устанавливается непосредственно на сервер, где установлены модули SoftWLC. Если архитектура SoftWLC подразумевает многохостовую систему, то пакет core-checker должен быть установлен на каждом сервере. Интерфейс Grafana с настроенными дашбордами доступен по адресу:
Интерфейс Prometheus доступен по адресу:
API core-checker:
|
|
Результат выполнения проверки с различными типами метрик, доступен в API, пример метрики gauge(значение может как увеличиваться, так и уменьшаться):
# HELP monitor_apb_mercury_request request_duration_seconds # TYPE monitor_apb_mercury_request gauge monitor_apb_mercury_request 0.007621049880981445 |
Пример метрики counter(увеличивается только в положительную сторону):
# HELP counter_positive_auth_radius_total positive counter authorization on radius # TYPE counter_positive_auth_radius_total counter counter_positive_auth_radius_total 7.0 |
Пример метрики, где всего два состояния(true и false):
# HELP apb_state service status
# TYPE apb_state gauge
apb_state{apb_state="true"} 1.0
apb_state{apb_state="false"} 0.0 |
Пример вывода:
Конфигурационный файл сервиса core-checker находится по пути /etc/eltex-core-checker/application.conf
1) Для проверки работы сервиса eltex-radius необходимо создать enterprise пользователя с логином "tester", паролем "tester " и выбрать домен root в личном кабинете в разделе пользователи WI-FI.
2) Для работы скрипта проверки авторизации личного кабинета и конструктора портала(AUTH_SERVICE, Portal-Constructor, WIFI_CAB) в личном кабинете нужно создать системного пользователя "tester" и паролем "tester" в разделе настройки > "Системные пользователи".
[MONITORING] wait = 5 время опроса сервиса, в секундах exclude_checkers = disconnect, apb список сервисов, которые не нужно мониторить. Перечислить через запятую log = error уровень логирования [APB] apb_dir = /etc/eltex-apb/apb.properties конфигурационный файл apb_address = 127.0.0.1 ip адрес apb_port = 8090 порт [EMS] ems_address = 127.0.0.1 ems_port = 8080 ems_dir = /usr/lib/eltex-ems/conf/config.txt [PORTAL] portal_address = 127.0.0.1 portal_dir = /etc/eltex-portal/application.conf portal_ssid = SSID_name Название SSID portal_ap_domain = root домен ТД portal_cp_domain = root домен портала portal_cp_name = default Название Портала portal_mac_client = aa:bb:cc:00:11:22 [PCRF] pcrf_address = 127.0.0.1 pcrf_dir = /etc/eltex-pcrf/eltex-pcrf.json pcrf_user = javauser pcrf_password = javapassword mysql_port = 3306 [MERCURY] mercury_address = 127.0.0.1 mercury_port = 6565 mercury_dir = /etc/eltex-mercury/application.conf [RADIUS] radius_address = 127.0.0.1 radius_secret = testing123 secret radius_user = tester логин, для проверки enterprise авторизации radius_password = tester пароль, для проверки enterprise авторизации radius_domain = root radius_pattern_pos = Login OK шаблон, по которому определяется успешная авторизация radius_pattern_neg = Login incorrect шаблон, по которому определяется неуспешная авторизация radius_pattern_exclude = Login OK: [tester/tester] [AUTH_SERVICE] auth_service_address = 127.0.0.1 auth_service_port = 21812 auth_service_secret = eltex auth_service_user = tester auth_service_password = tester [BOB] bob_address = 127.0.0.1 bob_port = 9190 bob_dir = /etc/eltex-bob/application.properties [Portal-Constructor] cp_dir = /etc/eltex-portal-constructor/application.conf cp_user = tester cp_password = tester cp_secret = eltex cp_auth_port = 21812 [NGW] ngw_dir = /etc/eltex-ngw/notification.properties ngw_smpp = /etc/eltex-ngw/smpp_gate.conf [NBI] nbi_addr = localhost nbi_dir = /etc/eltex-radius-nbi/radius_nbi_config.txt nbi_username = softwlc_service nbi_password = softwlc [MAC_CHECKER] mc_addr = localhost mc_dir = /etc/eltex-ott-mac-checker/application.conf [WIFI_CAB] lk_dir = /etc/eltex-wifi-cab/system.xml lk_secret = eltex lk_user = tester lk_password = tester [DOORS] doors_address = localhost doors_dir = /etc/eltex-doors/application.properties [DISCONNECT] disconnect_address = localhost disconnect_address_doors = localhost disconnect_user = user disconnect_password = password disconnect_dir = /etc/eltex-disconnect-service/application.conf |
Оригинал
https://www.shellhacks.com/ru/prometheus-node-exporter-install-config-ubuntu-centos/
Настройка уведомлений по электронной почте осуществляется в конфигурационном файле alert_config.yml менеджера уведомлений
global: блок настройки доступа к электронной почте
smtp_smarthost: 'smtp.yandex.ru:25'
smtp_from: 'user@yandex.ru' учетная запись отправителя
smtp_auth_username: 'user@yandex.ru' учетная запись отправителя
smtp_auth_password: 'password' пароль от уз
resolve_timeout: 10s
route:
receiver: 'abon'
group_interval: 10s
receivers: блок настройки отвечающий кому будет приходить уведомления
- name: 'abon'
email_configs:
- send_resolved: True
to: 'user_all@yandex.ru' адрес электронной почты |
Пример установки:
root@ubuntu:/srv/docker/monitoring# dpkg -i eltex-core-checker.deb |
На сервере создать два каталога, один непосредственно для проекта мониторинга, второй для конфигурационных файлов.
root@ubuntu:/srv# mkdir -p docker/monitoring/conf |
version: "3"
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
volumes:
- ./conf:/etc/prometheus
- prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--storage.tsdb.retention.time=5d'
ports:
- "9090:9090"
grafana:
image: hub.eltex-co.ru/softwlc/eltex-core-checker:latest
container_name: grafana
depends_on:
- prometheus
ports:
- 3000:3000
links:
- alertmanager:alertmanager
volumes:
- grafana_data:/var/lib/grafana
alertmanager:
image: prom/alertmanager:latest
container_name: alertmanager
volumes:
- ./conf:/etc/alertmanager/
ports:
- 9093:9093
command:
- '--config.file=/etc/alertmanager/alert_config.yml'
- '--storage.path=/alertmanager'
depends_on:
- prometheus
node-exporter:
hostname: monitoring-server
image: prom/node-exporter:v1.3.1
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
command:
- --path.procfs=/host/proc
- --path.sysfs=/host/sys
- --collector.filesystem.ignored-mount-points
- ^/(sys|proc|dev|host|etc|rootfs/var/lib/docker/containers|rootfs/var/lib/docker/overlay2|rootfs/run/docker/netns|rootfs/var/lib/docker/aufs)($$|/)
ports:
- 9101:9100
volumes:
grafana_data:
prometheus_data: |
Далее в каталог conf следует разместить преднастроенные конфигурационные файлы prometheus, а также alertmanager:
scrape_configs:
- job_name: 'core-monitoring'
scrape_interval: 5s
metrics_path: '/metrics'
static_configs:
- targets: ['172.17.0.1:8000']
- job_name: 'monitoring-server'
scrape_interval: 5s
metrics_path: 'metrics'
static_configs:
- targets: ['172.17.0.1:9100']
- job_name: 'alertmanager'
scrape_interval: 5s
metrics_path: '/metrics'
static_configs:
- targets: ['172.17.0.1:9093']
# Alertmanager configuration
alerting:
alertmanagers:
- scheme: http
static_configs:
- targets:
- alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
- 'alert.rules' |
global:
smtp_smarthost: 'smtp.yandex.ru:25'
smtp_from: 'user@yandex.ru'
smtp_auth_username: 'user@yandex.ru'
smtp_auth_password: 'password'
resolve_timeout: 10s
route:
receiver: 'abon'
group_interval: 10s
receivers:
- name: 'abon'
email_configs:
- send_resolved: True
to: 'user_all@yandex.ru'
# webhook_configs:
# - send_resolved: True
# http_config:
# proxy_url: http://172.17.0.1:8118
# url: 'http://172.17.0.1/alert/-000000000' |
groups:
- name: abon
rules:
- alert: ems_state_pcrf
expr: ems_state_pcrf{ems_state_pcrf="false"} > 0
for: 10s
annotations:
summary: "ems_state_pcrf down"
- alert: nbi_state_pcrf
expr: nbi_state_pcrf{nbi_state_pcrf="false"} > 0
for: 10s
annotations:
summary: "nbi_state_pcrf down"
- alert: apb_state_mercury
expr: apb_state_mercury{apb_state_mercury="false"} > 0
for: 10s
annotations:
summary: "apb_state_mercury down"
- alert: ngw_state_mongo
expr: ngw_state_mongo{ngw_state_mongo="false"} > 0
for: 10s
annotations:
summary: "ngw_state_mongo down"
- alert: nbi_state
expr: nbi_state{nbi_state="false"} > 0
for: 10s
annotations:
summary: "nbi_state down"
- alert: nbi_state_ems
expr: nbi_state_ems{nbi_state_ems="false"} > 0
for: 10s
annotations:
summary: "nbi_state_ems down"
- alert: doors_state_mysql
expr: doors_state_mysql{doors_state_mysql="false"} > 0
for: 10s
annotations:
summary: "doors_state_mysql down"
- alert: nbi_state_mysql
expr: nbi_state_mysql{nbi_state_mysql="false"} > 0
for: 10s
annotations:
summary: "nbi_state_mysql down"
- alert: portal_state_mercury
expr: portal_state_mercury{portal_state_mercury="false"} > 0
for: 10s
annotations:
summary: "portal_state_mercury down"
- alert: nbi_state_auth_service
expr: nbi_state_auth_service{nbi_state_auth_service="false"} > 0
for: 10s
annotations:
summary: "nbi_state_auth_service down"
- alert: mac_checker_state
expr: mac_checker_state{mac_checker_state="false"} > 0
for: 10s
annotations:
summary: "mac_checker_state down"
- alert: portal_state
expr: portal_state{portal_state="false"} > 0
for: 10s
annotations:
summary: "portal_state down"
- alert: pcrf_state
expr: pcrf_state{pcrf_state="false"} > 0
for: 10s
annotations:
summary: "pcrf_state down"
- alert: prcf_state_nbi
expr: prcf_state_nbi{prcf_state_nbi="false"} > 0
for: 10s
annotations:
summary: "prcf_state_nbi down"
- alert: nbi_state_mongo
expr: nbi_state_mongo{nbi_state_mongo="false"} > 0
for: 10s
annotations:
summary: "nbi_state_mongo down"
- alert: lk_state_nbi
expr: lk_state_nbi{lk_state_nbi="false"} > 0
for: 10s
annotations:
summary: "lk_state_nbi down"
- alert: lk_state_auth_service
expr: lk_state_auth_service{lk_state_auth_service="false"} > 0
for: 10s
annotations:
summary: "lk_state_auth_service down"
- alert: pcrf_state_mysql
expr: pcrf_state_mysql{pcrf_state_mysql="false"} > 0
for: 10s
annotations:
summary: "pcrf_state_mysql down"
- alert: mercury_state
expr: mercury_state{mercury_state="false"} > 0
for: 10s
annotations:
summary: "mercury_state down"
- alert: portal_state_mysql
expr: portal_state_mysql{portal_state_mysql="false"} > 0
for: 10s
annotations:
summary: "portal_state_mysql down"
- alert: mercury_state_mysql
expr: mercury_state_mysql{mercury_state_mysql="false"} > 0
for: 10s
annotations:
summary: "mercury_state_mysql down"
- alert: apb_state
expr: apb_state{apb_state="false"} > 0
for: 10s
annotations:
summary: "apb down"
- alert: doors_state
expr: doors_state{doors_state="false"} > 0
for: 10s
annotations:
summary: "doors_state down"
- alert: pcrf_state_mongo
expr: pcrf_state_mongo{pcrf_state_mongo="false"} > 0
for: 10s
annotations:
summary: "pcrf_state_mongo down"
- alert: radius_state
expr: radius_state{radius_state="false"} > 0
for: 10s
annotations:
summary: "radius_state down"
- alert: auth_service_state
expr: auth_service_state{auth_service_state="false"} > 0
for: 10s
annotations:
summary: "auth_service_state down"
- alert: disconnect_state
expr: disconnect_state{disconnect_state="false"} > 0
for: 10s
annotations:
summary: "disconnect_state down"
- alert: lk_state_mongo
expr: lk_state_mongo{lk_state_mongo="false"} > 0
for: 10s
annotations:
summary: "lk_state_mongo down"
- alert: bob_state
expr: bob_state{bob_state="false"} > 0
for: 10s
annotations:
summary: "bob_state down"
- alert: disconnect_state_pcrf
expr: disconnect_state_pcrf{disconnect_state_pcrf="false"} > 0
for: 10s
annotations:
summary: "disconnect_state_pcrf down"
- alert: bob_state_mysql
expr: bob_state_mysql{bob_state_mysql="false"} > 0
for: 10s
annotations:
summary: "bob_state_mysql down"
- alert: cp_state_auth_service
expr: cp_state_auth_service{cp_state_auth_service="false"} > 0
for: 10s
annotations:
summary: "cp_state_auth_service down"
- alert: cp_state_mysql
expr: cp_state_mysql{cp_state_mysql="false"} > 0
for: 10s
annotations:
summary: "cp_state_mysql down"
- alert: mac_checker_state_ems
expr: mac_checker_state_ems{mac_checker_state_ems="false"} > 0
for: 10s
annotations:
summary: "mac_checker_state_ems down"
- alert: ngw_state_smpp
expr: ngw_state_smpp{ngw_state_smpp="false"} > 0
for: 10s
annotations:
summary: "ngw_state_smpp down"
- alert: ngw_state_mail
expr: ngw_state_mail{ngw_state_mail="false"} > 0
for: 10s
annotations:
summary: "ngw_state_mail down"
- alert: ems_state
expr: ems_state{ems_state="false"} > 0
for: 10s
annotations:
summary: "ems_state down"
- alert: ems_state_mysql
expr: ems_state_mysql{ems_state_mysql="false"} > 0
for: 10s
annotations:
summary: "ems_state_mysql down" |
Следующий этап, запуск контейнеров, в корневом каталоге проекта выполнить команду:
root@ubuntu:/srv/docker/monitoring# docker-compose up -d |
Далее убедиться в работоспособности сервиса, выполнив:
root@ubuntu:/srv/docker/monitoring# docker-compose ps
Name Command State Ports
--------------------------------------------------------------------------------------------
alertmanager /bin/alertmanager --config ... Up 0.0.0.0:9093->9093/tcp
grafana /run.sh Up 0.0.0.0:3000->3000/tcp
monitoring_node-exporter_1 /bin/node_exporter --path. ... Up 0.0.0.0:9100->9100/tcp
prometheus /bin/prometheus --config.f ... Up 0.0.0.0:9090->9090/tcp |
Создайте файл systemd-сервиса
sudo nano /etc/systemd/system/docker-compose-eltex-softwlc-monitoring.service
[Unit] Description=Docker Compose Eltex SoftWLC Monitoring Requires=docker.service After=docker.service [Service] Type=oneshot RemainAfterExit=yes WorkingDirectory=/srv/docker/monitoring ExecStart=/usr/bin/docker-compose up -d ExecStop=/usr/bin/docker-compose down TimeoutStartSec=0 [Install] WantedBy=multi-user.target |
Перезапустите systemd и настройте docker-compose-eltex-softwlc-monitoring на автостарт при загрузке системы
$ sudo systemctl daemon-reload $ sudo systemctl enable docker-compose-eltex-softwlc-monitoring |
Node Exporter - prometheus client от google, который умеет отдавать метрики произвольного линукс хоста (на котором установлен).
Создайте непривилегированного пользователя node_exporter
$ sudo useradd node_exporter -s /sbin/nologin |
Скачать бинарник https://prometheus.io/download/#node_exporter
wget https://github.com/prometheus/node_exporter/releases/download/v1.0.1/node_exporter-1.0.1.linux-amd64.tar.gz tar xvfz node_exporter-*.*-amd64.tar.gz sudo cp node_exporter-*.*-amd64/node_exporter /usr/sbin/ |
Создайте файл systemd-сервиса
sudo nano /etc/systemd/system/node_exporter.service
[Unit] Description=Node Exporter [Service] User=node_exporter EnvironmentFile=/etc/sysconfig/node_exporter ExecStart=/usr/sbin/node_exporter $OPTIONS [Install] WantedBy=multi-user.target |
Создайте sysconfig файл
Используйте этот файл, чтобы прописать опции передаваемые сервису, например
sudo mkdir -p /etc/sysconfig sudo touch /etc/sysconfig/node_exporter sudo vim /etc/sysconfig/node_exporter OPTIONS="--collector.textfile.directory /var/lib/node_exporter/textfile_collector" |
Перезапустите systemd и настройте node_exporter на автостарт при загрузке системы
$ sudo systemctl daemon-reload $ sudo systemctl enable node_exporter |
Запустите сервис node_exporter
$ sudo systemctl start node_exporter |
После установки Node Exporter, проверьте что метрики экспортируются:
$ curl http://localhost:9100/metrics |
Добавляем новый сервер для мониторинга в конфиг prometheus.yml
Адреса получения метрик прописываются в поле targets
- job_name: 'monitoring-server'
scrape_interval: 5s
metrics_path: 'metrics'
static_configs:
- targets: ['172.17.0.1:9100', '100.110.0.184:9100', '100.110.0.185:9100'] |
В Grafana ищите раздел OS
