IVA ДОКУМЕНТАЦИЯ ОБНОВЛЕНИЯ

Мониторинг системы с использованием SNMP и SNMP Trap

В данном разделе описаны примеры настройки мониторинга IVA CS по протоколу SNMP и отправки уведомлений об инцидентах по SNMP Trap на основе решения Zabbix.

Zabbix располагает различными инструментами для мониторинга программного обеспечения и оборудования. Для отслеживания состояния оборудования (серверов IVA CS или хостов кластера), локальных ресурсов и приложений (статистика жестких дисков, памяти, процессоров и т. д.) используются специальные агенты Zabbix, а для мониторинга сервера телефонии IVA CS можно использовать возможность получения данных по SNMP-протоколу.

В разделе описываются метрики, предоставляемые IVA CS по протоколу SNMP.

С полным списком метрик, собираемых Zabbix-агентом, можно ознакомиться в официальной документации Zabbix

Настройка SNMP

SNMP-сервер по умолчанию выключен.

Включение SNMP-сервера выполняется через системные настройки — сервис swl_monitor.

Чтобы настроить параметры SNMP-сервера через системные настройки, необходимо:

  1. перейти в раздел Настройки → вкладка Системные настройки → в строке Поиск ввести swl_monitor → будут отображены все системные настройки для сервиса swl_monitor

    Базовые настройки swl_monitor
  2. указать применяемые параметры системных настроек сервиса swl_monitor:

    Пример:

    Ключ настройки Значение Параметр

    snmp.enable

    true

    Включить передачу данных по SNMP

    snmp.address

    0.0.0.0:9012

    IP-адрес и порт, через которые SNMP-сервер принимает запросы

    snmp.user_name

    ivasw

    Имя пользователя SNMPv3 для авторизации и получения данных

    snmp.authentication_protocol

    SHA256

    Протокол аутентификации SNMPv3

    snmp.authentication_passphrase

    ivaswSTrP@SSWRD

    Пароль аутентификации SNMPv3

    snmp.privacy_protocol

    AES256

    Протокол шифрования SNMPv3

    snmp.privacy_passphrase

    ivaswSTrP@SSWRD

    Пароль шифрования SNMPv3

  3. после изменения системных настроек SNMP необходимо перезапустить сервис swl_monitor:

    Перезапуск сервиса swl_monitor необходимо выполнять на хостах кластера, на которых должны применяться актуальные настройки SNMP

    Обзор → Кластер → Выбрать хост → Выбрать группу сервисов logic → Выбрать сервис swl_monitor → Нажать кнопку Перезапустить сервис → Подтверждение → Подтвердить перезапуск сервиса, нажав кнопку Да

Протоколы и безопасность

SNMP-сервер работает по протоколу UDP.

В штатном режиме используется SNMPv3 с аутентификацией и шифрованием — уровень безопасности authPriv.

Поддерживаемые протоколы аутентификации:

  • NoAuth

  • MD5

  • SHA (используется по умолчанию)

  • SHA224

  • SHA256

  • SHA384

  • SHA512

Поддерживаемые протоколы шифрования:

  • NoPriv

  • DES

  • AES (используется по умолчанию)

  • AES192

  • AES256

  • AES192C

  • AES256C

Получение метрик по SNMP

Дерево OID

OID (Object Identifier) — цифровой идентификатор для получения SNMP-менеджером конкретной метрики.

Базовый OID для всех метрик IVA CS: 1.3.6.1.4.1.54321.100

Все скалярные (основные) метрики (например: версия системы, параметры хоста, статистика звонков) расположены в ветке .1 с OID: 1.3.6.1.4.1.54321.100.1. Для получения значения скалярных метрик достаточно использовать утилиту snmpget.

OID в таблице указаны относительно базового.

Полный OID формируется следующим образом: <Базовый OID><OID метрики>

Пример полного OID для загрузки CPU: 1.3.6.1.4.1.54321.100.1.2.5

  • Хост — данные собираются с каждого сервера отдельно

  • Кластер — агрегированные данные по всему кластеру

