·19 daq·1 ko'rish

Asterisk uchun real vaqtda SIP trunk monitoringi: to'liq qo'llanma

Asterisk PBX'da SIP trunklarni real vaqtda qanday monitoring qilish mumkin.

A
Astervis
Muhandislar va product jamoasi

SIP trunklar — bu Asterisk PBX'ingizning qon tomirlari. Har bir kiruvchi va chiquvchi qo'ng'iroq aynan ular orqali o'tadi. Trunk ishdan chiqsa yoki sifati pasaysa, butun call-markaz to'xtaydi — siz esa mijozlar shikoyat qila boshlagunicha buni bilmasligingiz ham mumkin.

Ko'pchilik Asterisk administratorlari trunk muammolarini faqat ish sodir bo'lgandan keyin sezadi: foydalanuvchi bir tomonlama ovoz haqida xabar beradi, ma'lum yo'nalishga qo'ng'iroqlar o'tmay qo'yadi yoki provayder registratsiya bo'roni haqida jahl bilan xat yozadi. Bu paytga kelib siz allaqachon daromadni yo'qotgan, mijoz ishonchini so'ndirgan va ko'r-ko'rona diagnostikaga soatlab vaqt sarflagan bo'lasiz.

Ushbu qo'llanmada SIP trunklarni proaktiv — real vaqtda — qanday monitoring qilishni ko'rib chiqamiz, toki muammolarni ular bironta qo'ng'iroqqa ta'sir qilishidan oldin ushlab olasiz.

Nega SIP trunk monitoringi muhim

Tashqi qo'ng'iroq trafigingizning 100% SIP trunklar orqali o'tadi. Ichki raqamlardan farqli o'laroq (u yerda nosozlik bitta foydalanuvchiga tegadi), trunkning ishdan chiqishi hammaga birdaniga zarba beradi. Xavf ostida nima turibdi:

XavfBiznesga ta'siriMonitoringsiz aniqlash
Trunk registratsiyasining yo'qolishiBarcha chiquvchi qo'ng'iroqlar o'tmaydiDaqiqalardan soatlargacha
Sifat pasayishi (jitter/yo'qotishlar)Uzuq-yuluq ovoz, uzilib qolgan qo'ng'iroqlarMijozlarning shikoyatlari
Sig'imning tugashiBand signali, navbatdagi qo'ng'iroqlarTashlab ketilgan qo'ng'iroqlar keskin oshadi
Bir tomonlama ovoz (NAT muammosi)Mijozlar operatorlarni eshitmaydiAlohida qo'ng'iroqlar bo'yicha shikoyatlar
Provayderdagi avariyaAloqaning butunlay yo'qolishiTashqaridan kelgan xabar
Toll fraud (qo'ng'iroq firibgarligi)Kutilmagan ulkan hisob-kitoblarOy oxiridagi hisobdan shok

50 o'rinli call-markaz uchun SIP trunk to'xtab qolishining o'rtacha narxi — yo'qotilgan mehnat unumdorligi va boy berilgan daromad hisobiga soatiga $5 000–$15 000. Real vaqtdagi monitoring aniqlashgacha o'tadigan o'rtacha vaqtni (MTTD) soatlardan soniyalarga tushiradi.

Nimani kuzatish kerak: SIP trunk salomatligining 5 ustuni

Samarali trunk monitoringi beshta muhim yo'nalishni qamrab oladi.

1. Registratsiya holati

Eng oddiy tekshiruv — trunkingiz provayderda ro'yxatdan o'tganmi? Asterisk'da registratsiya holati PBX ma'lum bir trunk orqali qo'ng'iroq qila oladimi va qabul qila oladimi, shuni ko'rsatadi.

Asosiy holatlar:

  • Registered — trunk faol va ishga tayyor
  • Unregistered — trunk registratsiyani yo'qotdi (qo'ng'iroqlar o'tmaydi)
  • Request Sent — registratsiya urinishi davom etmoqda
  • Auth Sent — autentifikatsiya so'rovi qabul qilindi
  • Rejected — provayder registratsiyani rad etdi (noto'g'ri login-parol, IP bloklangan)
  • No Authentication Required — IP asosidagi trunk, registratsiya kerak emas

CLI buyruqlari:

chan_sip uchun:

asterisk -rx "sip show registry" # Output: # Host Username Refresh State Reg.Time # provider.com mytrunk 105 Registered Thu, 19 Mar 2026 06:00:01

chan_pjsip uchun (zamonaviy Asterisk 16+):

