·12 daq·1 ko'rish

Asterisk'da qo'ng'iroq sifati monitoringi: MOS, jitter, packet loss va RTCP tahlili

Asterisk'da VoIP qo'ng'iroqlar sifatini kuzatish bo'yicha amaliy qo'llanma: MOS ballari, jitter-buferlar, RTCP analitikasi, kodek tanlash va ovoz muammolarini bartaraf etish.

A
Astervis
Muhandislar va product jamoasi

Buni birinchi bo'lib call-markaz operatorlari sezadi. Mijoz uchinchi marta "Iltimos, qaytaring" deydi. Operator uzr so'raydi, uzuq-yuluq ovozni ilg'ashga urinadi va 3 daqiqada tugashi kerak bo'lgan suhbat 8 daqiqaga cho'ziladi. Buni 50 ta operator va kuniga 500 ta qo'ng'iroqqa ko'paytiring. Qo'ng'iroq sifatini kuzatmaslikning narxi ana shu.

Asterisk administratorlarining ko'pchiligi qo'ng'iroqlar sonini va navbatdagi kutish vaqtini kuzatadi. Ammo o'sha qo'ng'iroqlarning sifatini — jitter, packet loss, MOS, kodeklar ishini — kam odam nazorat qiladi. Bu qo'llanma shuni o'zgartiradi.

VoIP qo'ng'irog'ini "sifatli" qiladigan narsa nima?

Asterisk vositalariga o'tishdan oldin, qo'ng'iroq tiniq eshitiladimi yoki konserva bankasi ichidagi suhbatga o'xshaydimi — buni belgilab beradigan to'rtta metrikani tushunib olish kerak.

Latency (bir tomonlama kechikish)

Latency — ovoz paketlarining jo'natuvchidan qabul qiluvchiga yetib borish vaqti. U ovozni buzmaydi, u suhbatning o'zini noqulay qiladi: odamlar bir-birining gapini bo'la boshlaydi.

LatencyTa'siri
< 150msSezilmaydi. Suhbat tabiiy ketadi.
150-300msSezilarli kechikish. Suhbatdoshlar bir-birining gapini bo'la boshlaydi.
> 300msSuhbat buziladi. Sun'iy yo'ldosh orqali gaplashayotgandek tuyuladi.

Asterisk o'rnatilgan tizimlarda latency'ni PBX bilan SIP-trunk provayderi orasida o'lchang. Agar tizim o'z serveringizda ishlayotgan bo'lsa, bu odatda server bilan ITSP shlyuzi orasidagi uchastka.