1.3.6.1.4.1.54321.100                  Базовый OID                        Тип метрики: хост / кластер     Тип данных
│
├── .1                                 Скалярные метрики
│   ├── .1.x                           Версия системы
│   │     ├── .1 (OctetString)         Версия IVA CS                      Хост                            текст
│   │     ├── .2 (OctetString)         Патч                               Хост                            текст
│   │     └── .3 (OctetString)         Дата сборки                        Хост                            текст
│   ├── .2.x                           Параметры хоста
│   │     ├── .1 (OctetString)         Статус хоста                       Хост                            текст
│   │     ├── .2 (OctetString)         Имя хоста                          Хост                            текст
│   │     ├── .3 (OctetString)         IP-адрес                           Хост                            текст
│   │     ├── .4 (Counter64)           Uptime (сек)                       Хост                            числовое целое
│   │     ├── .5 (OpaqueDouble)        Загрузка CPU (%)                   Хост                            числовое с плавающей точкой
│   │     ├── .6 (Counter64)           Используемая память (байт)         Хост                            числовое целое
│   │     └── .7 (Counter64)           Общая память (байт)                Хост                            числовое целое
│   ├── .3.x                           Хранилище
│   │     └── .1 (Counter64)           Размер файлов (байт)               Хост                            числовое целое
│   ├── .4.x                           Статистика звонков
│   │     ├── .1 (Counter64)           Количество всех RTP-пакетов        Кластер                         числовое целое
│   │     └── .2 (Counter64)           Количество потерянных RTP-пакетов  Кластер                         числовое целое
│   ├── .5.x                           Активные звонки
│   │     └── .1 (Counter64)           Текущее количество звонков         Кластер                         числовое целое
│   ├── .6.x                           Сервисы
│   │     ├── .1 (Counter64)           Количество запущенных сервисов     Хост                            числовое целое
│   │     └── .2 (OctetString)         Информация о сервисах              Хост                            JSON
│   └── .7.x                           Шлюзы
│         ├── .1 (Counter64)           Количество шлюзов                  Кластер                         числовое целое
│         └── .2 (OctetString)         Информация о шлюзах                Кластер                         JSON

Получение данных SNMP с помощью snmpget и snmpwalk

Для выполнения запросов необходимо использовать командную строку на хосте, где установлены утилиты snmpget и snmpwalk.

При использовании настроек по умолчанию:

  • для получения одной метрики:

    snmpget -v3 \
      -n public \
      -u ivasw \
      -l authPriv \
      -a SHA256 -A 'ivaswSTrP@SSWRD' \
      -x AES256 -X 'ivaswSTrP@SSWRD' \
      <HOST_IVA_CS>:<PORT> \
      1.3.6.1.4.1.54321.100<OID>
  • для получения всех метрик:

    snmpwalk -v3 \
      -n public \
      -u ivasw \
      -l authPriv \
      -a SHA256 -A 'ivaswSTrP@SSWRD' \
      -x AES256 -X 'ivaswSTrP@SSWRD' \
      <HOST_IVA_CS>:<PORT> \
      1.3.6.1.4.1.54321.100

Параметры команд:

Маркер Значение Описание

-v3

Версия протокола SNMPv3

-n

public

Контекстный идентификатор запроса

-u

ivasw

Имя пользователя — из параметра snmp.user_name

-l

authPriv

Используемый уровень безопасности (аутентификация + шифрование)

-a

SHA256

Протокол аутентификации — из параметра snmp.authentication_protocol

-A

ivaswSTrP@SSWRD

Пароль аутентификации — из параметра snmp.authentication_passphrase

-x

AES256

Протокол шифрования — из параметра snmp.privacy_protocol

-X

ivaswSTrP@SSWRD

Пароль шифрования — из параметра snmp.privacy_passphrase

<HOST_IVA_CS>

10.0.207.151 (пример)

IP-адрес хоста сервера телефонии IVA CS, на котором выполняется запрос

<PORT>

9012

Порт, на котором SNMP-сервер обрабатывает запросы — из параметра snmp.address

<OID>

.1.2.5 (пример)

OID метрики из дерева OID

Примеры запросов и ответов