asterisk -rx "pjsip show registrations" # Output: # <Registration/ServerURI> <Auth> <Status> # trunk-provider/sip:provider.com trunk-auth Registered

Nimaga alert qo'yish kerak: "Registered" holatidan har qanday chetga chiqish darhol ogohlantirish yuborishi kerak. Registratsiya uzilishlari ko'pincha login-parol muammolari, tarmoq nosozliklari yoki provayderdagi avariyaning birinchi belgisi bo'ladi.

2. Qo'ng'iroq sifati metrikalari (RTP)

Registratsiya "OK" bo'lgani qo'ng'iroqlar yaxshi eshitilishini anglatmaydi. RTP (Real-time Protocol) metrikalari mijozlaringiz aslida qanday ovoz sifatini eshitayotganini ko'rsatadi.

Muhim metrikalar:

MetrikaMe'yordaPasayganKritikTa'siri
Kechikish (bir tomonga)< 150 ms150–300 ms> 300 msSuhbatdagi kechikish, gapni bo'lish
Jitter< 20 ms20–50 ms> 50 msUzuq-yuluq ovoz, "robot" tovushi
Paket yo'qotishi< 0,5%0,5–2%> 2%So'zlar tushib qoladi, ovozda uzilishlar
MOS (Mean Opinion Score)> 4,03,5–4,0< 3,5Qabul qilinadigan ovoz sifati (1–5)
R-Factor> 8070–80< 70ITU-T G.107 bo'yicha sifat bahosi

Asterisk'da qanday o'lchash mumkin:

# Faol qo'ng'iroq davomida RTP statistikasini olish asterisk -rx "rtp show stats" # PJSIP kanallari uchun — har bir kanal bo'yicha sifat asterisk -rx "pjsip show channels" # Keyin aniq bir kanal bo'yicha: asterisk -rx "core show channel PJSIP/trunk-provider-00000042"

RTCP (Real-Time Control Protocol) suhbat davomida sifat bo'yicha teskari aloqa beradi. Uni PJSIP konfiguratsiyasida yoqing:

; pjsip.conf [transport-udp] type = transport protocol = udp bind = 0.0.0.0:5060 [trunk-provider] type = endpoint transport = transport-udp ; Sifat metrikalari uchun RTCP'ni yoqamiz rtcp_mux = no

3. Trunk yuklamasi va sig'imi

Har bir SIP trunkning kanal limiti bor — bir vaqtning o'zidagi maksimal qo'ng'iroqlar soni. Limitga yetganda yangi qo'ng'iroqlar band signalini oladi yoki jimgina uzilib qoladi.

Nimani kuzatish kerak:

  • Faol kanallar — hozir trunk orqali ketayotgan qo'ng'iroqlar soni
  • Cho'qqi kanallar — tanlangan davrdagi eng ko'p bir vaqtdagi qo'ng'iroqlar
  • Kanal limiti — shartnomadagi yoki sozlamalardagi maksimum
  • Yuklama foizi — faol / limit × 100

AMI (Asterisk Manager Interface) orqali monitoring:

#!/usr/bin/env python3 """AMI orqali SIP trunk yuklamasini real vaqtda monitoring qilish""" import socket import re import time AMI_HOST = "127.0.0.1" AMI_PORT = 5038 AMI_USER = "monitor" AMI_SECRET = "your_ami_password" def ami_command(sock, action, **params): """AMI amalini yuborish va javobni o'qish""" cmd = f"Action: {action}\r\n" for k, v in params.items(): cmd += f"{k}: {v}\r\n" cmd += "\r\n" sock.send(cmd.encode()) time.sleep(0.5) return sock.recv(65536).decode() def get_trunk_channels(sock, trunk_name): """Aniq bir trunkning faol kanallarini sanash""" response = ami_command(sock, "Command", Command=f"core show channels concise") channels = [l for l in response.split('\n') if trunk_name in l and '!' in l] return len(channels) def monitor_trunks(): """Asosiy monitoring sikli""" sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((AMI_HOST, AMI_PORT)) sock.recv(1024) # Salomlashuv xabari # Tizimga kirish ami_command(sock, "Login", Username=AMI_USER, Secret=AMI_SECRET) trunks = { "provider-a": {"limit": 30, "warn": 0.8}, "provider-b": {"limit": 60, "warn": 0.75}, } while True: for name, config in trunks.items(): active = get_trunk_channels(sock, name) util = active / config["limit"] * 100 status = "OK" if util >= 95: status = "CRITICAL" elif util >= config["warn"] * 100: status = "WARNING" print(f"[{time.strftime('%H:%M:%S')}] {name}: " f"{active}/{config['limit']} ({util:.0f}%) [{status}]") time.sleep(10) # Har 10 soniyada so'rov if __name__ == "__main__": monitor_trunks()

