原文出處:http://blog.roodo.com/yungchingman/archives/6310411.html
發佈日期: 2008/07/03
版本:Version1
發佈網址:http://blog.roodo.com/yungchingman
作者:羅啟誠
email:kayung@sparqnet.net
文章歡迎轉貼,轉貼時請註名出處。
前言:
應用MRTG 監控網路流量在網路管理裡面是實際簡單的作法,不過今天要談的不是監控網路流量,而是電話交換機(以下通稱PBX)的使用量,筆者在工作內容裡剛好有管理到PBX及網路,所以就利用MRTG作PBX間E1的使用量監控。
PBX早期開始很少是IT的管轄範圍,通常在公司都是屬於總務及行政單位所管理或由廠務來管理,現在PBX慢慢走向IP-PBX,所以只要跟網路扯上關係,PBX這東西大概很難避免會推到IT這邊來管理,IT人員如何監控電話的使用量,筆者目前的作法,希望能對電話管理者有所幫助。
本文適用對象:熟悉Linux及PBX操作設定的IT人員
使用環境:
Alcatel OXE 4400 PBX * 2,透過PRI E1作兩台交換機間的連接
Centos Linux 5.0 + MRTG
MRTG的基本環境設定及用法這邊就不贅述,若MRTG不熟的朋友可參考鳥哥的網站http://linux.vbird.org
一條E1有30個Channel的使用量,所以今天我們要監控兩台PBX間的E1使用量只要監控其中一台的使用量即可,首先需先於PBX上取得我們需要的資訊
1.telnet 登入PBX
輸入帳號密碼,我們可以用以下指令查看E1目前的使用量
PBX>trkstat 0 15 0 -->trkstat 為查看trunk狀態的指令,0 15 0為PBX自定,以我的PBX而言,0 15 0即是連接E1的使用量
下完指令會看到以下的狀態表
+------------------------------------------------------------------------------+
| T R U N K S T A T E - NPRAE Coupler Crystal_nbr = 0 |
| IN SERVICE Coupler Nbr = 15 |
+------------------------------------------------------------------------------+
| Access 0 Type : T2 access : ENABLED level2 : CONNECT2 |
| |
| Trunk Grp 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 |
| Channel 1 2 3 4 5 6 7 8 9 10 11 12 |
| State F F F B F B F F B F F F |
| |
| Trunk Grp 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 |
| Channel 13 14 15 17 18 19 20 21 22 23 24 25 |
| State F F F F F F F F F F F F |
| |
| Trunk Grp 2000 2000 2000 2000 2000 2000 |
| Channel 26 27 28 29 30 31 |
| State F B F F B F |
+------------------------------------------------------------------------------+
| F: Free | B: Busy | Ct: busy Comp trunk | Cl: busy Comp link |
要注意的地方是State這個地方,有B表示Busy,也就使用中,我們就是要把B的數量抓出來,這樣就能知道它的使用量,知道原理後,我們開始將呈現的結果導向文字檔並作加工處理
PBX>trkstat 0 15 0 > 1.txt
將結果導向1.txt檔案
接下來將1.txt加工只列出State這三行
PBX>grep '| State' 1.txt > 2.txt
2.txt的內容會顯示成這樣
PBX>cat 2.txt
| State F F F F F F F F F F F B |
| State B F F F F F F F F F F F |
| State F F F F F F |
再來再針對2.txt把每一個B跟F列為一行並導到3.txt
PBX>cut -c 20 2.txt > 3.txt
PBX>cut -c 25 2.txt >> 3.txt
PBX>cut -c 30 2.txt >> 3.txt
PBX>cut -c 35 2.txt >> 3.txt
PBX>cut -c 40 2.txt >> 3.txt
PBX>cut -c 45 2.txt >> 3.txt
PBX>cut -c 50 2.txt >> 3.txt
PBX>cut -c 55 2.txt >> 3.txt
PBX>cut -c 60 2.txt >> 3.txt
PBX>cut -c 65 2.txt >> 3.txt
PBX>cut -c 70 2.txt >> 3.txt
PBX>cut -c 75 2.txt >> 3.txt
3.txt的內容會顯示成這樣
PBX>cat 3.txt
F
F
B
F
F
F
F
F
F
F
F
B
F
B
F
F
B
F
F
F
F
B
最後我們把3.txt再作處理算出它的使用量並導到4.txt
PBX>grep -c 'B' 3.txt > 4.txt
4.txt的內容會顯示成這樣
PBX>cat 4.txt
10
所以以上4.txt裡的10這個數字就是E1的使用量,剛剛我們是手動透過telnet到PBX裡作這些動作,實際環境當然要把它自動化
我們在Linux裡建一script作自動telnet並執行指令
script內容如下:
#!/usr/bin/expect
#PBX的IP
spawn telnet 192.168.1.99
#PBX的帳號與密碼
expect xxxx
send "xxxx\n"
expect zzzzzz
send "zzzzzz\n"
send "\n"
send "\n"
send "\n"
#E1使用量
expect trkstat
send "trkstat 0 15 0 > 1.txt\n"
send "\n"
expect grep
send "grep '| State' 1.txt > 2.txt\n"
expect cut
send "cut -c 20 2.txt > 3.txt\n"
send "cut -c 25 2.txt >> 3.txt\n"
send "cut -c 30 2.txt >> 3.txt\n"
send "cut -c 35 2.txt >> 3.txt\n"
send "cut -c 40 2.txt >> 3.txt\n"
send "cut -c 45 2.txt >> 3.txt\n"
send "cut -c 50 2.txt >> 3.txt\n"
send "cut -c 55 2.txt >> 3.txt\n"
send "cut -c 60 2.txt >> 3.txt\n"
send "cut -c 65 2.txt >> 3.txt\n"
send "cut -c 70 2.txt >> 3.txt\n"
send "cut -c 75 2.txt >> 3.txt\n"
send "grep -c 'B' 3.txt > 4.txt\n"
expect exit
send "exit\n"
我們將它命名為getPBXinfo.sh,剛所作是從Linux自動telnet至PBX,所以資料都還是留在PBX上面,我們需從linux上將PBX上的資料抓下來,所以我們寫一個自動執行檔,在前一個指令把PBX資料作完處理後,抓到linux本地端,此方式是利用ftp的方式將4.txt抓下來
執行檔內容
open 192.168.1.99
user mtcl 123456
get 4.txt /PBXdetect/4.txt
bye
將它命名為ftpdata.sh
以後只要執行cat ftpdata.sh |ftp -n 即可抓下PBX上的4.txt
接下來我們將getPBXinfo.sh和ftpdata.sh作連貫
編輯一script檔
#!/bin/bash
/PBXdetect/getPBXinfo.sh
cat /PBXdetect/ftpdata.sh | ftp -n
命名為info.sh
如此只要執行info.sh即可在linux本地端得到我們要的資料4.txt
再來需要設定MRTG的部分
在/etc/mrtg/下新增一mrtg的設定檔,命名為mrtg.cfg.PBX,內容如下:
以上其中重點部分
Target[index]: `/PBXdetect/info1.sh`
MRTG所要的資料來源,一般有四個值,分別為設備名稱,開機時間,輸入流量,輸出流量,因為我們只要看E1使用量部分,所以實際只要給MRTG兩個值,就是輸入流量與輸出流量,語音E1只有使用量,所以只要同樣的值輸出兩次給MRTG即可,如何得到使用量,我們可以就針對前面從PBX上抓下來的4.txt作輸出即可,info1.sh即為輸出指令,內容為
#!/bin/bash
use=`cat /PBXdetect/4.txt`
echo $use
echo $use
rm -f /PBXdetect/4.txt
此指令透過mrtg每五分鐘執行完輸出使用量後,需移除4.txt,以便下次得到新的使用量
MaxBytes[index]: 30
最大的使用量,一條E1最大為30 Channel,所以此參數設為30
其他參數都是使用文字部分,這個看個人實際環境輸入
接下來再整合MRTG的部分
編輯一script檔,命名為PBX2.sh,內容為
#!/bin/bash
mrtg /etc/mrtg/mrtg.cfg.PBX
indexmaker --columns=1 --output=/var/www/mrtg/index.PBX.html --title "Alcatel PBX E1 Trunk use" /etc/mrtg/mrtg.cfg.PBX
此指令為要產生mrtg圖表及作index處理
最後就是使用crond讓它自動執行了
輯編/etc/crontab
加入這一行
*/5 * * * * root /PBXdetect/info.sh;/etc/mrtg/PBX2.sh
結論
IT人員一般在電信領域著墨不多,至少我認識的人很少懂這部分偏偏它的重要性不下於網路,網路流量有很多工具可以監控,電信使用量在這部分很有限,很多還是要靠自己寫工具來作,希望以上的文件能提供電信管理者更有效的管理。
===
留言列表