При вводе некорректных данных запрос будет отклонен
  1. имя хоста

    # Запрос
    snmpget -v3 \
      -n public \
      -u ivasw \
      -l authPriv \
      -a SHA256 -A 'ivaswSTrP@SSWRD' \
      -x AES256 -X 'ivaswSTrP@SSWRD' \
      10.0.207.151:9012 \
      1.3.6.1.4.1.54321.100.1.2.2
    # Ответ
    SNMPv2-SMI::enterprises.54321.100.1.2.2 = STRING: "ivacs0"
  2. загрузка CPU

    # Запрос
    snmpget -v3 \
      -n public \
      -u ivasw \
      -l authPriv \
      -a SHA256 -A 'ivaswSTrP@SSWRD' \
      -x AES256 -X 'ivaswSTrP@SSWRD' \
      10.0.207.151:9012 \
      1.3.6.1.4.1.54321.100.1.2.5
    # Ответ
    SNMPv2-SMI::enterprises.54321.100.1.2.5 = Opaque: Float: 12.500000
  3. количество активных звонков

    # Запрос
    snmpget -v3 \
      -n public \
      -u ivasw \
      -l authPriv \
      -a SHA256 -A 'ivaswSTrP@SSWRD' \
      -x AES256 -X 'ivaswSTrP@SSWRD' \
      10.0.207.151:9012 \
      1.3.6.1.4.1.54321.100.1.5.1
    # Ответ
    SNMPv2-SMI::enterprises.54321.100.1.5.1 = Counter64: 3
Информация собирается не мгновенно, а периодически — раз в минуту (базовая настройка)

Настройка и использование Zabbix

Более подробно про работу с Zabbix — официальная документация Zabbix
  1. войти в Zabbix и авторизоваться под собственными учетными данными пользователя:

    • поле Имя пользователя: ввести логин пользователя

    • поле Пароль: ввести пароль пользователя

    • нажать кнопку Войти

      Авторизация в Zabbix
  2. создать новый хост:
    Перейти к разделу Мониторинг (Monitoring) → Открыть вкладку Узлы сети (Hosts) → Нажать кнопку Создать узел сети (Create host) → Новый узел сети (New host) → Вкладка Узел сети (Host)

    Новый узел сети
  3. настроить параметры хоста:

    • поле Имя узла сети (Host name): ввести уникальное имя хоста, например, iva_cs

    • поле Группы узлов сети (Host groups): выбрать группу хостов сети, к которой будет принадлежать добавляемый хост, например, Testing

    • секция Интерфейсы: добавить используемый интерфейс — нажать кнопку Добавить → выбрать SNMP:

      • поле IP адрес: ввести IP-адрес хоста — сервера телефонии IVA CS, например, 10.0.207.51

      • поле Подключаться через: выбрать IP — подключение к хосту с использованием IP-адреса

      • поле Порт: ввести порт, на котором SNMP-сервер обрабатывает запросы, например, 9012

      • поле Версия SNMP: выбрать SNMPv3 — версия используемого SNMP

      • поле Максимальное количество повторений (Max repetition count): ввести 5 — количество повторений собственных массовых запросов SNMP (по умолчанию 10)

      • поле Имя контекста (Context name): ввести public

      • поле Имя безопасности (Security name): ввести ivasw

      • поле Уровень безопасности (Security level): выбрать authPriv

      • поле Протокол аутентификации (Authentication protocol): выбрать SHA256

      • поле Пароль аутентификации (Authentication passphrase): ввести ivaswSTrP@SSWRD

      • поле Протокол безопасности (Privacy protocol): выбрать AES256

      • поле Ключевая фраза безопасности (Privacy passphrase): ввести ivaswSTrP@SSWRD

      • поле Использование объединенных запросов (Use combined requests): установить флаговую кнопку

    • поле Наблюдение через (Monitored by): выбрать Сервер

    • поле Активировано (Enabled): установить флаговую кнопку

    • нажать кнопку Добавить (Add)

      Параметры нового хоста
  4. проверить доступность:
    Перейти к разделу Мониторинг (Monitoring) → Открыть вкладку Узлы сети (Hosts) → Название добавленного хоста: столбец Доступность / Availability → SNMP: зеленый (мониторинг хоста доступен) / красный (мониторинг хоста не доступен)

    Доступность мониторинга
  5. добавить элемент данных:
    Перейти к разделу Мониторинг (Monitoring) → Открыть вкладку Узлы сети (Hosts) → Нажать на название добавленного хоста → Нажать Элементы данных (Items) → Элементы данных (Items)→ Нажать кнопку Создать элемент данных (Create item) → Новый элемент данных (New item) → Вкладка Элемент данных (Item)

    Добавление элемента данных
  6. настроить параметра элемента данных:

    • поле Имя (Name): ввести название элемента данных, например test.CS.Calls

    • поле Тип (Type): выбрать тип элемента данных — SNMP агент (SNMP agent)

    • поле Ключ (Key): ввести ключ элемента данных, например test.cs.active_calls

    • поле Тип информации (Type of information): выбрать тип данных, например, Числовой (с плавающей точкой) (Numeric (float)) (выбор типа зависит от типа данных выбранной метрики из дерева OID — колонка Тип)

    • поле Интерфейс узла сети (Host interface): выбрать интерфейс хоста — в формате <HOST_IVA_CS>:<PORT>

    • поле SNMP OID: ввести OID, например 1.3.6.1.4.1.54321.100.1.5.1

    • поле Интервал обновления (Update interval): ввести 1m

    • секция Пользовательские интервалы (Custom intervals):

      • поле Тип (Type): выбрать Переменный (Flexible)

    • поле История (History): выбрать Хранить до (Store up to) и указать 1d

    • поле Динамика изменений (Trends): выбрать Хранить до (Store up to) и указать 365d

    • поле Активировано (Enabled): установить флаговую кнопку

    • нажать кнопку Добавить (Add)

      Параметры элемента данных