Sig'imni rejalashtirishning amaliy qoidasi: agar cho'qqi soatlarda trunk muntazam ravishda 70% yuklamadan oshsa, kanal qo'shish vaqti keldi. 90%+ da ishlaydigan trunk sezilarli qo'ng'iroq uzilishlariga olib keladi.

4. Muvaffaqiyatli qo'ng'iroqlar ulushi (ASR va NER)

Nechta qo'ng'iroq haqiqatan ulanganini bilmasangiz, qo'ng'iroqlarning yalang'och hajmi hech narsani anglatmaydi.

Asosiy koeffitsientlar:

  • ASR (Answer Seizure Ratio) = javob berilgan qo'ng'iroqlar / jami urinishlar × 100

    • Me'yorda: > 50% (trafik turiga qarab o'zgaradi)
    • Chiquvchi sotuv: 20–40% normal hisoblanadi
    • Kiruvchi qo'llab-quvvatlash: > 95% kutiladi
  • NER (Network Effectiveness Ratio) = (javob berilgan + band + javobsiz) / jami × 100

    • Me'yorda: > 95%
    • 90% dan past bo'lsa — tarmoq yoki trunk muammosi bor
  • SER (SIP Error Rate) = 4xx/5xx/6xx javoblari / jami × 100

    • Me'yorda: < 2%
    • 5% dan yuqori bo'lsa tekshirish kerak

CDR asosidagi tahlil uchun SQL so'rovlar:

-- Trunklar bo'yicha ASR va NER (oxirgi 24 soat) SELECT dstchannel AS trunk, COUNT(*) AS total_calls, COUNT(*) FILTER (WHERE disposition = 'ANSWERED') AS answered, ROUND( COUNT(*) FILTER (WHERE disposition = 'ANSWERED')::numeric / NULLIF(COUNT(*), 0) * 100, 1 ) AS asr_pct, ROUND( COUNT(*) FILTER (WHERE disposition IN ('ANSWERED', 'BUSY', 'NO ANSWER'))::numeric / NULLIF(COUNT(*), 0) * 100, 1 ) AS ner_pct, ROUND( COUNT(*) FILTER (WHERE disposition = 'FAILED')::numeric / NULLIF(COUNT(*), 0) * 100, 1 ) AS fail_pct FROM cdr WHERE calldate >= NOW() - INTERVAL '24 hours' AND dstchannel LIKE 'PJSIP/trunk%' GROUP BY dstchannel ORDER BY total_calls DESC; -- Aniq bir trunk bo'yicha soatlik ASR dinamikasi SELECT DATE_TRUNC('hour', calldate) AS hour, COUNT(*) AS attempts, COUNT(*) FILTER (WHERE disposition = 'ANSWERED') AS answered, ROUND( COUNT(*) FILTER (WHERE disposition = 'ANSWERED')::numeric / NULLIF(COUNT(*), 0) * 100, 1 ) AS asr_pct FROM cdr WHERE calldate >= NOW() - INTERVAL '7 days' AND dstchannel LIKE 'PJSIP/trunk-provider%' GROUP BY DATE_TRUNC('hour', calldate) ORDER BY hour DESC LIMIT 168; -- 7 kunlik soatlik ma'lumot -- SIP javob kodlari bo'yicha taqsimot (kengaytirilgan CDR yoki CEL talab qiladi) SELECT hangupcause AS sip_code, COUNT(*) AS occurrences, ROUND(COUNT(*)::numeric / SUM(COUNT(*)) OVER () * 100, 1) AS pct FROM cdr WHERE calldate >= NOW() - INTERVAL '24 hours' AND dstchannel LIKE 'PJSIP/trunk%' AND disposition = 'FAILED' GROUP BY hangupcause ORDER BY occurrences DESC;

5. Xavfsizlik va anomaliyalarni aniqlash

SIP trunklar toll fraud uchun eng sevimli nishon hisoblanadi. Trunkingizni buzgan hujumchilar bir necha daqiqada minglab dollarlik xalqaro qo'ng'iroq qilib ulgurishadi.

Nimaga e'tibor berish kerak:

  • Premium raqamlarga qo'ng'iroqlar (900, xalqaro premium)
  • Qo'ng'iroq hajmining g'ayrioddiy sakrashi (odatdagidan 10 barobar)
  • Ish vaqtidan tashqarida kutilmagan yo'nalishlarga qo'ng'iroqlar
  • Notanish IP'lardan registratsiya urinishlari
  • Ketma-ket INVITE bo'roni (DoS hujumlari)

