Контроль якості викликів для CUCM за допомогою Tariscope
Cisco Unified Communications Manager (CUCM) генерує не лише детальні дані про виконані виклики (CDR записи), але і інформацію про якість викликів (Call Management Record – CMR). CMR записи зберігають інформацію про якість аудіо потоку, який був під час виклику. CDR записи пов'язані з CMR записами через 2-а параметра: Globalcallid_callmanagerid і Globalcallid_called.
CMR підтримуються лише для Cisco Unified IP Phones, телефонів серії Cisco 7960 і для шлюзів Media Gateway Control Protocol (MGCP) gateways. Якщо один з таких пристроїв бере участь у виклику, то CMR записи можуть генеруватися. Якщо ж у виклику беруть участь якісь інші кінцеві пристрої, то подібні записи не генеруються.
CMR записи в CUCM за умовчанням вимкнені. Якщо вони необхідні для аналізу, то треба їх включити. Як це зробити, описано в статті. В цьому випадку CUCM формуватиме окремі файли, які містять ці записи. Слід враховувати, що облік CMR записів вимагає додаткових процесорних витрат CUCM (дивіться таблицю 15 в [1]).
Для того щоб зрозуміти, яку інформацію адміністратор CUCM може отримати з CMR записів, розглянемо перелік полів (Таблиця 1), які ці записи містять [1].
Таблиця 1
Назва поля |
Тип поля |
Опис |
globalCallID_callManagerId |
Позитивне ціле |
Визначає унікальний ідентифікатор для CUCM. Це поле є половиною поля Global Call ID, яке включає: |
globalCallId_callId |
Позитивне ціле |
Визначає унікальний ідентифікатор для кожного виклику. CUCM призначає цей ідентифікатор незалежно для кожного сервера викликів. Величини ідентифікаторів вибираються послідовно, коли починається виклик. Значення призначається для кожного успішного або неуспішного виклику, Це поле являє собою половину поля Global Call ID, яке включає в себе: Усі записи, які пов'язані зі стандартним викликом, мають той же GlobalCallID. За умовчанням це поле завжди має бути заповненим. |
nodeId |
Позитивне ціле |
Поле визначає сервер або вузол усередині кластера CUCM, де був згенерований запис. За умовчанням це поле завжди має бути заповненим. |
callIdentifier |
Позитивне ціле |
Поле визначає гілку виклику, до якої запис відноситься. |
directoryNumber |
Ціле |
Визначає телефонний номер пристрою, з якого збирається інформація. За умовчанням це поле завжди має бути заповненим. |
dateTimeStamp |
Ціле |
Дата і час формування запису. За умовчанням це поле завжди має бути заповненим. |
numberPacketsSent |
Ціле |
Вказує кількість RTP пакетів, які послав пристрій з початку з'єднання. Матиме 0, якщо з'єднання було встановлено в режим "тільки для отримання". За умовчанням: 0. |
numberOctetsSent |
Ціле |
Вказує загальне число байт, яке пристрій послав в складі RTP пакетів. Поле матиме 0, якщо з'єднання було встановлено в режим "тільки для отримання". За умовчанням: 0. |
numberPacketsReceived |
Ціле |
Вказує кількість RTP пакетів, яке отримав пристрій з початку з'єднання. Поле матиме 0, якщо з'єднання було встановлено в режим "тільки для відправки". За умовчанням: 0. |
numberOctetsReceived |
Ціле |
Вказує загальне число байт, яке пристрій одержав у складі RTP пакетів. Поле матиме 0, якщо з'єднання було встановлено в режим "тільки для відправки". За умовчанням: 0. |
numberPacketsLost |
Ціле |
Поле визначає загальне число RTP пакетів, які були втрачені з початку їх прийому. Ця величина визначається як різниця числа очікуваних пакетів і числа реально отриманих пакетів, яке включає всі пакети, що запізнилися і продубльовані. Таким чином, пакети, що запізнилися, не вважаються втраченими, і значення цього параметра може бути негативним, якщо мале місце продубльовані пакети. Поле матиме 0, якщо з'єднання було встановлене в режим "тільки для відправки". За умовчанням: 0. |
jitter |
Ціле |
Це поле містить оцінку статистичної дисперсії часу прибуття RTP пакетів, виміряне в мілісекундах і яке виражається як ціле число без знаку. RFC 1889 містить детальні алгоритми обчислень джиттера. Поле матиме 0, якщо з'єднання було встановлене в режим "тільки для відправки". За умовчанням: 0. |
latency |
Ціле |
Це поле визначає величину, яка дозволяє оцінити мережеву затримку, виражену в мілісекундах. Значення цього поля представляє середню величину між часом RTCP повідомлень і часом здобуття приймачами цих повідомлень. CUCM обчислює середнє значення, підсумовуючи всі оцінки і потім ділячи їх на число RTCP повідомлень, які були отримані. Більш детальну інформацію дивіться в RFC 1889. Значення за умовчанням — 0. Примітка. CMR записи не показують затримку для всіх прошивок телефонів. Наприклад, для SIP 9.2.1 і 9.2.2 затримка не відображатиметься, так як її обчислення не реалізовано в цих прошивках. |
pkid |
Текст |
Поле відображає текстовий рядок, яку база даних використовує для унікальної ідентифікації кожного рядка. Система завжди заповнює це поле. |
directoryNumberPartition |
Текст |
Це поле відображає сегмент (partition), в який входить телефонний номер. Значення за умовчанням — порожній рядок, "". Поле може залишатися порожнім. |
deviceName |
Текст |
Поле відображає ім'я пристрою. Значення за умовчанням — порожній рядок, "". Поле може залишатися порожнім. |
globalCallId_ClusterId |
Текст |
Це поле відображає унікальний ідентифікатор для одиничного CUCM або для кластера Cucm-ов. |
varVQMetrics |
Текст |
Це поле містить змінне число метрик якості голосу. |
Для оцінки якості передачі голосу представляють інтерес наступні поля: numberpacketslost (Кількість втрачених пакетів), jitter (Джиттер), latency (Затримка) і метрики з поля varVQMetrics.
Втрата пакетів
Втрачені пакети в IP-телефонії порушують мову і створюють спотворення тембру. За деякими даними вважається, що втрата до 5% пакетів непомітна, а понад 10-15% - неприпустима. Причому дані величини істотно залежать від алгоритмів компресії / декомпресії, а також від типу втрати пакетів. Наприклад, у розмові 1 втрати пакетів були в різні моменти розмови невеликими групами або одинично, при цьому сумарно втрачено 100 пакетів, а в розмові 2 втрати були двома блоками по 40 і 60 пакетів, тобто сумарно також втрачено 100 пакетів. Звичайно, що в розмові 1 втрата пакетів практично не позначиться на чіткість мовлення, в той час, як у другому випадку це буде помітно.
Існує два типи втрати пакетів:
1. Втрати обумовлені мережею: одержувач пакетів не отримав їх оскільки вони були втрачені в мережі між відправником і одержувачем. Причин для втрати пакетів в мережі існує безліч, але найчастіше зустрічається два варіанти:
- мережеві затори: у якийсь момент виникає дуже великий трафік, і маршрутизатор або інший мережевий пристрій приймає рішення по відкиданню деяких пакетів. Якщо мережевий пристрій підтримує механізми якості обслуговування (QOS), то відкидання пакетів виконується з врахуванням цього параметра.
- мережеві помилки: помилки з’єднання, викликані фізичним середовищем, можуть привести до втрати або пошкодження пакетів. А якщо пакет пошкоджений і не може бути відновлений, то він також буде відкинутий мережевим пристроєм. Дублювання пакетів між мережевими картами і комутаторами також можуть бути причиною втрати пакетів.
2. Втрати, обумовлені джиттером: VoIP телефон отримує пакет, але або занадто рано чи пізно, що призводить до його відкидання.
Джиттер
Коли мова або дані розбиваються на пакети для передачі через IP-мережу, пакети часто прибувають в пункт призначення в різний час і в різній послідовності. Це створює розкид часу доставки пакетів (джиттер).
Коли телефон посилає голосовий пакет, він встановлює тимчасову мітку в заголовку RTP пакету. Телефон, що отримав голосовий пакет також генерує тимчасову мітку і порівнює її з тимчасовою міткою відправника пакету. Ці тимчасові мітки використовуються для обчислення девіації затримки або величини джиттера. Щоб згладити вплив джиттера на відтворений голос використовується буфер джиттера, куди потрапляють отримані пакети. Проте, дуже велике значення джиттера, що означає, що пакети прийшли або занадто рано або занадто пізно, призводить до того, що вони не потрапляють в цей буфер, а, отже, це призводить до втрати цих пакетів.
Джиттер призводить до специфічних порушень передачі мови, чутних як тріски і клацання. Розрізняють три форми джиттера:
- Джиттер, залежний від даних: відбувається у випадку обмеженої смуги пропускання або при порушеннях мережевих компонентах.
- Спотворення робочого циклу: обумовлено затримкою розповсюдження.
- Випадковий джиттер: є результатом теплового шуму.
Затримка
Затримка створює незручність при веденні діалогу, приводить до перекриття розмов і виникнення відлуння. Все це стає помітним, коли затримка в одному напрямку передачі перевищує 150 - 200 мс. Можна виділити наступні джерела затримки при передачі голосу через IP:
- Затримка пакетизації: обумовлена часом, який потрібен на кодування, декодування переданого голосу.
- Затримка черги: обумовлена часом затримки пакетів у чергах для їх обробки в комутаторах, маршрутизаторах.
- Затримка серіалізації: це час, який потрібний для передачі пакета в мережевий інтерфейс. Величина цієї затримки тим більше, чим більше величина пакету.
- Затримка розповсюдження: це час, який потребується для передачи пакета по мережі. Ця затримка може бути пов’язана з географічною віддаленістю учасників розмови.
- Затримка джиттера буферу: час знаходження пакету в буфері джиттеру.
У Рекомендаціях МСЕ G.114 встановлений поріг затримки при передачі мови: не більше 150 мс. При величині затримки, що перевищує 250 мс, вважається, що людина відчуває помітний дискомфорт під час розмови.
Метрики поля varVQMetrics називаються в документації в Cisco Systems [3] як K-factor (К-коефіцієнти), які є усередненими оцінками розбірливості мови (mean opinion score — MOS), визначувані алгоритмом стандарту P.VTQ. Оцінки MOS представляють число обернено пропорційне до втрати пакетів, являє собою зважену оцінку роздратованості користувача із-за спотворень, викликаних втратою пакетів. Оцінка виставляється в межах від 1 до 5, як показано в Таблиці 2.
Таблиця 2
Оцінка MOS |
Якість розбірливості мови |
5 |
відмінно |
4 |
добре |
3 |
задовільно |
2 |
погано |
1 |
дуже погано |
Ці оцінки ґрунтуються на мовних зразках великого числа мовних баз даних, де кожен тренувальний зразок має тривалість 8 секунд. Для точнішої оцінки якості мови система формує оцінки кожні 8 секунд активної телефонної розмови, які потім можуть усереднюватися.
У Таблиці 3 перераховуються K - коефіцієнти, які зберігаються в CMR записах в полі varVQMetrics.
Таблиця 3
Назва поля |
Повна назва |
Опис |
CCR |
Cumulative Conceal Ratio |
Коефіцієнт, рівний відношенню часу, який використовується на маскування, до загального часу розмови. |
ICR |
Interval Conceal Ratio |
Представляє інтервальний усереднений коефіцієнт маскування (приховування), рівний відношенню часу, який використовується на маскування, до часу розмови попередньому 3-х секундному інтервалі активного розмови. |
ICRmx |
Max Conceal Ratio |
Відображає максимальний коефіцієнт маскування, який спостерігався протягом розмови. |
CS |
Conceal Secs |
Відображає час, протягом якого спостерігалося маскування втрачених пакетів протягом розмови. |
SCS |
Severely Conceal Secs |
Відображає час в секундах, протягом якого спостерігалося маскування втрачених пакетів. |
MLQK |
MOS LQK |
Оцінка розбірливості мови за останні 8 секунд розмови на стороні приймача. |
MLQKmn |
Min MOS LQK |
Мінімальне значення оцінки розбірливості мови, яке спостерігалося з початку розмови, розбитого на 8-и секундні інтервали часу. |
MLQKmx |
Max MOS LQK |
Максимальне значення оцінки розбірливості мови, яке спостерігалося з початку розмови, розбитого на 8-и секундні інтервали часу. |
MLQKav |
Avg MOS LQK |
Середнє значення оцінки розбірливості мови, яке спостерігалося з початку розмови, розбитого на 8-и секундні інтервали часу. |
Слід розуміти, що оцінка роботи мережі, заснована на K-factor і MOS можливо більш наочна, але носить вторинний характер, оскільки дозволяє виявити проблеми з мережею тільки тоді, коли вони стають істотними. А ось облік кількості прийнятих (втрачених) пакетів, співвідношення приховування пакетів, затримка, джиттер є первинними статистичними даними і дозволяють адміністратору мережі виявляти проблеми з нею до того, як вони будуть робити істотний вплив на якість розмов.
У різних джерелах існують кілька відмінних оцінок MOS для різних кодеків. Наведемо один з них [2] в Таблиці 4.
Таблиця 4
Кодек |
Необхідна полоса, кбіт/сек |
MOS |
G.711 (ISDN) |
64 |
4,1 |
iLBC |
15,2 |
4,14 |
AMR |
12,2 |
4,14 |
G.729 |
8 |
3,92 |
G.723.1 r63 |
6,3 |
3,9 |
GSM ERF |
12,2 |
3,8 |
G.726 ADPCM |
32 |
3,85 |
G.729a |
8 |
3,7 |
G.723.1 r53 |
5,3 |
3,65 |
G.728 |
16 |
3,61 |
GSM FR |
12,2 |
3,5 |
Виходячи з цих даних і використовуваного кодека, слід оцінювати роботу телефону. Наприклад, для кодека G.729 марно вимагати MOS вище 4.
Підтримка CMR в Tariscope
Cистема Tariscope підтримує обробку як CDR, так і CMR записів. І користувач системи може переглянути та проаналізувати ці дані з використанням відповідних звітів.
Для того щоб Tariscope обробляв CMR файли, необхідно в Tariscope, в настройках CUCM, клацнути по кнопці Налаштування та в меню, що з'явиться, вибрати Розширена настройка обробки CDR. У вікні Налаштування параметрів (Малюнок 1) встановити прапорець у позиції Зберігати всі поля.
Малюнок 1
Для перегляду та аналізу опрацьованих даних необхідно відкрити подання з даними викликів CUCM і на панелі інструментів клацнути по іконці Новий звіт. У дереві звітів виберіть папку CUCM. Зараз доступні наступні звіти:
- по джиттеру,
- по затримці,
- за втраченими пакетам,
- по К-коефіцієнтам,
- всі CMR параметри.
Звіт по джиттеру відображає CMR записи, які мають ненульове значення джиттера. Дані звіту впорядковані за телефонними номерами. Приклад такого звіту показаний на Малюнку 2.
Малюнок 2
Звіт по затримці відображає CMR записи, які мають ненульову затримку. Дані звіту впорядковані по даті, часу. Приклад такого звіту показаний на Малюнку 3.
Малюнок 3
Звіт за втраченими пакетам відображає тільки ті CMR записи, у яких значення втрачених пакетів не дорівнює нулю. Дані впорядковані за значенням втрачених пакетів. Приклад такого звіту наведено на Малюнку 4.
Малюнок 4
Звіт по К-коефіцієнтам відображає тільки ті CMR записи, у яких значення поля MLQKmn має значення менш ніж 4. Приклад такого звіту показаний на Малюнку 5.
Малюнок 5
Звіт за всіма параметрами CMR записів частково подібний до звіту по К-коефіцієнтам, але ще відображає значення джиттера, затримки і втрачених пакетів. Приклад такого звіту показаний на Малюнку 6.
Малюнок 6
Користувач Tariscope, використовуючи програму Дизайнер Звітів, може самостійно модернізувати кожний із зазначених вище звітів під свої потреби або створити власні форми звітів.
Використовуючи Планувальник Tariscope, можна задати розклад по якому система самостійно буде генерувати звіти і або зберігати їх в заданій папці, або надсилати електронною поштою на вказану електронну адресу. При цьому, якщо в налаштуваннях завдання Планувальника Tariscope встановити прапорець Завантажувати звіти в документи абонента, то вони будуть доступні через Особистий кабінет абонента.
В системі Tariscope можливе створення сценарію, який через заданий інтервал часу, наприклад, 1 хвилину буде перевіряти наявність нових оброблених CMR записів і залежно від їх вмісту виконувати необхідні дії.
Посилання
1. Cisco Unified Communications Manager. Call Detail Records Administration Guide. Release 10.0(1).
Додаткова інформація
Налаштування Tariscope для використання функції обмеження з CUCM
Створення спеціальних форм звітів для CUCM
Обробка CDR з CUCM в Tariscope
Коди завершення викликыв в CUCM
Функції редакції Tariscope Enterprise
Функції редакції Tariscope Provider
Рішення на основі Tariscope