Cтатистика с агрегацией данных
Метрики реального времени с агрегацией данных
ECSS-10 и сопутствующие сервисы (например, контакт-центр или селекторная связь) формируют различные статистические метрики.
Система работает таким образом, что ПО формирует счетчики используя модуль ecss_statistics, который хранит счетчики в ets таблицах ноды (используется exometer_core).
Модуль ecss_statistics с заданной периодичностью осуществляет выгрузку значений счетчиков в СУБД MySQL в БД ecss_statistics в таблицу realtime_statistics.
Пример - список таблиц БД статистики:
sasha@ecss1:~$ mysql -ustatistics -p -D ecss_statistics -e 'show tables;' Enter password: +---------------------------------+ | Tables_in_ecss_statistics | +---------------------------------+ | Host.Resources | | historical_daily_statistics | | historical_hour_statistics | | historical_intrahour_statistics | | historical_monthly_statistics | | historical_weekly_statistics | | realtime_statistics | | realtime_statistics_0 | | realtime_statistics_1 | | realtime_statistics_10 | | realtime_statistics_11 | | realtime_statistics_2 | | realtime_statistics_3 | | realtime_statistics_4 | | realtime_statistics_5 | | realtime_statistics_6 | | realtime_statistics_7 | | realtime_statistics_8 | | realtime_statistics_9 | | realtime_statistics_template | | stat_details | | version | +---------------------------------+
Счетчики могут быть разных типов (counter, gauge, histogram и др.), а так же могут быть непрерывными и с автосбросом значений после считывания (autoreset).
У счетчика есть имя и значение. Значение могут содержать несколько величин и зависит от типа счетчика.
Имя - это список термов, что позволяет формировать иерархическую (древовидную) структуру метрик.
Каждый тип интервалов хранится какое-то время:
- - intrahour (5ти минутки) - 62 дня
- - hour (1 час) - 62 дня
- - daily (1 день) - 5 лет
- - weekly (недельные) - 10 лет
- - monthly (за месяц) - 10 лет
В ECSS-10 принят следующий формат описания имени счетчика:
[SystemPrefix, Domain, SubsystemPrefix, MetricName, VariablePart1, VariablePart2, MetricType].
- SystemPrefix - идентифицирует систему генерирующую метрику и может принимать следующие значения:
- ecss10.common - метрики общие для всех систем
- ecss10.ssw - метрики специфичные для софтсвича
- ecss10.cc - метрики специфичные для контакт-центра
- ecss10.tc - метрики специфичные для сервиса селекторной связи (teleconference)
- Domain - идентификатор домена (виртуальной АТС) в рамках которого генерируется метрика
- SubsystemPrefix - идентифицирует подсистему в рамках выбранной системы, которая генерирует метрику и может принимать следующие значения:
- queue - очередь (специфична для контакт-центра)
- agent - агент (специфична для контакт-центра)
- core - ядро (специфичная для софтсвича)
- sip - адаптер протокола sip (специфичная для софтсвича)
- megaco - адаптер протокола megaco (специфичная для софтсвича)
- sigtran - адаптер протокола sigtran (специфичная для софтсвича)
- mediator - медиатор (специфичная для софтсвича)
- mycelium - брокер интеграционной шини (специфичная для софтсвича)
- trunk_manager - менеджер транков
- direction_manager - менеджер направлений
- MetricName - фиксированное имя метрики, должно описывать значение которое содержится в метрике, рекомендуется, чтобы так же был указан тип метрики
- VariablePart1 - 1я дополнительная переменная часть имени метрики, специфичная для конкретной метрики (может, например, содержать имя транка, имя очереди и т.п.)
- VariablePart2 - 2я дополнительная переменная часть имени метрики, специфичная для конкретной метрики (может, например, содержать идентификатор агента)
- MetricType - определяет тип метрики, может принимать следующие значения:
- counter
- gauge
- meter
- histogram
Ниже приведена таблица метрик реального времени генерируемых системой:
Модуль ecss_statistics
SystemPrefix | Domain | SubsystemPrefix | MetricName | Var1 | Var2 | MetricType | Options | Описание |
---|---|---|---|---|---|---|---|---|
ecss10.common | .system | Домен | core | statistics_upload_time.histogram | undefined | undefined | histogram | Содержит гистограмму времени вставки статистик в MySQL | |
ecss10.common | .system | Домен | core | cpm_resource_allocation_attempts | cp | NULL | counter | Количество попыток вызовов за период времени | |
ecss10.common | .system | Домен | core | cpm_allocated_resources.histo | cp | NULL | histogram | Пиковое количество одновременных вызовов за период времени, значащее поле - max | |
ecss10.common | .system | Домен | core | cpm_allocated_resources.histo | cp | NULL | histogram | Минимальное количество одновременных вызовов за период времени, значащее поле - min |
Модуль cc_active_queue
SystemPrefix | Domain | SubsystemPrefix | MetricName | Var1 | Var2 | MetricType | Options | Описание |
---|---|---|---|---|---|---|---|---|
ecss10.сс | Домен | queue | incoming_seizures.counter | QueueID | undefined | counter | autoreset | Счетчик входящих занятий распределенных на очередь |
ecss10.сс | Домен | queue | incoming_accepted_seizures.counter | QueueID | undefined | counter | autoreset | Счетчик принятых занятий распределенных на очередь (занятие поставлено в очередь или сразу распределено на агента) |
ecss10.сс | Домен | queue | incoming_rejected_seizures.counter | QueueID | undefined | counter | autoreset | Счетчик занятий распределенных на очередь, но отклоненных по каким-либо причинам |
ecss10.сс | Домен | queue | waiting_calls.histogram | QueueID | undefined | histogram | autoreset | Гистограмма количества вызовов ожидающих в очереди |
ecss10.сс | Домен | queue | waiting_time.histogram | QueueID | undefined | histogram | Гистограмма времени ожидания вызовов в очереди |
Модуль core_trike_tm
SystemPrefix | Domain | SubsystemPrefix | MetricName | Var1 | Var2 | MetricType | Options | Описание |
---|---|---|---|---|---|---|---|---|
ecss10.ssw | Домен | trunk_manager | incoming_seizures.counter | TrunkID | undefined | counter | autoreset | Счетчик входящих занятий на транк |
ecss10.ssw | Домен | trunk_manager | incoming_accepted_seizures.counter | TrunkID | undefined | counter | autoreset | Счетчик принятых занятий на транке |
ecss10.ssw | Домен | trunk_manager | incoming_rejected_seizures.counter | TrunkID | undefined | counter | autoreset | Счетчик отклоненных по каким-либо причинам занятий на транке |
ecss10.ssw | Домен | trunk_manager | incoming_active_channels.histogram | TrunkID | undefined | histogram | Гистограмма количества входящих активных вызовов на транке | |
ecss10.ssw | Домен | trunk_manager | outgoing_active_channels.histogram | TrunkID | undefined | histogram | Гистограмма количества исходящих активных вызовов на транке |
Модуль core_trike_dm
SystemPrefix | Domain | SubsystemPrefix | MetricName | Var1 | Var2 | MetricType | Options | Описание |
---|---|---|---|---|---|---|---|---|
ecss10.ssw | Домен | direction_manager | incoming_seizures.counter | DirectionID | undefined | counter | autoreset | Счетчик входящих занятий на направление |
ecss10.ssw | Домен | direction_manager | incoming_accepted_seizures.counter | DirectionID | undefined | counter | autoreset | Счетчик принятых занятий на направление |
ecss10.ssw | Домен | direction_manager | incoming_rejected_seizures.counter | DirectionID | undefined | counter | autoreset | Счетчик отклоненных по каким-либо причинам занятий на направлении |
ecss10.ssw | Домен | direction_manager | outgoing_active_channels.histogram | DirectionID | undefined | histogram | Гистограмма количества исходящих активных вызовов на направлении |
Модуль core_trike_cmp
SystemPrefix | Domain | SubsystemPrefix | MetricName | Var1 | Var2 | MetricType | Options | Описание |
---|---|---|---|---|---|---|---|---|
ecss10.ssw | Домен | direction_manager | incoming_seizures.counter | CPM-DialogID | undefined | counter | autoreset | Счетчик входящих занятий на cpm-dialog в домене |
ecss10.ssw | Домен | direction_manager | incoming_accepted_seizures.counter | CPM-DialogID | undefined | counter | autoreset | Счетчик принятых занятий на cpm-dialog в домене |
ecss10.ssw | Домен | direction_manager | incoming_rejected_seizures.counter | CPM-DialogID | undefined | counter | autoreset | Счетчик отклоненных по каким-либо причинам занятий на cpm-dialog в домене |
ecss10.ssw | Домен | direction_manager | active_calls.histogram | CPM-DialogID | undefined | histogram | Гистограмма количества активных вызовов на cpm-dialog в домене | |
ecss10.ssw | Домен | direction_manager | incoming_seizures.counter | undefined | undefined | counter | autoreset | Общий счетчик входящих занятий в домене |
ecss10.ssw | Домен | direction_manager | incoming_accepted_seizures.counter | undefined | undefined | counter | autoreset | Общий счетчик принятых занятий в домене |
ecss10.ssw | Домен | direction_manager | incoming_rejected_seizures.counter | undefined | undefined | counter | autoreset | Общий счетчик отклоненных по каким-либо причинам занятий в домене |
Модуль custom_cb_trike_task_service
SystemPrefix | Domain | SubsystemPrefix | MetricName | Var1 | Var2 | MetricType | Options | Описание |
---|---|---|---|---|---|---|---|---|
ecss10.common | Домен | core | all_callbacks.count | WidgetId | undefined | counter | Счетчик запущенных и завершенных callback-ов с WidgetId в домене | |
ecss10.common | Домен | core | success_finished_callbacks.count | WidgetId | undefined | counter | Счетчик успешно завершенных callback-ов с WidgetId со статусом Cause(ISUP) в домене | |
ecss10.common | Домен | core | unsuccess_finished_callbacks.count | WidgetId | Cause | counter | Счетчик не успешно завершенных callback-ов с WidgetId со статусом Cause(ISUP) в домене | |
ecss10.common | Домен | core | unsuccess_finished_callbacks_by_client.count | WidgetId | Cause | counter | Счетчик не успешно завершенных из-за клиента callback-ов с WidgetId со статусом Cause(ISUP) в домене | |
ecss10.common | Домен | core | unsuccess_finished_callbacks_by_operator.count | WidgetId | Cause | counter | Счетчик не успешно завершенных из-за оператора callback-ов с WidgetId со статусом Cause(ISUP) в домене | |
ecss10.common | Домен | core | unsuccess_attempts_callback.count | WidgetId | Cause | cointer | Счетчик не успешных попыток callback-а с WidgetId |
Вызывные статистики
В системе ECSS-10 реализована запись в БД вызывной статистики. Описание метрик приведено ниже.
У всех этих метрик система - ecss10.ssw и подсистема core. Доменные метрики имеют в поле БД имя своего домена, у системных домен - .system.
Если не написано обратного, у всех метрик значащим полем является value.
Метрика | Имя в системе | variable_part_1 | variable_part_2 | Примечания |
---|---|---|---|---|
Количество поступивших в систему вызовов без номера вызывающего абонента | empty_a_number_calls_c | NULL | NULL | |
Количество успешных вызовов за период времени (вызовов с ответом вызываемого абонента) | success_calls_c | NULL | NULL | |
Количество вызовов на занятых абонентов за период времени | busy_calls_c | NULL | NULL | |
Количество вызовов без ответа вызываемого абонента за период времени | no_answer_calls_c | NULL | NULL | |
Общее кол-во неуспешных исходящих вызовов за период | unsuccess_out_calls_c | NULL | NULL | |
Отношение неуспешных вызовов ко всему количеству вызовов | - | - | - | Фиктивная метрика. Визуализируется только на grafana |
Количество попыток внешних входящих вызовов за период времени | total_trunk_in_calls_c | NULL | NULL | |
Общее количество неуспешных входящих вызовов | total_unsuccess_trunk_in_calls_c | NULL | NULL | |
Количество раз набора номера вне плана набора | total_invalid_number_calls_c | NULL | NULL |
Команды просмотра вызывных статистических данных доступны из CLI и приведены в разделе "/domain/<DOMAIN>/core/statistics/ - команда просмотра статистик ядра системы"
Также есть возможность визуализировать данные с помощью отдельной системы Grafana.
Фильтры произвольной вызывной статистики
В системе ECSS-10 разработан механизм для создания пользователем произвольных метрик/статистик на основе вызывных данных (данных, на основе которых генерируются CDR, а именно mysql таблицы ecss_calls_db.tolltickets).
Каждый фильтр проверяет, если данный вызов соответствует заданным правилам rules (критериям, условиям), то в метрику с именем metric_name, переменными частями variable_part_1, variable_part_2 записывается +1 вызов. Т.е. метрика metric_name показывает сколько было вызовов, удовлетворяющих условиям описанным в правиле rules.
Список правил в фильтре работает по принципу "И", т.е. чтобы фильтр сработал все правила должны вернуть true.
Если же нам надо, чтобы в одну метрику попадали вызовы по разными критериям (по принципу "ИЛИ"), то необходимо сознать несколько фильтров, у которых параметр metric_name совпадает.
В качестве переменных частей (variable_part_1, variable_part_2), а также сравниваемого значения, можно использовать как фиксированные названия, так и макро-переменные. В этом случае вместо макро-переменной подставится значение из CDR записи вызова. Возможные значения макро-переменных:
- $OADDR_A - номер абонента А до маршрутизации
- $OADDR_B - номер абонента Б до маршрутизации
- $ADDR_A - номер абонента А после маршрутизации
- $ADDR_B - номер абонента Б после маршрутизации
- $RELEASE_CAUSE_A - Причина завершения вызова для абонента А
- $RELEASE_CAUSE_B - Причина завершения вызова для абонента B
- $RELEASE_CAUSE - Причина завершения вызова (зависит от release_initiator: 0/1 - для абонента А, 2 - для абонента B)
- $RELEASE_CAUSE_ISUP_A - ISUP причина завершения вызова для абонента А
- $RELEASE_CAUSE_ISUP_B - ISUP причина завершения вызова для абонента B
- $RELEASE_CAUSE_ISUP - ISUP причина завершения вызова (зависит от release_initiator: 0/1 - для абонента А, 2 - для абонента B)
- $RELEASE_INITIATOR - Сторона-инициатор релиза: 0 - system, 1 - calling, 2 - called
- $IFACE_A - Интерфейс абонента А
- $IFACE_B - Интерфейс абонента B
- $CATEGORY_A - Категория абонента А
- $CATEGORY_B - Категория абонента B
- $ENDPOINT_A_HOST - IP абонента А
- $ENDPOINT_A_PORT - Port абонента А
- $ENDPOINT_B_HOST - IP абонента B
- $ENDPOINT_B_PORT - Port абонента B
- $ISUP_SPC_A - SPC код абонента А
- $ISUP_SPC_B - SPC код абонента B
- $ISUP_DPC_A - DPC код абонента А
- $ISUP_DPC_B - DPC код абонента B
- $ISUP_NI_A - Тип сети абонента А
- $ISUP_NI_B - Тип сети абонента B
- $CIC_A - Номер CIC абонента А
- $CIC_B - Номер CIC абонента B
- $MODE - тип вызова(acd | callback | internal | message | mgm | normal | refer | supervise)
- normal - обычный вызов. Вызовы, не относящиеся ни к одной из категорий, упомянутых ниже в этом списке, являются обычными и обладают mode = normal.
- acd (automatic call distribution) - вызов, который инициирует очередь для соединения с оператором.
- callback - обратный вызов, инициируемый одним из сервисов ДВО. Например Alarm, Callback, Custom Callback, Autoredial With Callback.
- internal - служебный вызов, используемый некоторыми сервисами ДВО для внутренних нужд. Данные вызовы не попадают в CDR.
- message - вызов, инициируемый сервисом CSTA SendMessage (ECMA-269 17.1.24 Send Message).
- mgm - управление ДВО, выполняемое с телефонного аппарата.
- refer - вызов, инициируемый SSW, в ответ на сообщение Refer (IETF draft-mahy-sip-remote-cc-05 Remote Call Control in SIP using the REFER method and the session-oriented dialog package).
- supervise - вызов, инициируемый для присоединения к разговору супервизора КЦ.
- $OCDPN - оригинальный номер Б
- $RGN - redirecting number
- $RN - redirection number
- $TG_A - Транк-группа интерфейса абонента А
- $TG_B - Транк-группа интерфейса абонента B
- $CDR_GROUP - Имя CDR группы
- $IVR_WIDGET_ID - Идентификатор widget-а, для вызовов с IVR
- $CC_AGENT_A_ID - Идентификатор агента КЦ для абонента А
- $CC_AGENT_B_ID - Идентификатор агента КЦ для абонента B
- $CC_AGENT_A_GROUP - Имя группы, которой принадлежит агент КЦ для абонента А
- $CC_AGENT_B_GROUP - Имя группы, которой принадлежит агент КЦ для абонента B
- $CC_QUEUE - Имя очереди КЦ из которой пришел вызов
- $RATING - Значение из IVR блока "Оценка"
Отдельная категория макропеременных - динамически формируемые списки.
- $INVALID_NUMBER_RELEASE_CAUSES - список причин завершения вызова, отмеченных как "набор номера вне плана набора"
- $UNSUCCESSFUL_RELEASE_CAUSES - список причин завершения вызова, отмеченных как "неуспешные" (управляется с помощью команд /domain/<DOMAIN>/tts/statistics/<CMD> unsuccessful_release_causes)
Макропеременные на основе этих динамически формируемых списков работают только с оператором "in", и логически оправданное применение - только с фильтрами на основе release_cause_a(b), например:
release_cause_b in $UNSUCCESSFUL_RELEASE_CAUSE release_cause_a in $INVALID_NUMBER_RELEASE_CAUSES
Использовать эти макропеременные в качестве variable_part_1(2) нельзя.
Каждое из правил в рамках фильтра представляет собой набор из трех полей:
1. Имя поля, на которое действует данное правило.
Возможные имена полей:
- oaddr_a - номер абонента А до маршрутизации
- oaddr_b - номер абонента B до маршрутизации
- addr_a - номер абонента А после маршрутизации
- addr_b - номер абонента B после маршрутизации
- dialed_digits - набранные цифры
- release_cause_a - причина завершения вызова для стороны А
- release_cause_isup_a - ISUP причина завершения вызова для стороны А
- release_description_a - текстовое описание причины релиза для стороны А
- release_cause_b - причина завершения вызова для стороны B
- release_cause_isup_b - ISUP причина завершения вызова для стороны B
- release_description_b - текстовое описание причины релиза для стороны B
- release_initiator - сторона-инициатор релиза: 0 - system, 1 - calling, 2 - called
- iface_a - интерфейс абонента А
- iface_b - интерфейс абонента B
- display_name_a - displayName абонента А после маршрутизации
- display_name_b - displayName абонента B после маршрутизации
- category_a - категория абонента А
- category_b - категория абонента B
- endpoint_a_host - IP сигнализации абонента А
- endpoint_a_port - порт сигнализации абонента А
- endpoint_b_host - IP сигнализации абонента Б
- endpoint_b_port - порт сигнализации абонента Б
- original_called_num - оригинальный номера абонента Б в случае переадресаций
- redirecting_num - redirecting номер
- redirection_num - redirection номер
- trunk_group_id_a - ID транка для стороны А
- trunk_group_id_b - ID транка для стороны B
- ivr_widget_id - идентификатор widget-а, для вызовов с IVR (сервиса CallBack).
- cdr_group - имя CDR группы
- cc_agent_a_id - Идентификатор агента КЦ для абонента А
- cc_agent_b_id - Идентификатор агента КЦ для абонента B
- cc_agent_a_group - Имя группы, которой принадлежит агент КЦ для абонента А
- cc_agent_b_group - Имя группы, которой принадлежит агент КЦ для абонента B
- cc_queue - Имя очереди КЦ из которой пришел вызов
- rating - Значение из IVR блока "Оценка"
- dpc - параметр DPC для вызовов через SIGTRAN
- is_answered - флаг, отвечен ли вызов
2. Оператор, который применяется к полю из п.1
Возможные операторы:
- = - сравнение поля с введенным значением
- in - проверяется, что поле соответствует одному из значений в списке в п.3
- like - проверяет, что значение из п.3 является подстрокой поля из п.1 (доступно только для текстовых полей)
- digitmap - проверяется, что поле удовлетворяет digitmap-у, записанному в значение из п.3 (доступно только для полей, в которых содержатся номера телефонов).
А так же можно указать признак not, который означает что результат применения оператора будет инвертирован
3. Значение - значение для правила.
Возможные значения:
- фиксированное значение
- логически оправданная макропеременная
Описание команд для работы с фильтрами произвольной вызывной статистике приведено в разделе "/domain/<DOMAIN>/core/statistics/calls/filter - Команды управления фильтрами произвольной вызывной статистики"