Ключевые слова:cisco, phone, voip, snmp, statistic, rrd, (найти похожие документы)
From: frozer <d_frost(at)mail.ru>
Date: Mon, 25 Jun 2006 14:31:37 +0000 (UTC)
Subject: Разбор значений статистики по звонкам Cisco PGW2200
Оригинал: http://cyberos.narod.ru/work/pgw2200.html
Нашел в /opt/CiscoMGC/snmp/measurement.my oid'ы описанные в
Cisco Media Gateway Controller Software Release 9 Installation and
Configuration Guide (странно, что их нет на сайте самой Cisco,
например, здесь или здесь). Для нормальной работы еще
необходимы SNMPv2-SMI.my (берется из указанных выше мест), tp.my и
v3-tgt.my (берутся из поставки Cisco MGC). Хотя должно работать при
наличии хотя бы SNMPv2-SMI.
Весьма интересно было выдернуть статистику по звонкам :-), что в
общем-то получилось. Привожу описание и OID для статистики по
обработанным звонкам.
Описание
- OBJECT-TYPE
- OBJECT-ID значения за 15 минут,
- OBJECT-ID значения за 1 час
- OBJECT-ID значения за 1 сутки
"uptime" сбора статистики по звонкам
tpCALLCollectTime
.1.3.6.1.4.1.2496.1.1.3.17.1.2.65537.900
.1.3.6.1.4.1.2496.1.1.3.17.1.2.65537.3600
.1.3.6.1.4.1.2496.1.1.3.17.1.2.65537.86400
Кол-во звонков
tpCALLSuccCallTOT
.1.3.6.1.4.1.2496.1.1.3.17.1.3.65537.900
.1.3.6.1.4.1.2496.1.1.3.17.1.3.65537.3600
.1.3.6.1.4.1.2496.1.1.3.17.1.3.65537.86400
Общее кол-во сбойных звонков
tpCALLFailCallTOT
.1.3.6.1.4.1.2496.1.1.3.17.1.4.65537.900
.1.3.6.1.4.1.2496.1.1.3.17.1.4.65537.3600
.1.3.6.1.4.1.2496.1.1.3.17.1.4.65537.86400
Кол-во сбойных звонков по причине Resource-Unavailable
tpCALLRuFailCallTOT
.1.3.6.1.4.1.2496.1.1.3.17.1.5.65537.900
.1.3.6.1.4.1.2496.1.1.3.17.1.5.65537.3600
.1.3.6.1.4.1.2496.1.1.3.17.1.5.65537.86400
Кол-во сбойных звонков по другим причинам
tpCALLORFailCallTOT
.1.3.6.1.4.1.2496.1.1.3.17.1.6.65537.900
.1.3.6.1.4.1.2496.1.1.3.17.1.6.65537.3600
.1.3.6.1.4.1.2496.1.1.3.17.1.6.65537.86400
Кол-во сбойных звонков по причине перегрузки
tpCALLOLFailCallTOT
.1.3.6.1.4.1.2496.1.1.3.17.1.7.65537.900
.1.3.6.1.4.1.2496.1.1.3.17.1.7.65537.3600
.1.3.6.1.4.1.2496.1.1.3.17.1.7.65537.86400
Кол-во отклоненных звонков
tpCALLRejCallTOT
.1.3.6.1.4.1.2496.1.1.3.17.1.8.65537.900
.1.3.6.1.4.1.2496.1.1.3.17.1.8.65537.3600
.1.3.6.1.4.1.2496.1.1.3.17.1.8.65537.86400
Статистику храним в RRD-базе
rrdtool create pgw_srv.rrd \
--start N --step 900 \
DS:cpu:GAUGE:1800:0:100 \
DS:memory_used:GAUGE:1800:0:262144 \
DS:var_used:GAUGE:1800:0:1016122 \
DS:ciscovar_used:GAUGE:1800:0:14003655 \
DS:ciscospool_used:GAUGE:1800:0:21005490 \
DS:tpCALLSuccCallTOT:GAUGE:1800:0:U \
DS:tpCALLFailCallTOT:GAUGE:1800:0:U \
DS:tpCALLRuFailCallTOT:GAUGE:1800:0:U \
DS:tpCALLORFailCallTOT:GAUGE:1800:0:U \
DS:tpCALLOLFailCallTOT:GAUGE:1800:0:U \
DS:tpCALLRejCallTOT:GAUGE:1800:0:U \
RRA:AVERAGE:0.5:1:600 \
RRA:AVERAGE:0.5:4:1000 \
RRA:AVERAGE:0.5:48:775 \
RRA:AVERAGE:0.5:96:797 \
RRA:MAX:0.5:1:600 \
RRA:MAX:0.5:4:1000 \
RRA:MAX:0.5:48:775 \
RRA:MAX:0.5:96:797
и выдергиваем соответственно (заодно берем загрузку CPU/RAM/HDD):
#!/bin/sh
# rrdupdate.sh
### pgwsrv (CPU/RAM/disk space)
OUT=`/usr/local/bin/snmpget -v1 -Oqv -c <#COMMUNITY_NAME#> <#IP#> \
.1.3.6.1.2.1.25.3.3.1.2.1 .1.3.6.1.2.1.25.2.3.1.6.1 \
.1.3.6.1.2.1.25.2.3.1.6.5 .1.3.6.1.2.1.25.2.3.1.6.9 \
.1.3.6.1.2.1.25.2.3.1.6.10 \
.1.3.6.1.4.1.2496.1.1.3.17.1.3.65537.900 \
.1.3.6.1.4.1.2496.1.1.3.17.1.4.65537.900 \
.1.3.6.1.4.1.2496.1.1.3.17.1.5.65537.900 \
.1.3.6.1.4.1.2496.1.1.3.17.1.6.65537.900 \
.1.3.6.1.4.1.2496.1.1.3.17.1.7.65537.900 \
.1.3.6.1.4.1.2496.1.1.3.17.1.8.65537.900`
FORM=`printf ":%d" $OUT`
rrdupdate pgw_srv.rrd N$FORM
генерируем красивые картинки:
#!/bin/sh
# vis.sh
...
rrdtool graph calls-day.png \
--start -86400 \
--lower-limit 0 \
--vertical-label "Calls, counts" \
--title "Calls Processing" \
DEF:calls=pgw_srv.rrd:tpCALLSuccCallTOT:AVERAGE \
LINE1:calls#23FF23:"Calls processed:" \
GPRINT:calls:LAST:"%.0lf" \
> /dev/null
rrdtool graph failedcalls-day.png \
--start -86400 \
--lower-limit 0 \
--vertical-label "Calls, counts" \
--title "Call Processing" \
DEF:FailCall=pgw_srv.rrd:tpCALLFailCallTOT:AVERAGE \
DEF:RuFailCall=pgw_srv.rrd:tpCALLRuFailCallTOT:AVERAGE \
DEF:ORFailCall=pgw_srv.rrd:tpCALLORFailCallTOT:AVERAGE \
DEF:OLFailCall=pgw_srv.rrd:tpCALLOLFailCallTOT:AVERAGE \
DEF:RejCall=pgw_srv.rrd:tpCALLRejCallTOT:AVERAGE \
LINE1:FailCall#FF0000:"Calls failed:" \
GPRINT:FailCall:LAST:"%.0lf" \
LINE1:RuFailCall#FF0000:"Resource-unavailable:" \
GPRINT:FailCall:LAST:"%.0lf" \
LINE1:ORFailCall#FF0000:"Other reasons:" \
GPRINT:ORFailCall:LAST:"%.0lf" \
LINE1:OLFailCall#FF0000:"Overloaded:" \
GPRINT:OLFailCall:LAST:"%.0lf" \
LINE1:RejCall#FF0000:"Rejected:" \
GPRINT:RejCall:LAST:"%.0lf" \
> /dev/null
Для получения актуального значения звонков (активных в каждый момент
времени) использовал костыли в виде shell-скриптов.
Общий смысл такой: на MGC по cron'у запускается скрипт, запускает mml
с подготовленным пакетным файлом, весь вывод направляется в
/tmp/callstat, затем узел мониторинга также по cron'у, но с разбежкой
в 1 минуту (относительно cron'а на MGC) wget'ом выдергивает
/tmp/callstat и прогоняет через grep/awk с целью выдернуть значение
"Current in progress calls = X", полученное X записывается в RRD
базу.Дальше тривиально генерируем картинки, смешивая данные от SNMP и
полученные разбором вывода mml.