Firibgarlikni aniqlash so'rovi:

-- Shubhali xalqaro qo'ng'iroq shakllari (oxirgi 6 soat) SELECT src, dst, COUNT(*) AS call_count, SUM(billsec) AS total_seconds, ROUND(SUM(billsec) / 60.0, 1) AS total_minutes FROM cdr WHERE calldate >= NOW() - INTERVAL '6 hours' AND dstchannel LIKE 'PJSIP/trunk%' AND LENGTH(dst) > 10 -- Xalqaro format AND dst NOT LIKE '1%' -- Ichki yo'nalishlarni chiqarib tashlaymiz (o'z davlatingizga moslang) GROUP BY src, dst HAVING COUNT(*) > 5 ORDER BY total_seconds DESC;

Real vaqtda monitoring usullari

1-usul: Asterisk CLI (qo'lda)

Tezkor nuqtaviy tekshiruvlar uchun yaxshi. Uzluksiz monitoring uchun to'g'ri kelmaydi.

# Barcha trunk registratsiyalari bir qarashda asterisk -rx "pjsip show registrations" # Aniq bir trunk orqali ketayotgan joriy qo'ng'iroqlar asterisk -rx "core show channels" | grep "trunk-provider" # Trunk endpoint holati asterisk -rx "pjsip show endpoint trunk-provider" # Faol kanallar soni asterisk -rx "core show channels count"

2-usul: AMI hodisalariga obuna (dasturiy)

Asterisk Manager Interface har bir qo'ng'iroq, registratsiya o'zgarishi va kanal holati almashinuvi bo'yicha real vaqtda hodisa chiqaradi. Aksariyat monitoring tizimlari aynan shunga tayanadi.

Trunk monitoringi uchun asosiy hodisalar:

AMI hodisasiNima haqida xabar beradi
RegistryTrunk registratsiya holati o'zgardi
NewchannelTrunkda yangi qo'ng'iroq boshlandi
HangupQo'ng'iroq tugadi (sabab kodi bilan)
PeerStatusSIP peer'ning mavjudligi o'zgardi
RTCPReceivedQo'ng'iroq sifati metrikalari yangilandi
ChanDestroyedKanal yo'q qilindi (resurs bo'shatildi)
ChallengeSentAutentifikatsiya so'rovi yuborildi (xavfsizlik)

AMI konfiguratsiyasi (manager.conf):

[general] enabled = yes port = 5038 bindaddr = 127.0.0.1 ; Faqat lokal kirish [monitor] secret = your_strong_password deny = 0.0.0.0/0.0.0.0 permit = 127.0.0.1/255.255.255.0 read = system,call,reporting write = command

Hodisalarga asoslangan monitoring skripti:

#!/usr/bin/env python3 """ AMI yordamida hodisalarga asoslangan SIP trunk monitoringi. Real vaqtdagi hodisalarga obuna bo'ladi va trunk salomatligini kuzatadi. """ import socket import re from collections import defaultdict from datetime import datetime class TrunkMonitor: def __init__(self, host="127.0.0.1", port=5038): self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.sock.connect((host, port)) self.sock.recv(1024) self.trunk_channels = defaultdict(int) self.trunk_calls_total = defaultdict(int) self.trunk_calls_failed = defaultdict(int) self.registration_status = {} def login(self, user, secret): self._send(f"Action: Login\r\nUsername: {user}\r\n" f"Secret: {secret}\r\nEvents: on\r\n\r\n") return self._read() def _send(self, msg): self.sock.send(msg.encode()) def _read(self): data = b"" while True: chunk = self.sock.recv(4096) data += chunk if b"\r\n\r\n" in data: break return data.decode() def process_events(self): """Asosiy sikl — AMI hodisalarini real vaqtda qayta ishlash""" buffer = "" while True: data = self.sock.recv(4096).decode() buffer += data while "\r\n\r\n" in buffer: event_text, buffer = buffer.split("\r\n\r\n", 1) event = self._parse_event(event_text) if event.get("Event") == "Registry": self._handle_registry(event) elif event.get("Event") == "Newchannel": self._handle_new_channel(event) elif event.get("Event") == "Hangup": self._handle_hangup(event) elif event.get("Event") == "PeerStatus": self._handle_peer_status(event) def _parse_event(self, text): event = {} for line in text.strip().split("\r\n"): if ": " in line: key, val = line.split(": ", 1) event[key] = val return event def _handle_registry(self, event): trunk = event.get("Username", "unknown") status = event.get("Status", "unknown") old_status = self.registration_status.get(trunk) self.registration_status[trunk] = status if old_status and old_status != status: ts = datetime.now().strftime("%H:%M:%S") print(f"[{ts}] REGISTRATION CHANGE: {trunk} " f"{old_status} -> {status}") if status != "Registered": print(f" *** ALERT: Trunk {trunk} lost registration!") def _handle_new_channel(self, event): channel = event.get("Channel", "") for trunk in self.trunk_channels: if trunk in channel: self.trunk_channels[trunk] += 1 self.trunk_calls_total[trunk] += 1 def _handle_hangup(self, event): channel = event.get("Channel", "") cause = event.get("Cause", "0") for trunk in self.trunk_channels: if trunk in channel: self.trunk_channels[trunk] = max(0, self.trunk_channels[trunk] - 1) if cause not in ("16", "17", "18", "19"): self.trunk_calls_failed[trunk] += 1 def _handle_peer_status(self, event): peer = event.get("Peer", "") status = event.get("PeerStatus", "") ts = datetime.now().strftime("%H:%M:%S") print(f"[{ts}] PEER STATUS: {peer} -> {status}") if __name__ == "__main__": monitor = TrunkMonitor() monitor.login("monitor", "your_strong_password") monitor.trunk_channels["trunk-provider-a"] = 0 monitor.trunk_channels["trunk-provider-b"] = 0 print("Monitoring SIP trunks... Press Ctrl+C to stop.") monitor.process_events()

