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:
| Xavf | Biznesga ta'siri | Monitoringsiz aniqlash |
|---|---|---|
| Trunk registratsiyasining yo'qolishi | Barcha chiquvchi qo'ng'iroqlar o'tmaydi | Daqiqalardan soatlargacha |
| Sifat pasayishi (jitter/yo'qotishlar) | Uzuq-yuluq ovoz, uzilib qolgan qo'ng'iroqlar | Mijozlarning shikoyatlari |
| Sig'imning tugashi | Band signali, navbatdagi qo'ng'iroqlar | Tashlab ketilgan qo'ng'iroqlar keskin oshadi |
| Bir tomonlama ovoz (NAT muammosi) | Mijozlar operatorlarni eshitmaydi | Alohida qo'ng'iroqlar bo'yicha shikoyatlar |
| Provayderdagi avariya | Aloqaning butunlay yo'qolishi | Tashqaridan kelgan xabar |
| Toll fraud (qo'ng'iroq firibgarligi) | Kutilmagan ulkan hisob-kitoblar | Oy 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:01chan_pjsip uchun (zamonaviy Asterisk 16+):
asterisk -rx "pjsip show registrations"
# Output:
# <Registration/ServerURI> <Auth> <Status>
# trunk-provider/sip:provider.com trunk-auth RegisteredNimaga 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:
| Metrika | Me'yorda | Pasaygan | Kritik | Ta'siri |
|---|---|---|---|---|
| Kechikish (bir tomonga) | < 150 ms | 150–300 ms | > 300 ms | Suhbatdagi kechikish, gapni bo'lish |
| Jitter | < 20 ms | 20–50 ms | > 50 ms | Uzuq-yuluq ovoz, "robot" tovushi |
| Paket yo'qotishi | < 0,5% | 0,5–2% | > 2% | So'zlar tushib qoladi, ovozda uzilishlar |
| MOS (Mean Opinion Score) | > 4,0 | 3,5–4,0 | < 3,5 | Qabul qilinadigan ovoz sifati (1–5) |
| R-Factor | > 80 | 70–80 | < 70 | ITU-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 = no3. 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 hodisasi | Nima haqida xabar beradi |
|---|---|
Registry | Trunk registratsiya holati o'zgardi |
Newchannel | Trunkda yangi qo'ng'iroq boshlandi |
Hangup | Qo'ng'iroq tugadi (sabab kodi bilan) |
PeerStatus | SIP peer'ning mavjudligi o'zgardi |
RTCPReceived | Qo'ng'iroq sifati metrikalari yangilandi |
ChanDestroyed | Kanal yo'q qilindi (resurs bo'shatildi) |
ChallengeSent | Autentifikatsiya 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 = commandHodisalarga 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.22736Nagios 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
fi4-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.
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 | bashBitta 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)
| Vidjet | Yangilanish tezligi | Vazifasi |
|---|---|---|
| Registratsiya holati (barcha trunklar) | 10 soniya | Avariyani bir zumda aniqlash |
| Trunk bo'yicha faol kanallar | 5 soniya | Sig'imdan xabardorlik |
| Yuklama shkalasi (%) | 5 soniya | Sig'im bo'yicha ogohlantirish |
| Jonli qo'ng'iroq sifati (MOS/jitter) | Har bir qo'ng'iroq bo'yicha | Sifatning pasayishi |
| Muvaffaqiyatsiz qo'ng'iroqlar (oxirgi 15 daqiqa) | 30 soniya | Trendni aniqlash |
Operatsion dashboard (soatlik)
| Vidjet | Mazmuni |
|---|---|
| ASR dinamikasi (24 soat) | Trunklar bo'yicha chiziqli grafik |
| Kanal yuklamasi issiqlik xaritasi | "Trunk × soat" matritsasi |
| Eng ko'p uzilgan yo'nalishlar | Muammoli raqamlarning ustunli diagrammasi |
| Sifat baholarining taqsimoti | MOS qiymatlari gistogrammasi |
| Provayderlarni solishtirish | Trunk metrikalari yonma-yon |
Strategik dashboard (haftalik/oylik)
| Vidjet | Mazmuni |
|---|---|
| Trunk bo'yicha xarajat | Sarf va qo'ng'iroq hajmi nisbati |
| Ishonchlilik reytingi | Qaysi provayderda uptime yaxshiroq |
| Sig'im prognozi | Qachon qo'shimcha kanal kerak bo'ladi |
| Sifat dinamikasi | Oylar kesimida MOS trendi |
| ROI tahlili | Monitoring 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 -20Asosiy 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 = yes3-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 = command4-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 = cdr5-qadam: monitoringni joriy qiling (yo'lni tanlang)
- —Tez va oson: Astervis —
curl -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
| Imkoniyat | CLI/skriptlar | Grafana+Prometheus | Nagios/Zabbix | Astervis |
|---|---|---|---|---|
| Joriy qilish vaqti | Daqiqalar | 2–3 kun | 1–2 kun | 5 daqiqa |
| Real vaqtda yangilanish | Qo'lda yangilash | 15 s oralig'ida | 1–5 daqiqalik so'rov | Jonli (WebSocket) |
| Registratsiya alertlari | O'z skriptingiz | O'z qoidalaringiz | Plagin kerak | Quticha ichida |
| Qo'ng'iroq sifati metrikalari | Cheklangan | RTP eksporteri bilan | Faqat SNMP | To'liq RTP tahlili |
| Sig'im kuzatuvi | grep + sanash | O'z PromQL'ingiz | O'z tekshiruvingiz | Avtomatik |
| ASR/NER hisoblash | SQL so'rovlar | O'z dashboardlaringiz | Nativ emas | Tayyor grafiklar |
| Firibgarlikni aniqlash | Qo'lda | O'z qoidalaringiz | O'z qoidalaringiz | Anomaliyalarni aniqlash |
| Operatorlar bilan bog'lash | Imkonsiz | Murakkab JOIN | Nativ emas | Nativ integratsiya |
| CRM integratsiyasi | Imkonsiz | Imkonsiz | Nativ emas | Bitrix24, AmoCRM |
| Qo'llab-quvvatlash | Yuqori | O'rtacha | O'rtacha | Nol (SaaS kabi) |
| Narxi | Bepul (+ vaqt) | Bepul (+ vaqt) | Litsenziyaga bog'liq | $119/oy dan |
Asosiy xulosalar
- —
Beshala ustunni kuzating: registratsiya, sifat, sig'im, muvaffaqiyat ulushi va xavfsizlik. Bittasini o'tkazib yuborsangiz, ko'r nuqta paydo bo'ladi.
- —
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.
- —
Avval bazaviy ko'rsatkichlarni oling: alert chegaralarini belgilashdan oldin bir hafta davomida normal holatdagi ma'lumotlarni to'plang. Har bir muhit o'ziga xos.
- —
Javob choralarini avtomatlashtiring: shunchaki alert bilan cheklanmang — har bir stsenariy uchun runbook tayyorlang. Undan ham yaxshisi, zaxira trunklarga o'tishni avtomatlashtiring.
- —
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.
- —
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.
