Метрики сервиса eltex-radius в формате Prometheus можно получить с помощью специальной утилиты eltex-radius-exporter. Утилита запускается в контейнере. Для возможности получения информации о состоянии потребуется предварительная настройка eltex-radius. Для каждого экземпляра eltex-radius требуется запустить отдельный экземпляр eltex-radius-exporter. Сервис eltex-radius при этом может работать в приложении или контейнере.
Утилита eltex-radius-exporter выполняет radius-запрос типа "Status-Server" к eltex-radius в ответ на который получает ответ "Access-Accept", который содержит метрики в виде AVP. Полученные данные eltex-radius-exporter преобразует и отдает в формате Prometheus.
Функционал появился в версии SoftWLC 1.24.
По умолчанию в eltex-radius не отдает информацию о метриках - потребуется выполнить дополнительную настройку. За это отвечают переменные:
| Переменная | Назначение |
|---|---|
| RADIUS_STATUS_HOST | IP-адрес, на котором eltex-radius слушает обращения eltex-radius-exporter |
| RADIUS_STATUS_PORT | Порт, на котором eltex-radius слушает обращения eltex-radius-exporter |
| RADIUS_STATUS_CLIENT_HOST | IP-адрес, eltex-radius-exporter выполняет обращения к eltex-radius (обращения с других адресов игнорируются) |
| RADIUS_STATUS_CLIENT_SECRET | Secret, используемый eltex-radius-exporter при обращении к eltex-radius |
Запуск eltex-radius-exporter возможен как на одном хосте с eltex-radius, так и разных.
Переменные eltex-radius-exporter:
| Переменная | Назначение |
|---|---|
| RADIUS_ADDRESS | IP-адрес:порт на который выполняется запрос к eltex-radius |
| RADIUS_SECRET | Secret, используемый при запросе к eltex-radius (должен совпадать со значением переменной RADIUS_STATUS_CLIENT_SECRET eltex-radius) |
| RADIUS_TIMEOUT | Таймаут ожидания ответа от eltex-radius (мс) |
Запуск eltex-radius-exporter выполняется в контейнере, все параметры конфигурации задаются в файле "docker-compose.yml":
version: '3'
services:
eltex-radius-exporter:
container_name: eltex-radius-exporter
image: hub.eltex-co.ru/softwlc/eltex-radius-exporter:<SoftWLC version>-<tag>
ports:
- "9812:9812/tcp"
environment:
- RADIUS_ADDRESS=eltex-radius:18123
- RADIUS_SECRET=eltex
- RADIUS_TIMEOUT=1000
- TZ=Asia/Novosibirsk |
В случае запуска eltex-radius и eltex-radius-exporter на одном хосте рекомендуется использовать один файл конфигурации "docker-compose.yml".
Особенностями конфигурации в этом случае является использование режима "network_mode: host", что бы была возможность реализовать взаимодействие через адрес 127.0.0.1 (localhost).
Добавить конфигурацию eltex-radius-exporter в файл "docker-compose.yml":
version: '3'
services:
eltex-radius:
container_name: eltex-radius
network_mode: host
image: hub.eltex-co.ru/softwlc/eltex-radius:<SoftWLC version>-<tag>
env_file: eltex-radius.env
volumes:
# Eltex OUI list
- /usr/share/oui-base/oui-freeradius.txt:/usr/share/oui-base/oui-freeradius.txt:ro
# Eltex-Radius-NBI certificates
- ./eltex-radius/certs/ca/wireless-ca.crt:/etc/eltex-radius/certs/ca/default.pem:ro
- ./eltex-radius/certs/server.crt:/etc/eltex-radius/certs/server.crt:ro
- ./eltex-radius/certs/server.key:/etc/eltex-radius/certs/server.key:ro
eltex-radius-exporter:
container_name: eltex-radius-exporter
image: hub.eltex-co.ru/softwlc/eltex-radius-exporter:<SoftWLC version>-<tag>
network_mode: host
environment:
- RADIUS_ADDRESS=127.0.0.1:18123
- RADIUS_SECRET=eltex
- RADIUS_TIMEOUT=1000
- TZ=Asia/Novosibirsk |
Проконтролировать, что в файле переменных окружения "eltex-radius" "eltex-radius.env" указаны дефолтные значения для секции "Status-Server settings":
# ! Настройки приложения ! # # Ports on which server will listen RADIUS_AUTH_PORT=1812 RADIUS_ACCT_PORT=1813 RADIUS_INNER_TUNNEL_PORT=18121 # MySQL database RADIUS_DB_HOST=localhost RADIUS_DB_PORT=3306 RADIUS_DB_LOGIN=radius RADIUS_DB_PASSWORD=radpass RADIUS_DB_NAME=radius # PCRF # If you setting RADIUS_PCRF_ENABLED=0, then you also should enable accounting port listening in "default" server RADIUS_PCRF_HOST=127.0.0.1 RADIUS_PCRF_PORT=7080 RADIUS_PCRF_ENABLED=1 # EAP RADIUS_CA_CERT_NAME=default.pem RADIUS_TLS_KEY_PASSWORD=eltex # Proxying RADIUS_PROXY_AUTH=0 RADIUS_PROXY_DOMAIN_REGEX=^(.+\.)?enterprise\.root$ RADIUS_PROXY_HOST=127.0.0.1 RADIUS_PROXY_PORT=18121 RADIUS_PROXY_SECRET=eltex # Ubiquity vendor detection RADIUS_UBI_VENDOR_REGEX=Apple|Ubiquiti RADIUS_VENDOR_GROUP_ENABLED=1 # Settings of runtime NAS discovery RADIUS_DYNAMIC_CLIENTS=false RADIUS_DYNAMIC_CLIENT_SUBNET=192.168.0.0/16 RADIUS_DYNAMIC_CLIENT_LIFETIME=3600 RADIUS_DYNAMIC_CLIENT_RATE_LIMIT=false # Proxy SSID RADIUS_PROXY_SSID_ENABLED=0 RADIUS_PROXY_SSID_VALUE=EAP_TLS RADIUS_PROXY_SSID_HOST=127.0.0.1 RADIUS_PROXY_SSID_PORT=18122 RADIUS_PROXY_SSID_SECRET=eltex # Status-Server settings RADIUS_STATUS_HOST=127.0.0.1 RADIUS_STATUS_PORT=18123 RADIUS_STATUS_CLIENT_HOST=127.0.0.1 RADIUS_STATUS_CLIENT_SECRET=eltex #TIMEZONE TZ=Asia/Novosibirsk |
Выполнить запуск контейнера:
sudo docker-compose up -d |
Если контейнеры eltex-radius и eltex-radius-exporter работаю на разных хостах - в их настройках надо будет указать реальные адреса для получения информации.
На хосте, где запущен "eltex-radius" в файле настроек переменных окружения "eltex-radius.env" указать значения переменных в секции "Status-Server settings":
# ! Настройки приложения ! # # Ports on which server will listen RADIUS_AUTH_PORT=1812 RADIUS_ACCT_PORT=1813 RADIUS_INNER_TUNNEL_PORT=18121 # MySQL database RADIUS_DB_HOST=localhost RADIUS_DB_PORT=3306 RADIUS_DB_LOGIN=radius RADIUS_DB_PASSWORD=radpass RADIUS_DB_NAME=radius # PCRF # If you setting RADIUS_PCRF_ENABLED=0, then you also should enable accounting port listening in "default" server RADIUS_PCRF_HOST=127.0.0.1 RADIUS_PCRF_PORT=7080 RADIUS_PCRF_ENABLED=1 # EAP RADIUS_CA_CERT_NAME=default.pem RADIUS_TLS_KEY_PASSWORD=eltex # Proxying RADIUS_PROXY_AUTH=0 RADIUS_PROXY_DOMAIN_REGEX=^(.+\.)?enterprise\.root$ RADIUS_PROXY_HOST=127.0.0.1 RADIUS_PROXY_PORT=18121 RADIUS_PROXY_SECRET=eltex # Ubiquity vendor detection RADIUS_UBI_VENDOR_REGEX=Apple|Ubiquiti RADIUS_VENDOR_GROUP_ENABLED=1 # Settings of runtime NAS discovery RADIUS_DYNAMIC_CLIENTS=false RADIUS_DYNAMIC_CLIENT_SUBNET=192.168.0.0/16 RADIUS_DYNAMIC_CLIENT_LIFETIME=3600 RADIUS_DYNAMIC_CLIENT_RATE_LIMIT=false # Proxy SSID RADIUS_PROXY_SSID_ENABLED=0 RADIUS_PROXY_SSID_VALUE=EAP_TLS RADIUS_PROXY_SSID_HOST=127.0.0.1 RADIUS_PROXY_SSID_PORT=18122 RADIUS_PROXY_SSID_SECRET=eltex # Status-Server settings RADIUS_STATUS_HOST=<IP-адрес, на котором ожидаются запросы от eltex-radius-exporter> RADIUS_STATUS_PORT=18123 RADIUS_STATUS_CLIENT_HOST=<IP-адрес, с которого ожидаются запросы от eltex-radius-exporter> RADIUS_STATUS_CLIENT_SECRET=eltex #TIMEZONE TZ=Asia/Novosibirsk |
Перезапустить сервис:
sudo docker-compose up -d |
На хосте, где выполняется запуск "eltex-radius-exporter" в файле конфигурации "docker-compose.yml" настроить:
version: '3'
services:
eltex-radius-exporter:
container_name: eltex-radius-exporter
image: hub.eltex-co.ru/softwlc/eltex-radius-exporter:<SoftWLC version>-<tag>
ports:
- "9812:9812/tcp"
environment:
- RADIUS_ADDRESS=<IP-адрес eltex-radius>:18123
- RADIUS_SECRET=eltex
- RADIUS_TIMEOUT=1000
- TZ=Asia/Novosibirsk |
Запустить контейнер:
sudo docker-compose up -d |
"Eltex-radius-exporter" может быть запущен на любом хосте, в т.ч. и на одном хосте с сервисом "eltex-radius". При запуске на одном хосте в конфигурации потребуется использование режима "network_mode: host" для контейнера, что бы была возможность реализовать взаимодействие через адрес 127.0.0.1 (localhost).
Проконтролировать, что в файле конфигурации "eltex-radius" "/etc/eltex-radius/local.conf" указаны дефолтные значения в разделе "Status-Server settings":
# Ports on which the server will listen auth_port=1812 #acct_port=1813 inner_tunnel_port=18121 # MySQL database db_host="localhost" db_port=3306 db_login="radius" db_password="radpass" db_name="radius" # PCRF # If you setting pcrf_enabled=0, then you also should enable accounting port listening in "default" server pcrf_host="127.0.0.1" pcrf_port=7080 pcrf_enabled=1 # EAP ca_cert_name="local.pem" tls_key_password="1234" # Proxying proxy_auth=0 proxy_domain_regex="^(.+\.)?enterprise\.root$" proxy_host="127.0.0.1" proxy_port=18121 proxy_secret="eltex" # Ubiquity vendor detection ubi_vendor_regex="Apple|Ubiquiti" vendor_group_enabled=1 # Settings of runtime NAS discovery dynamic_clients=false dynamic_client_subnet=192.168.0.0/16 dynamic_client_lifetime=3600 dynamic_client_rate_limit=false # Proxy SSID (for example to eltex-eap-tls) #139679 proxy_ssid_enabled=0 proxy_ssid_value="EAP_TLS" proxy_ssid_host="127.0.0.1" proxy_ssid_port=18122 proxy_ssid_secret="eltex" # Status-Server settings status_host="127.0.0.1" status_port=18123 status_client_host="127.0.0.1" status_client_secret="eltex" #TIMEZONE TZ=Asia/Novosibirsk |
При необходимости исправить их и выполнить перезапуск "eltex-radius":
sudo systemctl restart eltex-radius |
Сконфигурировать файл docker-compose.yml для запуска eltex-radius-exporter:
version: '3'
services:
eltex-radius-exporter:
container_name: eltex-radius-exporter
image: hub.eltex-co.ru/softwlc/eltex-radius-exporter:<SoftWLC version>-<tag>
network_mode: host
environment:
- RADIUS_ADDRESS=127.0.0.1:18123
- RADIUS_SECRET=eltex
- RADIUS_TIMEOUT=1000
- TZ=Asia/Novosibirsk |
Запустить контейнер:
sudo docker-compose up -d |
Указать в файле конфигурации "eltex-radius" "/etc/eltex-radius/local.conf" настройки в разделе "Status-Server settings":
# Ports on which the server will listen auth_port=1812 #acct_port=1813 inner_tunnel_port=18121 # MySQL database db_host="localhost" db_port=3306 db_login="radius" db_password="radpass" db_name="radius" # PCRF # If you setting pcrf_enabled=0, then you also should enable accounting port listening in "default" server pcrf_host="127.0.0.1" pcrf_port=7080 pcrf_enabled=1 # EAP ca_cert_name="local.pem" tls_key_password="1234" # Proxying proxy_auth=0 proxy_domain_regex="^(.+\.)?enterprise\.root$" proxy_host="127.0.0.1" proxy_port=18121 proxy_secret="eltex" # Ubiquity vendor detection ubi_vendor_regex="Apple|Ubiquiti" vendor_group_enabled=1 # Settings of runtime NAS discovery dynamic_clients=false dynamic_client_subnet=192.168.0.0/16 dynamic_client_lifetime=3600 dynamic_client_rate_limit=false # Proxy SSID (for example to eltex-eap-tls) #139679 proxy_ssid_enabled=0 proxy_ssid_value="EAP_TLS" proxy_ssid_host="127.0.0.1" proxy_ssid_port=18122 proxy_ssid_secret="eltex" # Status-Server settings status_host="<IP-адрес, на котором ожидаются запросы от eltex-radius-exporter>" status_port=18123 status_client_host="<IP-адрес, с которого ожидаются запросы от eltex-radius-exporter>" status_client_secret="eltex" #TIMEZONE TZ=Asia/Novosibirsk |
Выполнить перезапуск сервиса eltex-radius:
sudo systemctl restart eltex-radius |
Сконфигурировать файл "docker-compose.yml" для запуска eltex-radius-exporter:
version: '3'
services:
eltex-radius-exporter:
container_name: eltex-radius-exporter
image: hub.eltex-co.ru/softwlc/eltex-radius-exporter:<SoftWLC version>-<tag>
ports:
- "9812:9812/tcp"
environment:
- RADIUS_ADDRESS=<IP-адрес eltex-radius>:18123
- RADIUS_SECRET=eltex
- RADIUS_TIMEOUT=1000
- TZ=Asia/Novosibirsk |
Запустить контейнер:
sudo docker-compose up -d |
C версии 1.32 стала доступна установка deb версии eltex-radius-exporter.
Установка:
sudo apt install eltex-radius-exporter |
После установки и запуска сервиса метрики будут доступны по адресу http://<IP-адрес eltex-radius-exporter>:9812/metrics, аналогично докер версии пакета.
Что бы просмотреть вывод метрик - надо открыть в браузере адрес "http://<IP-адрес eltex-radius-exporter>:9812/metrics".
Если вывод имеет вид:
# HELP freeradius_hup_time Epoch timestamp when the server hang up (If start == hup, it hasn't been hup'd yet)
# TYPE freeradius_hup_time gauge
freeradius_hup_time{address="100.123.0.2:18123"} 1.664357155e+09
# HELP freeradius_queue_len_acct Acct queue length
# TYPE freeradius_queue_len_acct gauge
freeradius_queue_len_acct{address="100.123.0.2:18123"} 0
# HELP freeradius_queue_len_auth Auth queue length
# TYPE freeradius_queue_len_auth gauge
freeradius_queue_len_auth{address="100.123.0.2:18123"} 0
# HELP freeradius_queue_len_detail Detail queue length
# TYPE freeradius_queue_len_detail gauge
freeradius_queue_len_detail{address="100.123.0.2:18123"} 0
# HELP freeradius_queue_len_internal Interal queue length
# TYPE freeradius_queue_len_internal gauge
freeradius_queue_len_internal{address="100.123.0.2:18123"} 0
# HELP freeradius_queue_len_proxy Proxy queue length
# TYPE freeradius_queue_len_proxy gauge
freeradius_queue_len_proxy{address="100.123.0.2:18123"} 0
# HELP freeradius_queue_pps_in Queue PPS in
# TYPE freeradius_queue_pps_in gauge
freeradius_queue_pps_in{address="100.123.0.2:18123"} 0
# HELP freeradius_queue_pps_out Queue PPS out
# TYPE freeradius_queue_pps_out gauge
freeradius_queue_pps_out{address="100.123.0.2:18123"} 0
# HELP freeradius_start_time Epoch timestamp when the server was started
# TYPE freeradius_start_time gauge
freeradius_start_time{address="100.123.0.2:18123"} 1.664357155e+09
# HELP freeradius_stats_error Stats error as label with a const value of 1
# TYPE freeradius_stats_error gauge
freeradius_stats_error{address="100.123.0.2:18123",error=""} 1
# HELP freeradius_total_access_accepts Total access accepts
# TYPE freeradius_total_access_accepts counter
freeradius_total_access_accepts{address="100.123.0.2:18123"} 0
# HELP freeradius_total_access_challenges Total access challenges
# TYPE freeradius_total_access_challenges counter
freeradius_total_access_challenges{address="100.123.0.2:18123"} 0
# HELP freeradius_total_access_rejects Total access rejects
# TYPE freeradius_total_access_rejects counter
freeradius_total_access_rejects{address="100.123.0.2:18123"} 0
# HELP freeradius_total_access_requests Total access requests
# TYPE freeradius_total_access_requests counter
freeradius_total_access_requests{address="100.123.0.2:18123"} 0
# HELP freeradius_total_acct_dropped_requests Total acct dropped requests
# TYPE freeradius_total_acct_dropped_requests counter
freeradius_total_acct_dropped_requests{address="100.123.0.2:18123"} 0
# HELP freeradius_total_acct_duplicate_requests Total acct duplicate requests
# TYPE freeradius_total_acct_duplicate_requests counter
freeradius_total_acct_duplicate_requests{address="100.123.0.2:18123"} 0
# HELP freeradius_total_acct_invalid_requests Total acct invalid requests
# TYPE freeradius_total_acct_invalid_requests counter
freeradius_total_acct_invalid_requests{address="100.123.0.2:18123"} 0
# HELP freeradius_total_acct_malformed_requests Total acct malformed requests
# TYPE freeradius_total_acct_malformed_requests counter
freeradius_total_acct_malformed_requests{address="100.123.0.2:18123"} 0
# HELP freeradius_total_acct_requests Total acct requests
# TYPE freeradius_total_acct_requests counter
freeradius_total_acct_requests{address="100.123.0.2:18123"} 0
# HELP freeradius_total_acct_responses Total acct responses
# TYPE freeradius_total_acct_responses counter
freeradius_total_acct_responses{address="100.123.0.2:18123"} 0
# HELP freeradius_total_acct_unknown_types Total acct unknown types
# TYPE freeradius_total_acct_unknown_types counter
freeradius_total_acct_unknown_types{address="100.123.0.2:18123"} 0
# HELP freeradius_total_auth_dropped_requests Total auth dropped requests
# TYPE freeradius_total_auth_dropped_requests counter
freeradius_total_auth_dropped_requests{address="100.123.0.2:18123"} 0
# HELP freeradius_total_auth_duplicate_requests Total auth duplicate requests
# TYPE freeradius_total_auth_duplicate_requests counter
freeradius_total_auth_duplicate_requests{address="100.123.0.2:18123"} 0
# HELP freeradius_total_auth_invalid_requests Total auth invalid requests
# TYPE freeradius_total_auth_invalid_requests counter
freeradius_total_auth_invalid_requests{address="100.123.0.2:18123"} 0
# HELP freeradius_total_auth_malformed_requests Total auth malformed requests
# TYPE freeradius_total_auth_malformed_requests counter
freeradius_total_auth_malformed_requests{address="100.123.0.2:18123"} 0
# HELP freeradius_total_auth_responses Total auth responses
# TYPE freeradius_total_auth_responses counter
freeradius_total_auth_responses{address="100.123.0.2:18123"} 140
# HELP freeradius_total_auth_unknown_types Total auth unknown types
# TYPE freeradius_total_auth_unknown_types counter
freeradius_total_auth_unknown_types{address="100.123.0.2:18123"} 0
# HELP freeradius_total_proxy_access_accepts Total proxy access accepts
# TYPE freeradius_total_proxy_access_accepts counter
freeradius_total_proxy_access_accepts{address="100.123.0.2:18123"} 0
# HELP freeradius_total_proxy_access_challenges Total proxy access challenges
# TYPE freeradius_total_proxy_access_challenges counter
freeradius_total_proxy_access_challenges{address="100.123.0.2:18123"} 0
# HELP freeradius_total_proxy_access_rejects Total proxy access rejects
# TYPE freeradius_total_proxy_access_rejects counter
freeradius_total_proxy_access_rejects{address="100.123.0.2:18123"} 0
# HELP freeradius_total_proxy_access_requests Total proxy access requests
# TYPE freeradius_total_proxy_access_requests counter
freeradius_total_proxy_access_requests{address="100.123.0.2:18123"} 0
# HELP freeradius_total_proxy_acct_dropped_requests Total proxy acct dropped requests
# TYPE freeradius_total_proxy_acct_dropped_requests counter
freeradius_total_proxy_acct_dropped_requests{address="100.123.0.2:18123"} 0
# HELP freeradius_total_proxy_acct_duplicate_requests Total proxy acct duplicate requests
# TYPE freeradius_total_proxy_acct_duplicate_requests counter
freeradius_total_proxy_acct_duplicate_requests{address="100.123.0.2:18123"} 0
# HELP freeradius_total_proxy_acct_invalid_requests Total proxy acct invalid requests
# TYPE freeradius_total_proxy_acct_invalid_requests counter
freeradius_total_proxy_acct_invalid_requests{address="100.123.0.2:18123"} 0
# HELP freeradius_total_proxy_acct_malformed_requests Total proxy acct malformed requests
# TYPE freeradius_total_proxy_acct_malformed_requests counter
freeradius_total_proxy_acct_malformed_requests{address="100.123.0.2:18123"} 0
# HELP freeradius_total_proxy_acct_requests Total proxy acct requests
# TYPE freeradius_total_proxy_acct_requests counter
freeradius_total_proxy_acct_requests{address="100.123.0.2:18123"} 0
# HELP freeradius_total_proxy_acct_responses Total proxy acct responses
# TYPE freeradius_total_proxy_acct_responses counter
freeradius_total_proxy_acct_responses{address="100.123.0.2:18123"} 0
# HELP freeradius_total_proxy_acct_unknown_types Total proxy acct unknown types
# TYPE freeradius_total_proxy_acct_unknown_types counter
freeradius_total_proxy_acct_unknown_types{address="100.123.0.2:18123"} 0
# HELP freeradius_total_proxy_auth_dropped_requests Total proxy auth dropped requests
# TYPE freeradius_total_proxy_auth_dropped_requests counter
freeradius_total_proxy_auth_dropped_requests{address="100.123.0.2:18123"} 0
# HELP freeradius_total_proxy_auth_duplicate_requests Total proxy auth duplicate requests
# TYPE freeradius_total_proxy_auth_duplicate_requests counter
freeradius_total_proxy_auth_duplicate_requests{address="100.123.0.2:18123"} 0
# HELP freeradius_total_proxy_auth_invalid_requests Total proxy auth invalid requests
# TYPE freeradius_total_proxy_auth_invalid_requests counter
freeradius_total_proxy_auth_invalid_requests{address="100.123.0.2:18123"} 0
# HELP freeradius_total_proxy_auth_malformed_requests Total proxy auth malformed requests
# TYPE freeradius_total_proxy_auth_malformed_requests counter
freeradius_total_proxy_auth_malformed_requests{address="100.123.0.2:18123"} 0
# HELP freeradius_total_proxy_auth_responses Total proxy auth responses
# TYPE freeradius_total_proxy_auth_responses counter
freeradius_total_proxy_auth_responses{address="100.123.0.2:18123"} 0
# HELP freeradius_total_proxy_auth_unknown_types Total proxy auth unknown types
# TYPE freeradius_total_proxy_auth_unknown_types counter
freeradius_total_proxy_auth_unknown_types{address="100.123.0.2:18123"} 0
# HELP freeradius_up Boolean gauge of 1 if freeradius was reachable, or 0 if not
# TYPE freeradius_up gauge
freeradius_up 1 |
значит eltex-radius-exporter успешно получает и отдает метрики от eltex-radius.
Если вывод имеет вид:
# HELP freeradius_up Boolean gauge of 1 if freeradius was reachable, or 0 if not # TYPE freeradius_up gauge freeradius_up 0 |
значит eltex-radius не отвечает на запросы.