3-usul: SNMP + tashqi monitoring (Nagios/Zabbix)

Monitoring infratuzilmasi allaqachon o'rnatilgan tashkilotlar uchun. Asterisk'ning res_snmp moduli trunk metrikalarini SNMP orqali beradi.

Asterisk'da SNMP'ni yoqamiz:

; res_snmp.conf [general] subagent = yes enabled = yes
# SNMP modulini yuklaymiz asterisk -rx "module load res_snmp" # SNMP so'rovini sinab ko'ramiz snmpwalk -v2c -c public localhost .1.3.6.1.4.1.22736

Nagios uchun tekshiruv skripti:

#!/bin/bash # check_asterisk_trunk.sh - trunk monitoringi uchun Nagios plagini # Foydalanish: check_asterisk_trunk.sh <trunk_name> <warn_channels> <crit_channels> TRUNK=$1 WARN=${2:-20} CRIT=${3:-28} # Trunkning faol kanallarini olamiz CHANNELS=$(asterisk -rx "core show channels concise" 2>/dev/null | grep -c "$TRUNK") REGISTERED=$(asterisk -rx "pjsip show registrations" 2>/dev/null | grep "$TRUNK" | grep -c "Registered") if [ "$REGISTERED" -eq 0 ]; then echo "CRITICAL - Trunk $TRUNK not registered | channels=$CHANNELS" exit 2 fi if [ "$CHANNELS" -ge "$CRIT" ]; then echo "CRITICAL - Trunk $TRUNK: $CHANNELS active channels (>=$CRIT) | channels=$CHANNELS" exit 2 elif [ "$CHANNELS" -ge "$WARN" ]; then echo "WARNING - Trunk $TRUNK: $CHANNELS active channels (>=$WARN) | channels=$CHANNELS" exit 1 else echo "OK - Trunk $TRUNK: Registered, $CHANNELS active channels | channels=$CHANNELS" exit 0 fi

4-usul: Prometheus + Grafana (zamonaviy stek)

Asterisk metrikalarini Prometheus'ga eksport qilib, Grafana'da vizualizatsiya qilamiz. Tayyor yechimni asterisk_exporter loyihasi beradi.

# docker-compose.yml — Asterisk trunk monitoringi steki uchun version: '3.8' services: asterisk-exporter: image: ghcr.io/cswiger/asterisk_exporter:latest environment: AMI_HOST: host.docker.internal AMI_PORT: 5038 AMI_USER: monitor AMI_SECRET: your_password ports: - "9200:9200" prometheus: image: prom/prometheus:latest volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml ports: - "9090:9090" grafana: image: grafana/grafana:latest environment: GF_SECURITY_ADMIN_PASSWORD: admin ports: - "3000:3000"
# prometheus.yml scrape_configs: - job_name: 'asterisk' scrape_interval: 15s static_configs: - targets: ['asterisk-exporter:9200']

Bu yondashuv jiddiy sozlash va doimiy qo'llab-quvvatlashni talab qiladi: eksporterlarni sozlash, PromQL so'rovlarini yozish, dashboardlar qurish va alert qoidalarini o'rnatish. Kichik jamoalar uchun Astervis kabi maxsus yechim bu murakkablikni butunlay olib tashlaydi.

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

