Дерево страниц
Перейти к концу метаданных
Переход к началу метаданных


Архитектура


Сервис предназначен для мониторинга состояния модулей проекта SoftWLC, проверки связности между компонентами системы и доступности баз данных, оповещениях о нештатных ситуациях.

Состоит из нескольких компонентов:

  • сервер Prometheus, служит для сбора  и хранения метрик.
  • Grafana - визуализирует полученные метрики и представляет удобный дашборд для метрик.
  • Alertmanager - менеджер уведомлений, служит  для отправки алертов.
  • Core-checker - сервис для сбора метрик, предоставляет API c метриками состояния модулей SoftWLC.


Модуль Eltex-core-checker устанавливается непосредственно на сервер, где установлены модули SoftWLC. Если архитектура SoftWLC подразумевает многохостовую систему, то пакет core-checker должен быть установлен на каждом сервере.

Интерфейс Grafana с настроенными дашбордами  доступен по адресу:

<<ip_address>>:3000/

Интерфейс Prometheus доступен  по адресу:

<<ip_address>>:9090/

API core-checker:

<<ip_address>>:8000/metrics




Внешний вид



На главном дашборде сервиса мониторинга отображается состояние каждого  модуля проекта SoftWLC.  При нормальной работе, панели состояний отображаются зеленым цветом, как только сервис становится недоступен, панель окрашивается красным цветом.

По нажатию на панель, подсвеченная красным цветом, можно перейти на страницу модуля.

В правом верхнем углу доступны ярлыки с названием модулей. По клику на ярлык, можно перейти в дашборд, где доступна различная информация отслеживаемого модуля: Uptime модуля, максимальное и текущее   количество файловых дескрипторов pid, время ответа сервиса, время ответа бд, количество выделенной виртуальной памяти, количество зарезервированной памяти. Для компонента radius так же доступна информация о количестве успешной и неуспешной авторизации enterprise пользователей.(Показывает значение с момента запуска 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


Пример вывода:

  • EMS
    Проверка сервиса СУ ems.
    -  Локальная проверка работоспособности northbound, запросом GetVersion;
    - Проверка доступности базы данных "eltex-ems" mysql;
    - Проверка связности с radius сервером по порту 22;
    - Проверка доступности API сервиса PCRF.
  • NBI
    Проверка  сервиса NBI.
    - Локальная проверка работоспособности NBI, запросом GetVersion;
    - Проверка доступности EMS;
    - Проверка доступности по порту и адресу сервиса auth-service;
    - Проверка доступности API сервиса PCRF;
    - Проверка доступности базы данных mysql и mongo.
  • Captive Portal
    Проверка сервиса portal.
    - Проверка работоспособности портала, путем запроса на главную страницу;
    - Проверка связности по порту сервиса mercury;
    - Проверка доступности базы данных "eltex-portal".
  • Portal Constructor
    Проверка сервиса конструктора портала.
    - Проверка работоспособности конструктора портала;
    - Проверка доступности базы данных "eltex-portal";
    - Проверка доступности сервиза авторизации auth-service
  • Wi-Fi cab
    Проверка личного кабинета.
    - Проверка работоспособности личного кабинета;
    - Проверка доступа до сервиса NBI, запросом GetVersion;
    - Проверка доступности базы данных mongo.
  • APB
    Проверка работоспособности сервиса apb.
    - Проверка работоспособности сервиса apb по протоколу websocket;
    - Проверка доступности по порту сервиса mercury.
  • PCRF
    Проверка сервиса PCRF.
    - Проверка сервиса PCRF, запросом в API;
    - Проверка доступности базы данных mysql и mongo;
    - Проверка доступности сервиса NBI.
  • RADIUS
    Проверка сервиса авторизации radius.
    - Проверка сервиса radius, путем авторизации на сервисе.
  • NGW
    Проверка сервиса отправки сообщений ngw.
    - Проверка доступности внешнего email сервиса;
    - Проверка доступности внешнего смс шлюза по smpp.
  • AUTH-SERVICE
    Проверка сервиса авторизации b2b клиентов.
    - Проверка доступности сервиса, путем авторизации на сервисе.
  • MERCURY
    Проверка доступности сервиса mercury.
    - Проверка работоспособности сервиса mercury, путем запроса GetVersion по grpc;
    - Проверка доступности базы данных.
  • BOB
    Проверка работоспособности сервиса.
    - Проверка работоспособности сервиса bob, запросом GetVersion;
    - Проверка доступности базы данных mysql.
  • DOORS
    Проверка сервиса doors.
    - Проверка работоспособности сервиса, авторизацией на сервисе;
    - Проверка доступности базы данных "eltex-doors".
  • MAC-CHECKER
    Проверка сервиса mac-checker.
    - Проверка работоспособности сервиса mac-checker;
    - Проверка доступности сервиса ems.
  • DISCONNECT-SERVICE
    Проверка сервиса disconnect.
    - Проверка работоспособности сервиса disconnect, запросом на сервис;
    - Проверка доступности api сервиса pcrf.


Настройка

Конфигурационный файл сервиса 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'                           адрес электронной почты





Установка

  • Установка модуля мониторинга eltex-core-checher осуществляется пакетным менеджером и выполняется на сервере с установленными пакетами SoftWLC.

Пример установки:

root@ubuntu:/srv/docker/monitoring# dpkg -i eltex-core-checker.deb


  • Установка и настройка сервиса сбора метрик Prometheus, менеджера отправки уведомлений, а также сервиса визуалиции данных метрик Grafana осуществляется с помощью docker.

На сервере создать два каталога, один непосредственно для проекта мониторинга, второй для конфигурационных файлов.

root@ubuntu:/srv# mkdir -p docker/monitoring/conf
  • Для дальнейшей работы требуется установленный docker-compose. Его можно установить по инструкции https://docs.docker.com/compose/install/
  • В  каталоге monitoring создать файл docker-compose.yml с набором инструкций для docker-compose, в котором нужно прописать  необходимые сервисы, а так же их конфигурацию. Так как для хранения данных Prometheus и Grafana используют собственные базы данных, то нужно также создать персистентное хранилище, которое позволяет сохранять все свои предыдущие состояния бд. Ниже приведен готовый docker-compose.yml:
docker-compose.yml
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:

prometheus.yml
 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'


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'
#    webhook_configs:
#    - send_resolved: True
#      http_config:
#        proxy_url: http://172.17.0.1:8118
#      url: 'http://172.17.0.1/alert/-000000000'


alert.rules
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

Настройка docker-compose на автостарт при загрузке системы

Создайте файл 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 на остальные сервера (для могохостовой системы)

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












  • Нет меток