Для визуализации элементов данных (построения графиков) необходимо:
Перейти к разделу Мониторинг (Monitoring) → Открыть вкладку Узлы сети (Hosts) → В строке добавленного хоста нажать Графики → Настроить параметры отображения (выбрать нужные метрики и период отображения)

График элементов данных

Пример возможной визуализации:

Пример визуализации

Настройка SNMP Trap

SNMP Trap используется для отправки из IVA CS в систему мониторинга уведомлений о возникающих инцидентах. В примере ниже получателем уведомлений является Zabbix.

Отправка trap происходит только при создании нового инцидента. Если активный инцидент с таким ключом уже существует, повторное событие обновляет его счетчик, но новый trap не отправляется

Настройка IVA CS

Чтобы настроить отправку уведомлений по SNMP Trap, необходимо:

  1. перейти в раздел Настройки → вкладка Системные настройки → в строке Поиск ввести swl_monitor

  2. указать параметры SNMP Trap для сервиса swl_monitor:

    Ключ настройки Тип Пример значения Описание

    snmp.trap_target

    Текст

    10.0.206.83

    IP-адрес или DNS-имя получателя SNMP Trap

    snmp.trap_port

    Int 64

    162

    UDP-порт получателя SNMP Trap

    snmp.trap_version

    Текст

    v3

    Версия протокола отправки уведомлений

    snmp.trap_username

    Текст

    ivasw

    Имя пользователя SNMPv3 Trap

    snmp.trap_engine_id

    Текст

    8000000001020304

    Уникальный идентификатор Engine ID отправителя SNMPv3 в формате hex

    snmp.trap_auth_protocol

    Текст

    MD5

    Протокол аутентификации SNMPv3 Trap

    snmp.trap_auth_pass

    Текст

    ivaswSTrP@SSWRD

    Пароль аутентификации SNMPv3 Trap

    snmp.trap_priv_protocol

    Текст

    AES

    Протокол шифрования SNMPv3 Trap

    snmp.trap_priv_pass

    Текст

    ivaswSTrP@SSWRD

    Пароль шифрования SNMPv3 Trap

    snmp.trap_enable

    Bool

    true

    Включить отправку уведомлений по SNMP Trap

    Значения в таблице приведены для примера. Параметры аутентификации и шифрования в IVA CS и на стороне получателя должны совпадать
  3. перезапустить сервис swl_monitor на хостах кластера, на которых должны применяться актуальные настройки SNMP Trap

SNMP Trap отправляется только при создании нового инцидента. Увеличение счетчика уже существующего активного или подтвержденного инцидента не приводит к повторной отправке уведомления.
Перед повторной проверкой необходимо перевести ранее созданный инцидент в статус Решенный

Настройка и проверка Zabbix