5-usul: Astervis — Asterisk uchun maxsus analitika

Astervis real vaqtdagi SIP trunk monitoringini quticha ichidan, hech qanday sozlashsiz beradi:

O'rnatishdan so'ng darhol nima olasiz:

  • Trunklarning jonli holat dashboardi — har bir trunk bo'yicha registratsiya holati, faol kanallar va yuklama, real vaqtda yangilanadi
  • Qo'ng'iroq sifati issiqlik xaritalari — sifat qaysi soat va kunlarda pasayishini ko'rasiz
  • ASR/NER kuzatuvi — dinamika grafiklari va alertlar bilan avtomatik hisoblash
  • Trunk sig'imi bo'yicha alertlar — kanal limitiga yetmasingizdan oldin xabar olasiz
  • Har bir trunk bo'yicha CDR analitikasi — qo'ng'iroq shakllari, cho'qqi soatlar va uzilishlar ulushini batafsil ko'rish
  • 30+ tayyor grafik — PromQL yo'q, dashboard qurish yo'q, so'rov yozish yo'q
  • Operatorlar samaradorligi trunk marshrutizatsiyasi bilan bog'langan holda — eng yaxshi operatorlaringiz qaysi trunklardan foydalanishini ko'rasiz
  • CRM integratsiyasi — trunk ishlashini mijozlar mamnuniyati bilan solishtiring (Bitrix24, AmoCRM)

O'rnatish:

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

Bitta buyruq. Besh daqiqa. To'liq trunk monitoringi. 14 kunlik bepul sinovni boshlash →

Trunk monitoringi dashboardini qurish

Qaysi vositani tanlashingizdan qat'i nazar, trunk monitoringi dashboardingiz quyidagi savollarga bir qarashda javob berishi kerak.

Wallboard (real vaqt)

VidjetYangilanish tezligiVazifasi
Registratsiya holati (barcha trunklar)10 soniyaAvariyani bir zumda aniqlash
Trunk bo'yicha faol kanallar5 soniyaSig'imdan xabardorlik
Yuklama shkalasi (%)5 soniyaSig'im bo'yicha ogohlantirish
Jonli qo'ng'iroq sifati (MOS/jitter)Har bir qo'ng'iroq bo'yichaSifatning pasayishi
Muvaffaqiyatsiz qo'ng'iroqlar (oxirgi 15 daqiqa)30 soniyaTrendni aniqlash

Operatsion dashboard (soatlik)

VidjetMazmuni
ASR dinamikasi (24 soat)Trunklar bo'yicha chiziqli grafik
Kanal yuklamasi issiqlik xaritasi"Trunk × soat" matritsasi
Eng ko'p uzilgan yo'nalishlarMuammoli raqamlarning ustunli diagrammasi
Sifat baholarining taqsimotiMOS qiymatlari gistogrammasi
Provayderlarni solishtirishTrunk metrikalari yonma-yon

Strategik dashboard (haftalik/oylik)

VidjetMazmuni
Trunk bo'yicha xarajatSarf va qo'ng'iroq hajmi nisbati
Ishonchlilik reytingiQaysi provayderda uptime yaxshiroq
Sig'im prognoziQachon qo'shimcha kanal kerak bo'ladi
Sifat dinamikasiOylar kesimida MOS trendi
ROI tahliliMonitoring hisobiga tejalgan mablag'

SIP trunklardagi keng tarqalgan muammolar va ularni qanday aniqlash

1-muammo: jimgina registratsiya uzilishlari

Belgilari: chiquvchi qo'ng'iroqlar o'tmaydi, lekin Asterisk konsolida hech qanday xato ko'rinmaydi.

Qanday aniqlash mumkin:

# Registratsiya haqiqatan ham dolzarbmi, tekshiramiz asterisk -rx "pjsip show registrations" | grep -v "Registered" # Loglardan registratsiya xatolarini qidiramiz grep "Registration .* failed" /var/log/asterisk/messages | tail -20

Asosiy sabablari:

  • Provayder ogohlantirmasdan login-parolni almashtirgan
  • IP manzil o'zgargan (DynDNS'siz dinamik IP)
  • Provayder firewall'i yangi IP'ingizni bloklayapti
  • TLS sertifikatining muddati tugagan

2-muammo: sifatning asta-sekin pasayishi

Belgilari: foydalanuvchilar "qo'ng'iroqlar so'nggi paytda yomonroq eshitilyapti" deyishadi, lekin bu qachon boshlanganini aniq ayta olishmaydi.