Jitter (paketlar kechikishining o'zgaruvchanligi)

Jitter paketlar qanchalik notekis kelayotganini ko'rsatadi. Agar paketlar 20ms oralig'ida kelib, ba'zan bu oraliq 80ms gacha sakrasa — jitter yuqori. Natija: uzuq-yuluq ovoz, robotsimon nutq va gapdagi bo'shliqlar.

Asterisk jitter'ni o'rnatilgan jitter-bufer orqali tekislaydi. Ammo bufer — bu murosa: juda kichigi tebranishlarni tekislay olmaydi, juda kattasi kechikish qo'shadi.

rtp.conf dagi joriy jitter-bufer sozlamalarini tekshiring:

; /etc/asterisk/rtp.conf [general] rtpstart=10000 rtpend=20000 ; Jitter buffer settings jbenable=yes ; Enable jitter buffer jbforce=no ; Don't force on all channels jbmaxsize=200 ; Max jitter buffer size (ms) jbresyncthreshold=1000 ; Resync threshold (ms) jbimpl=adaptive ; Use adaptive jitter buffer jbtargetextra=40 ; Extra delay for target (ms) jblog=no ; Enable for debugging

adaptive implementatsiyasi bufer hajmini tarmoq holatiga qarab dinamik moslaydi. Agar jitter doimiy ravishda 30ms dan yuqori bo'lsa, fixed dan adaptive ga o'ting va jbmaxsize ni 200 ga oshiring.

Packet loss (paketlar yo'qolishi)

Har bir yo'qolgan paket — ovozning tushib qolgan bo'lagi. TCP asosidagi protokollardan farqli o'laroq, RTP (Real-time Transport Protocol) yo'qolgan paketni qayta yubormaydi: qayta yuborilgani yetib kelguncha, o'sha lahza o'tib bo'lgan bo'ladi.

Packet lossTa'siri
< 1%Ko'pchilik kodeklarda sezilmaydi
1-3%Vaqti-vaqti bilan chirsillash, yengil pasayish
3-5%Bo'shliqlar aniq eshitiladi, tinglash qiyinlashadi
> 5%Suhbatlashish qiyin bo'lib qoladi

Ba'zi kodeklar paket yo'qolishini boshqalardan yaxshiroq ko'taradi. Opus o'rnatilgan xatolarni oldindan tuzatish (FEC) hisobiga 5% gacha packet loss'ga chidaydi. G.711 da esa zaxira umuman yo'q — har bir yo'qolgan paket bo'shliqqa aylanadi.

MOS (Mean Opinion Score)

MOS jitter, latency va packet loss'ni 1.0 dan 5.0 gacha bo'lgan bitta raqamga jamlaydi:

MOSSifatHayotiy taqqoslash
4.3-5.0A'loShahar telefon liniyasi sifati
4.0-4.3Yaxshi4G tarmoqdagi mobil telefon
3.5-4.0QoniqarliYig'ilish xonasida karnay orqali suhbat
3.0-3.5YomonUyali aloqa zaif, lekin gapni tushunsa bo'ladi
< 3.0YaroqsizHar 10 soniyada "Meni eshityapsizmi?"

G.711 uchun nazariy maksimum — MOS 4.5. G.729 uchun esa mukammal sharoitda ham 3.92: siqish algoritmining o'zi sifatni pasaytiradi.

Asterisk CLI orqali qo'ng'iroq sifatini kuzatish

Asterisk qo'ng'iroq sifati ma'lumotlarini real vaqtda RTCP (Real-Time Control Protocol) statistikasi orqali beradi. Har bir faol RTP-oqim RTCP-paketlar almashadi va ularda jitter, packet loss hamda round-trip time uzatiladi.

Faol kanallar sifati

Suhbat davomida metrikalarni to'g'ridan-to'g'ri olish mumkin:

# List active channels asterisk -rx "core show channels verbose" # Show RTP stats for a specific channel asterisk -rx "rtp show stats"

rtp show stats buyrug'i har bir faol RTP-oqim bo'yicha joriy jitter, packet loss va round-trip time'ni chiqaradi. Sifat muammolarini o'sha zahoti tutish uchun uni eng band soatlarda ishga tushiring.

CDR va CEL dagi RTCP ma'lumotlari

Asterisk RTCP sifat ma'lumotlarini qo'ng'iroq yozuvlari bilan birga log qila oladi. Buni cdr.conf da yoqing va sifat metrikalarini bazaga yozish uchun CDR adaptive ODBC modulidan foydalaning:

; /etc/asterisk/cdr.conf [general] enable=yes unanswered=yes

Batafsilroq ma'lumot uchun Channel Event Logging (CEL) tizimini sozlang:

; /etc/asterisk/cel.conf [general] enable=yes apps=dial,queue events=ALL

Kanal o'zgaruvchilaridan sifatni olish

Har bir qo'ng'iroqdan so'ng Asterisk kanal o'zgaruvchilarini RTP statistikasi bilan to'ldiradi. Ularga dialplan'da murojaat qiling:

; In extensions.conf — log quality after each call exten => h,1,NoOp(Call quality - RTP stats) same => n,Set(JITTER=${CHANNEL(rtcp,all_jitter)}) same => n,Set(LOSS=${CHANNEL(rtcp,all_loss)}) same => n,Set(RTT=${CHANNEL(rtcp,all_rtt)}) same => n,NoOp(Jitter: ${JITTER} | Loss: ${LOSS} | RTT: ${RTT}) same => n,Set(CDR(jitter)=${JITTER}) same => n,Set(CDR(packet_loss)=${LOSS}) same => n,Set(CDR(rtt)=${RTT})

CHANNEL(rtcp,...) funksiyasi joriy qo'ng'iroq yelkasi bo'yicha RTCP ma'lumotlarini beradi. Mavjud maydonlar:

  • all_jitter — qo'ng'iroq davomidagi jitter (min/max/avg/stdev)
  • all_loss — paket yo'qolishi foizi
  • all_rtt — round-trip time
  • txcount / rxcount — jo'natilgan va qabul qilingan paketlar
  • txjitter / rxjitter — uzatish va qabul qilishdagi jitter

Qo'ng'iroq sifati tarixi va trendlarini ko'rish uchun bularni CDR bazangizga yozing.

Kodek tanlash va uning sifatga ta'siri

Kodek sifat shiftini belgilaydi. Hech qanday tarmoq optimizatsiyasi G.729 ni G.711 dek yangratmaydi.

KodekKanal kengligiMaks. MOSPacket loss'ga chidamliligiQayerda qo'llash
G.711 (ulaw/alaw)87.2 kbps4.5Past (< 1%)LAN, keng kanallar
G.72931.2 kbps3.92Past (< 1%)WAN, tor kanallar
Opus6-510 kbps4.5+Yuqori (FEC bilan 5% gacha)WebRTC, o'zgaruvchan tarmoqlar
G.72287.2 kbps4.5Past (< 1%)HD Voice, kengpolosali qo'ng'iroqlar
iLBC38.4 kbps4.14O'rtacha (2-3%)Yo'qotishli tarmoqlar

Kodeklar ustuvorligi sip.conf yoki pjsip.conf da sozlanadi:

; /etc/asterisk/pjsip.conf [my-trunk] type=endpoint ; ... allow=!all,opus,g722,ulaw,alaw

Afzal ko'rgan kodekni birinchi qo'ying. Agar SIP-trunk provayderingiz Opus'ni qo'llab-quvvatlasa — o'shani tanlang: Opus tarmoq holatiga tez moslashadi va packet loss'ni har qanday qat'iy bitreytli kodekdan ancha yaxshi ko'taradi.

Kodek sifatini tekshirish

Qaysi kodek kelishilganini ko'rish uchun sip show channelstats (chan_sip) yoki PJSIP'ning shunga mos buyrug'idan foydalaning:

# For PJSIP asterisk -rx "pjsip show channelstats" # Output includes: # BridgeId | Channel | Codec | Rx/Tx Count | Lost | Jitter | RTT

Agar sizda doimiy ravishda G.729 kelishilayotgan bo'lsa-yu, G.711 kerak bo'lsa, trunk konfiguratsiyasini va allow/disallow tartibini tekshiring.

Tarmoq darajasida sifat monitoringi

Asterisk qo'ng'iroqlarga nima bo'lganini ko'rsatadi. Tarmoq monitoringi esa nima uchun bo'lganini ko'rsatadi.

RTCP-XR (kengaytirilgan hisobotlar)

Asterisk 13+ RTCP-XR ni qo'llab-quvvatlaydi — bu standart RTCP dan tashqari batafsil sifat metrikalarini beradi:

  • Burst/gap loss metrikalari (tasodifiy yo'qotishni ketma-ket yo'qotishdan ajratadi)
  • Round-trip delay
  • Signal va shovqin darajalari
  • R-factor (MOS hisoblanadigan boshlang'ich qiymat)

PJSIP da RTCP-XR ni yoqish:

; /etc/asterisk/pjsip.conf [global] type=global ; Enable RTCP-XR send_rtcp_xr=yes

sngrep bilan monitoring

SIP signalizatsiyasini real vaqtda tahlil qilish uchun sngrep almashtirib bo'lmaydigan vosita:

# Install apt-get install sngrep # Capture live SIP traffic sngrep -d eth0 # Filter specific calls sngrep -c port 5060

sngrep to'liq SIP zinapoya diagrammasini ko'rsatadi: INVITE, 100 Trying, 180 Ringing, 200 OK, ACK, BYE. Qo'ng'iroqlar uzilganda yoki sifat pasayganda, asosiy sabab aynan shu yerdan topiladi.

Navbatlarda nima sodir bo'layotganini taxmin qilishdan charchadingizmi?

Astervis sizning Asterisk PBX'ingiz uchun 30+ realtime grafik, operator KPI va CRM-integratsiya beradi. On-premise. 5 daqiqada o'rnatiladi. $119/oydan flat operatorlar soni cheklanmagan.

Bepul sinab ko'rish

RTP tahlili uchun tcpdump

RTP paketlarni yozib oling va Wireshark'da tahlil qiling:

# Capture RTP traffic (common port range) tcpdump -i eth0 -w /tmp/rtp-capture.pcap portrange 10000-20000 # Run for 60 seconds during peak traffic timeout 60 tcpdump -i eth0 -w /tmp/rtp-$(date +%Y%m%d-%H%M).pcap portrange 10000-20000

Yozib olingan faylni Wireshark'da oching va Telephony > RTP > RTP Streams bo'limiga o'ting. Wireshark har bir oqim uchun jitter, packet loss va MOS ni hisoblab beradi. Vaqti-vaqti bilan paydo bo'ladigan sifat muammolarini aniqlashda bu — oltin standart.

Sifat bo'yicha proaktiv ogohlantirishlar

Reaktiv monitoring degani — muammo haqida siz mijozlardan eshitasiz. Chegaraviy qiymatlar asosida proaktiv alertlarni sozlang.

Chegaraviy qiymatlarga asoslangan monitoring skripti

Faol qo'ng'iroqlarda sifatni tekshiradigan oddiy skript yozing:

#!/bin/bash # /usr/local/bin/asterisk-quality-check.sh JITTER_THRESHOLD=30 # ms LOSS_THRESHOLD=2 # percent RTT_THRESHOLD=300 # ms # Get RTP stats from active channels asterisk -rx "rtp show stats" | while read line; do jitter=$(echo "$line" | awk '{print $5}') loss=$(echo "$line" | awk '{print $7}') rtt=$(echo "$line" | awk '{print $9}') if (( $(echo "$jitter > $JITTER_THRESHOLD" | bc -l) )); then echo "ALERT: High jitter detected: ${jitter}ms" | \ mail -s "Asterisk Quality Alert" admin@yourcompany.com fi if (( $(echo "$loss > $LOSS_THRESHOLD" | bc -l) )); then echo "ALERT: Packet loss detected: ${loss}%" | \ mail -s "Asterisk Quality Alert" admin@yourcompany.com fi done

Uni ish soatlarida har 5 daqiqada cron orqali ishga tushiring:

*/5 8-18 * * 1-5 /usr/local/bin/asterisk-quality-check.sh

SIP javob kodlarini kuzatish

Provayder tomonidagi muammolarni tutish uchun SIP xatoliklarini kuzating:

KodMa'nosiNima qilish kerak
408Request TimeoutTrunk'gacha tarmoq bog'lanishini tekshirish
486Busy HereOdatiy holat, lekin keskin o'sishi sig'im yetishmasligidan darak
503Service UnavailableTrunk provayderida muammo yoki PBX ortiqcha yuklangan
488Not AcceptableKodeklar mos kelmadi — allow/disallow sozlamalarini tekshiring

Ularni Asterisk CLI dan ko'rish mumkin:

# Watch for failed SIP transactions in real-time asterisk -rx "pjsip show registrations" | grep -v "Registered"

Qo'ng'iroq sifatidagi keng tarqalgan muammolar va yechimlar

Muammo: bir tomonlama eshitiluvchanlik

Belgilari: mijoz operatorni eshitadi, operator esa mijozni eshitmaydi (yoki aksincha).

Sababi: deyarli har doim NAT. RTP paketlar noto'g'ri IP ga ketadi.

pjsip.conf dagi yechim:

[transport-udp] type=transport protocol=udp bind=0.0.0.0 external_media_address=YOUR.PUBLIC.IP external_signaling_address=YOUR.PUBLIC.IP local_net=10.0.0.0/8 local_net=172.16.0.0/12 local_net=192.168.0.0/16

Muammo: eng band soatlarda uzuq-yuluq ovoz

Belgilari: sifat ertalab 9 dan 11 gacha va kunduzi 14 dan 16 gacha pasayadi.

Sababi: kanalning to'yinishi. Ovozli trafik ma'lumotlar trafigi bilan raqobatlashadi.

Yechim: QoS markirovkasini joriy qiling. Ovozli paketlarni DSCP EF (Expedited Forwarding) bilan belgilang:

; /etc/asterisk/rtp.conf [general] tos=ef ; DSCP EF for RTP cos=5 ; 802.1p CoS for RTP ; /etc/asterisk/sip.conf or pjsip.conf tos_sip=cs3 ; DSCP CS3 for SIP signaling cos_sip=3

Keyin routeringiz yoki kommutatoringizni belgilangan paketlarni ustuvor o'tkazishga sozlang.

Muammo: 30 soniyadan keyin tasodifiy uzilishlar

Belgilari: qo'ng'iroq ulanadi, ovoz keladi, so'ng aynan 30-32 soniyada aloqa uziladi.

Sababi: routeringiz yoki firewall'ingizdagi SIP ALG SIP sarlavhalarini qayta yozmoqda.

Yechim: routerda SIP ALG ni o'chiring. Har bir modelda menyu boshqacha, lekin odatda bu firewall yoki NAT sozlamalari bo'limida. Aynan shu bitta o'zgartirish Asterisk'dagi muammolarni boshqa har qanday konfiguratsiya o'zgarishidan ko'ra ko'proq hal qiladi.

Muammo: suhbatdagi aks-sado

Belgilari: mijoz yoki operator o'z ovozini kechikish bilan eshitadi.

Sababi: analog/TDM interfeyslarda impedans mos kelmasligi yoki jitter-bufer haddan tashqari katta.

Yechim:

# If using DAHDI analog interfaces # Tune echo cancellation in /etc/dahdi/system.conf echocanceller=mg2,1-4 # In chan_dahdi.conf echocancel=yes echocancelwhenbridged=yes echotraining=800

Faqat SIP asosidagi tizimlarda aks-sado odatda abonent qurilmasidan — telefon yoki softfondan — keladi. Apparatning aks-sadoni bostirish sozlamalarini tekshiring.

Qo'ng'iroq sifati dashboard'ini qurish

Xom RTCP ma'lumotlari, agar ularga hech kim qaramasa, foydasiz. Sizga sifat trendlarini vaqt bo'yicha ko'rsatadigan va operatorlar shikoyat qilishidan oldin pasayishni belgilab beradigan dashboard kerak.

1-variant: Grafana'da o'z qo'lingiz bilan

RTCP ma'lumotlarini time-series bazaga (InfluxDB, TimescaleDB) yozing va Grafana'da dashboard quring. Bu ishlaydi, lekin sozlashga 20-40 soat ketishini hisobga oling:

  1. RTCP ma'lumotlarini yig'ish uchun o'z AGI/ARI skriptingizni yozish
  2. InfluxDB/TimescaleDB ni o'rnatish
  3. Grafana'da ma'lumot manbasini sozlash
  4. Panellarni yig'ish: MOS trendlari, jitter taqsimoti, trunklar bo'yicha yo'qotishlar
  5. Alert qoidalarini yaratish
  6. Asterisk yangilanishlari skriptlaringizni buzganda, hammasini qo'llab-quvvatlash

2-variant: Astervis — Asterisk uchun tayyor analitika

Astervis sizning Asterisk CDR bazangizga ulanadi va 30+ tayyor hisobot beradi: qo'ng'iroq sifati analitikasi, navbatlar ko'rsatkichlari, operator metrikalari, trunklar bandligi. O'rnatish 5 daqiqa oladi:

curl -fsSL https://api.astervis.io/api/releases/install.sh | bash

Hech qanday o'z skriptlaringiz kerak emas. Grafana sozlash kerak emas. Baza bilan ovora bo'lish kerak emas. Navbatlar issiqlik xaritalari, operatorlar samaradorligini kuzatish va qo'ng'iroq trendlari analitikasi — hammasi darhol, oyiga $119 qat'iy narxda, operatorlaringiz soni qanday bo'lishidan qat'i nazar.

Farqi oddiy: Grafana'dagi dashboard sizga faqat o'zingiz sozlagan narsani beradi. Astervis esa call-markazlarning 15 yillik ish tajribasi foydali ekanini isbotlagan narsani beradi.

Qo'ng'iroq sifati bo'yicha nazorat ro'yxati

Bu sahifani yopishdan oldin ro'yxat bo'yicha yurib chiqing:

  • Jitter-bufer: rtp.conf da jbenable=yes va jbimpl=adaptive ni tekshiring
  • Kodeklar ustuvorligi: endpoint konfiguratsiyasida afzal kodeklar birinchi turganiga ishonch hosil qiling
  • RTCP loglash: hangup-handler'ga CHANNEL(rtcp,*) o'zgaruvchilarini qo'shing
  • QoS markirovkasi: RTP uchun tos=ef, SIP signalizatsiyasi uchun tos_sip=cs3 ni belgilang
  • NAT sozlamasi: external_media_address sizning ommaviy IP'ingizga mos kelishini tekshiring
  • SIP ALG: firewall yoki routerda o'chirilganiga ishonch hosil qiling
  • Monitoring: eng band soatlarga muntazam sifat tekshiruvlarini rejalashtiring
  • Alertlar: jitter > 30ms, loss > 2%, RTT > 300ms chegaralarini belgilang
  • Tarixiy ma'lumotlar: trend tahlili uchun RTCP metrikalarini bazada saqlang
  • Kodek kelishuvini ko'rib chiqish: qo'ng'iroqlar vaqtida pjsip show channelstats ni tekshiring

Bu ro'yxatni har chorakda va tarmoqdagi har qanday o'zgarishdan so'ng bajaring. 15 daqiqalik audit "telefonlar yomon eshitilyapti" degan tiketlarning haftalab davom etishidan qutqaradi.

Keyingi qadamlar

Qo'ng'iroq sifati monitoringi — bir martalik sozlash emas, doimiy intizom. Asosdan boshlang: RTCP loglashni yoqing, jitter-bufer sozlamalarini tekshiring, kodek konfiguratsiyasini ko'rib chiqing. Keyin chegaraviy alertlar va tarixiy trend tahlili bilan uzluksiz monitoringga o'ting.

Maqsad — har bir qo'ng'iroqda mukammal MOS emas. Maqsad — pasayishni mijozlaringizdan oldin sezish. Ikki hafta davomida hech kim payqamagan 0.5 MOS pasayishi — bu yuzlab asabiylashgan odam, ular sizga nega qayta qo'ng'iroq qilmaganini hech qachon aytmaydi.

Tarmoqni kuzating. Metrikalarni yig'ing. Muammolar sizga mijozlarni yo'qotish evaziga tushishidan oldin ularni tuzating.

Taxmin qilishni bas qiling. Ko'rishni boshlang.

Asterisk call-markazingizning haqiqiy ko'rinishi: navbatlardagi kutish vaqti, operatorlar faolligi, trunk yuklamasi va 30+ grafik. Sizning serveringizda on-premise. 5 daqiqada o'rnatish. Kartasiz.

$119/oydan flat. Operatorlar soni cheklanmagan. 14 kunlik triаl.

Ulashish