На стороне Zabbix должен быть установлен и настроен zabbix-snmptrap-worker. В его настройках необходимо указать значения, соответствующие параметрам IVA CS:

  • engine_id: snmp.trap_engine_id

  • пароль аутентификации: snmp.trap_auth_pass

  • пароль шифрования: snmp.trap_priv_pass

Чтобы проверить получение уведомлений по SNMP Trap, необходимо:

  1. привязать к настроенному узлу сети шаблон Generic by SNMP

  2. перейти в раздел Сбор данных (Data collection) → Узлы сети (Hosts) → нажать на имя настроенного узла → Элементы данных (Items)

  3. найти элемент данных Generic by SNMP: SNMP traps (fallback)

    Элемент данных для уведомлений SNMP Trap
  4. открыть меню ⋯ слева от элемента данных → выбрать Последние данные (Latest data)

    Переход к последним данным SNMP Trap
  5. в таблице последних данных в столбце Информация (Info) нажать История (History)

    История уведомлений SNMP Trap

В истории отображаются уведомления, переданные из IVA CS в Zabbix по SNMP Trap.

Перечень событий и состав уведомлений

Ниже описаны уведомления об остановке сервиса, ошибке синхронизации с IVA ID и приближении к лицензионному лимиту абонентов. Перечень не охватывает все инциденты IVA CS.

События и передаваемые сведения
Событие Ключ и классификация Передаваемые сведения

Остановка сервиса

Префикс key: registry.service_stopped
type: system
severity: warning
source: swl_registry

В message указаны имя сервиса (service), идентификатор экземпляра (instance_id) и идентификатор процесса (pid). Эти значения также входят в ключ инцидента. Имя хоста передается в hostname

Ошибка синхронизации с IVA ID

Префикс key: ivaid.sync
type: user
severity: error
source: swl_ldap

Ключ содержит идентификатор источника авторизации. В message передается описание ошибки, в hostname — имя хоста

Приближение к лицензионному лимиту абонентов

key: backend.license_limit.subscribers.is_low
type: system
severity: warning
source: swl_backend

При добавлении абонента проверяется остаток лицензионного лимита. Инцидент создается, если остается менее 2 % от разрешенного количества абонентов. В message передаются используемое и разрешенное количества абонентов, в hostname — имя хоста

В уведомлениях об остановке сервиса и ошибке синхронизации с IVA ID используется один OID уведомления: 1.3.6.1.4.1.54321.100.2.0.1. Он передается как значение snmpTrapOID.0. Событие определяется по данным инцидента, прежде всего по полю key.

Параметры уведомления
OID параметра Содержимое

1.3.6.1.4.1.54321.100.2.1.1

Данные инцидента в формате JSON

1.3.6.1.4.1.54321.100.2.1.2

Уровень важности инцидента в виде строки. В приведенных событиях используются значения warning и error

Поля JSON инцидента
Поле Описание

key

Ключ инцидента. Содержит обозначение события и данные, по которым различаются инциденты этого события

type

Тип инцидента. В приведенных событиях используются значения system и user

severity

Уровень важности инцидента. В приведенных событиях используются значения warning и error

title

Краткий заголовок инцидента, например Остановлен сервис

message

Подробное описание события. В зависимости от события содержит параметры сервиса, причину ошибки или сведения об использовании лимита

hostname

Имя хоста, с которым связан инцидент. Поле отсутствует, если имя хоста не задано

source

Имя сервиса — источника инцидента

Значения перечисленных полей передаются строками. В выводе snmptrapd JSON с кириллицей может отображаться как Hex-STRING — последовательность шестнадцатеричных значений байтов. Для чтения JSON необходимо декодировать эти байты как текст в кодировке UTF-8.

Пример расшифрованных данных инцидента об остановке сервиса
{
  "key": "registry.service_stopped.swl_report.LfconLrFN2.8776",
  "type": "system",
  "severity": "warning",
  "title": "Остановлен сервис",
  "message": "service stopped: service=swl_report, instance_id=LfconLrFN2, pid=8776",
  "hostname": "admin_cs",
  "source": "swl_registry"
}

В этом примере остановлен экземпляр сервиса swl_report на хосте admin_cs. Идентификатор экземпляра — LfconLrFN2, идентификатор процесса — 8776. Уровень важности warning также передается отдельным параметром 1.3.6.1.4.1.54321.100.2.1.2.