Qanday aniqlash mumkin:

-- Haftalar kesimida MOS dinamikasi SELECT DATE_TRUNC('week', calldate) AS week, ROUND(AVG( CASE WHEN billsec > 0 THEN 4.5 - (0.01 * EXTRACT(EPOCH FROM (end_time - answer_time) - billsec)) ELSE NULL END ), 2) AS avg_estimated_mos, COUNT(*) AS calls FROM cdr WHERE calldate >= NOW() - INTERVAL '90 days' AND dstchannel LIKE 'PJSIP/trunk%' AND disposition = 'ANSWERED' GROUP BY DATE_TRUNC('week', calldate) ORDER BY week;

Asosiy sabablari:

  • Internet-provayder marshrutlarni o'zgartirgan
  • Aloqa provayderi sig'imni ortiqcha sotgan
  • Tarmoq uskunasining eskirishi
  • Kodek kelishuvi pastroq sifatga tushib qolgan

3-muammo: trunk sig'imining tugashi

Belgilari: cho'qqi soatlarda ba'zi qo'ng'iroqlar uziladi, lekin hammasi emas.

Qanday aniqlash mumkin:

-- Soatlar kesimida bir vaqtdagi qo'ng'iroqlar cho'qqisini topamiz SELECT DATE_TRUNC('hour', calldate) AS hour, MAX(concurrent) AS peak_concurrent FROM ( SELECT calldate, COUNT(*) OVER ( ORDER BY calldate RANGE BETWEEN INTERVAL '0 seconds' PRECEDING AND INTERVAL '0 seconds' FOLLOWING ) AS concurrent FROM cdr WHERE calldate >= NOW() - INTERVAL '7 days' AND dstchannel LIKE 'PJSIP/trunk%' ) sub GROUP BY DATE_TRUNC('hour', calldate) ORDER BY peak_concurrent DESC LIMIT 24;

Yechim: yuklama bo'yicha alertlarni 70% va 90% chegaralarida sozlang. Cho'qqi soatlarda 70% muntazam ishga tushsa, sig'imni rejalashtirishni boshlang.

4-muammo: toll fraud hozirning o'zida

Belgilari: kutilmagan xalqaro qo'ng'iroqlar, ayniqsa ish vaqtidan tashqarida.

Qanday aniqlash mumkin:

# Real vaqtda: ish vaqtidan tashqaridagi xalqaro qo'ng'iroqlarni kuzatamiz asterisk -rx "core show channels concise" | \ awk -F'!' '{print $1, $7}' | \ grep -E '\+?(9[0-9]{2}|00[0-9]{3})'

Zudlik bilan javob choralari:

# Trunkni darhol bloklaymiz asterisk -rx "pjsip set endpoint trunk-name max_channels 0" # Yoki trunkning barcha kanallarini uzamiz asterisk -rx "channel request hangup all"

Monitoring cheklisti: noldan sozlash

Trunk monitoringini joriy qilish uchun quyidagi bosqichma-bosqich cheklistga amal qiling.

1-qadam: trunklaringizni inventarizatsiya qiling

# Barcha sozlangan trunklar ro'yxati asterisk -rx "pjsip show endpoints" | grep -E "Endpoint:|Contact:" # Yoki chan_sip uchun: asterisk -rx "sip show peers" | grep -v "^Name\|--\|^$"

2-qadam: sifat kuzatuvini yoqing

; pjsip.conf - har bir trunk endpoint'iga qo'shing [trunk-provider] type = endpoint ; ... mavjud konfiguratsiya ... allow = !all,opus,g722,ulaw,alaw ; Yuqori sifatli kodeklarga ustunlik trust_id_inbound = yes send_rpid = yes

3-qadam: monitoring uchun AMI kirishini sozlang

; manager.conf [monitor] secret = strong_random_password_here deny = 0.0.0.0/0.0.0.0 permit = 127.0.0.1/255.255.255.0 read = system,call,reporting write = command

4-qadam: CDR'ni bazaga yozishni sozlang

; cdr.conf [general] enable = yes unanswered = yes ; Muvaffaqiyatsiz qo'ng'iroqlarni ham yozamiz congestion = yes ; cdr_adaptive_odbc.conf yoki cdr_pgsql.conf [global] connection = asterisk table = cdr

5-qadam: monitoringni joriy qiling (yo'lni tanlang)

  • Tez va oson: Asterviscurl -fsSL https://api.astervis.io/api/releases/install.sh | bash (5 daqiqa)
  • O'zingiz + Grafana: Prometheus eksporteri + o'z dashboardlaringiz (2-3 kun)
  • Enterprise: SNMP + Nagios/Zabbix integratsiyasi (tajriba bo'lsa 1-2 kun)

6-qadam: alertlarni sozlang

Quyidagilar uchun chegaralar belgilang:

  • Registratsiya holatining o'zgarishi → darhol alert
  • Yuklama > 70% → ogohlantirish
  • Yuklama > 90% → kritik
  • ASR bazaviy darajadan 10% dan ko'proq tushishi → ogohlantirish
  • MOS < 3,5 → sifat bo'yicha alert
  • Ish vaqtidan tashqaridagi xalqaro qo'ng'iroqlar → firibgarlik alerti

7-qadam: monitoringingizni sinab ko'ring

# Registratsiya uzilishini simulyatsiya qilamiz (ehtiyot bo'ling — trunk uziladi!) # Buni faqat texnik xizmat oynasida bajaring asterisk -rx "pjsip send unregister trunk-provider" # Alert ishlaganini tekshiramiz va qayta ro'yxatdan o'tamiz asterisk -rx "pjsip send register trunk-provider"

Taqqoslash: SIP trunk monitoringi yondashuvlari

ImkoniyatCLI/skriptlarGrafana+PrometheusNagios/ZabbixAstervis
Joriy qilish vaqtiDaqiqalar2–3 kun1–2 kun5 daqiqa
Real vaqtda yangilanishQo'lda yangilash15 s oralig'ida1–5 daqiqalik so'rovJonli (WebSocket)
Registratsiya alertlariO'z skriptingizO'z qoidalaringizPlagin kerakQuticha ichida
Qo'ng'iroq sifati metrikalariCheklanganRTP eksporteri bilanFaqat SNMPTo'liq RTP tahlili
Sig'im kuzatuvigrep + sanashO'z PromQL'ingizO'z tekshiruvingizAvtomatik
ASR/NER hisoblashSQL so'rovlarO'z dashboardlaringizNativ emasTayyor grafiklar
Firibgarlikni aniqlashQo'ldaO'z qoidalaringizO'z qoidalaringizAnomaliyalarni aniqlash
Operatorlar bilan bog'lashImkonsizMurakkab JOINNativ emasNativ integratsiya
CRM integratsiyasiImkonsizImkonsizNativ emasBitrix24, AmoCRM
Qo'llab-quvvatlashYuqoriO'rtachaO'rtachaNol (SaaS kabi)
NarxiBepul (+ vaqt)Bepul (+ vaqt)Litsenziyaga bog'liq$119/oy dan

Asosiy xulosalar

  1. Beshala ustunni kuzating: registratsiya, sifat, sig'im, muvaffaqiyat ulushi va xavfsizlik. Bittasini o'tkazib yuborsangiz, ko'r nuqta paydo bo'ladi.

  2. Real vaqt so'rov qilishdan ustun: AMI hodisalariga obuna muammolarni soniyalarda ushlaydi, davriy tekshiruvlar esa vaqti-vaqti bilan paydo bo'ladigan nosozliklarni o'tkazib yuborishi mumkin.

  3. Avval bazaviy ko'rsatkichlarni oling: alert chegaralarini belgilashdan oldin bir hafta davomida normal holatdagi ma'lumotlarni to'plang. Har bir muhit o'ziga xos.

  4. Javob choralarini avtomatlashtiring: shunchaki alert bilan cheklanmang — har bir stsenariy uchun runbook tayyorlang. Undan ham yaxshisi, zaxira trunklarga o'tishni avtomatlashtiring.

  5. Biznes metrikalari bilan bog'lang: trunk avariyasi — shunchaki raqam. "Trunk ishdan chiqqanda 47 mijoz qo'llab-quvvatlashga bog'lana olmadi" — bu esa investitsiyani harakatga keltiradigan biznes ta'siri.

  6. Oddiydan boshlang, keyin kengaytiring: registratsiya tekshiruvlari va oddiy yuklama nazoratidan boshlang. Sifat metrikalari va firibgarlikni aniqlashni tajriba ortgani sari qo'shasiz.

O'z monitoring stekingizni qurasizmi yoki Astervis kabi maxsus vositadan foydalanasizmi — asosiysi, monitoringni bugundan boshlash. Trunklaringiz ko'rinmayotgan har bir kun — bu call-markazingiz ishonchliligi bilan qimor o'ynayotgan kuningiz.

SIP trunklaringizni real vaqtda ko'rishga tayyormisiz? Astervis'ni 14 kun bepul sinab ko'ring →

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