script monitor sip trunk

Asterisk Opensource IP Pbx

script monitor sip trunk

โพสต์โดย smartsoft » 20 เม.ย. 2010 09:13

คือ อยากทราบว่า พอมีวิธีหรือ Script
ในการเช็คว่า เครื่อง SIP Server ของเราสามารถ register กับทาง SIP Trunk ได้อยู่หรือป่าวครับ

แบบเช็คได้ทั้ง IP Authentication กับ Username/Password ครับ ขอบคุณครับ
smartsoft
Gold Member
 
โพสต์: 80
ลงทะเบียนเมื่อ: 11 มี.ค. 2010 09:44

Re: script monitor sip trunk

โพสต์โดย nuiz » 20 เม.ย. 2010 11:54

โปรแกรม MonAst น่าจะพอใช้งานได้นะครับ ผมเอาไว้มอนิเตอร์ User และ Trunk โดยเฉพาะ Trunk มีแสดงสถานะด้วยว่า Registered/UnRegistered
** หากมีปัญหากับอุปกรณ์ที่ซื้อมาเองหรือบริการที่ทำขึ้นมาเอง ให้โพสต์ถามในเว็บบอร์ดนี้นะครับ **
** งานเร่งด่วนติดต่อว่าจ้างที่เบอร์ 08-5161-9439 อีเมล์ iamaladin@gmail.com ไลน์ NuizVoip ครับ **
nuiz
Diamond Member
 
โพสต์: 7058
ลงทะเบียนเมื่อ: 24 มี.ค. 2010 09:33

Re: script monitor sip trunk

โพสต์โดย smartsoft » 20 เม.ย. 2010 22:32

nuiz เขียน:โปรแกรม MonAst น่าจะพอใช้งานได้นะครับ ผมเอาไว้มอนิเตอร์ User และ Trunk โดยเฉพาะ Trunk มีแสดงสถานะด้วยว่า Registered/UnRegistered


ผมอยากได้ประมาณว่า ไม่ต้องให้คนมานั่ง monitor หน่ะครับ อยากให้มันทำการ monitor ตาม schedule หรือ cronjob ที่เรากำหนดเอาไว้หน่ะครับ
ถ้า check แล้วพบว่า ไม่สามารถ register ก็ให้ alert ผ่าน เมล์ หน่ะครับ

ผมได้ไป search หาตัวอย่างแล้ว ส่วนใหญ่ จะเจอ แบบที่ว่า check sip trunk แบบ username/password ครับ
ยังหาวิธี check แบบ authen ผ่าน ip address ไม่ได้เลย ครับ
หรือว่า มี command อะไร บน asterisk หรือป่าว ครับ ที่จะสามารถ ดูได้ว่า sip trunk แบบ authentication (ip address) register ได้หรือไม่ครับ
ขอบคุณครับ
smartsoft
Gold Member
 
โพสต์: 80
ลงทะเบียนเมื่อ: 11 มี.ค. 2010 09:44

Re: script monitor sip trunk

โพสต์โดย nuiz » 21 เม.ย. 2010 00:21

สำหรับ SIP Trunk แบบไม่รีจิสเตอร์ เวลาเราเช็คด้วยคำสั่ง sip show registy ก็จะไม่เห็นครับ แต่เช็คด้วย sip show peers ก็จะมองเห็น และถ้าตอนคอนฟิก SIP Trunk นั้นใส่บรรทัด qualify=yes เข้าไปด้วย ก็จะมองเห็นคอลัมน์ Status ที่แสดงเวลาหน่วง (Rount Tip Time) ด้วย แต่นั่นก็เช็คได้แค่ว่า SIP Trunk นั้นตายหรือไม่ตาย (ลิ้งค์ดาวน์ เซอร์เวอร์เจ้ง อันนี้รู้ แต่ปัญหาอื่นๆบอกไม่ได้) แม้ว่าจะโชว์เวลา Status แต่ก็ไม่ได้บ่งบอกว่าเวลาโทรออกจะได้หรือไม่ได้ อย่างในกรณี Account ของเราเงินหมดมันก็จะโทรออกไม่ได้

สำหรับ SIP Trunk แบบไม่รีจิสเตอร์ (หรือแบบ Register ก็ตาม) ต้องมอนิเตอร์ค่า ASR (Answer Seizured Ratio) หรือไม่ก็ค่า ACD (Average Call Duration) หรือค่า ALoC (Average Length Of Call) ของ SIP Trunk นั้นครับ ว่าต่ำกว่าที่กำหนดไว้หรือเปล่า

ใน A2Billing มีฟีเจอร์อย่างว่านี้อยู่ ลองแกะๆดูครับ อยู่ในเมนู Maintenance -> Alarm ถ้าค่าต่ำกว่าที่กำหนด มันจะส่งเมล์แจ้ง มันส่งได้จริงๆนะครับ ลองแล้ว

แกะได้แล้ว เอาโค๊ดมาฝากด้วยนะครับ
** หากมีปัญหากับอุปกรณ์ที่ซื้อมาเองหรือบริการที่ทำขึ้นมาเอง ให้โพสต์ถามในเว็บบอร์ดนี้นะครับ **
** งานเร่งด่วนติดต่อว่าจ้างที่เบอร์ 08-5161-9439 อีเมล์ iamaladin@gmail.com ไลน์ NuizVoip ครับ **
nuiz
Diamond Member
 
โพสต์: 7058
ลงทะเบียนเมื่อ: 24 มี.ค. 2010 09:33

Re: script monitor sip trunk

โพสต์โดย smartsoft » 21 เม.ย. 2010 11:42

nuiz เขียน:สำหรับ SIP Trunk แบบไม่รีจิสเตอร์ เวลาเราเช็คด้วยคำสั่ง sip show registy ก็จะไม่เห็นครับ แต่เช็คด้วย sip show peers ก็จะมองเห็น และถ้าตอนคอนฟิก SIP Trunk นั้นใส่บรรทัด qualify=yes เข้าไปด้วย ก็จะมองเห็นคอลัมน์ Status ที่แสดงเวลาหน่วง (Rount Tip Time) ด้วย แต่นั่นก็เช็คได้แค่ว่า SIP Trunk นั้นตายหรือไม่ตาย (ลิ้งค์ดาวน์ เซอร์เวอร์เจ้ง อันนี้รู้ แต่ปัญหาอื่นๆบอกไม่ได้) แม้ว่าจะโชว์เวลา Status แต่ก็ไม่ได้บ่งบอกว่าเวลาโทรออกจะได้หรือไม่ได้ อย่างในกรณี Account ของเราเงินหมดมันก็จะโทรออกไม่ได้

สำหรับ SIP Trunk แบบไม่รีจิสเตอร์ (หรือแบบ Register ก็ตาม) ต้องมอนิเตอร์ค่า ASR (Answer Seizured Ratio) หรือไม่ก็ค่า ACD (Average Call Duration) หรือค่า ALoC (Average Length Of Call) ของ SIP Trunk นั้นครับ ว่าต่ำกว่าที่กำหนดไว้หรือเปล่า

ใน A2Billing มีฟีเจอร์อย่างว่านี้อยู่ ลองแกะๆดูครับ อยู่ในเมนู Maintenance -> Alarm ถ้าค่าต่ำกว่าที่กำหนด มันจะส่งเมล์แจ้ง มันส่งได้จริงๆนะครับ ลองแล้ว

แกะได้แล้ว เอาโค๊ดมาฝากด้วยนะครับ



อันนี้เป็น script สำหรับ monitor sip trunk แบบ authentication ผ่าน username/password น่ะครับ
ให้เอา script นี้ไปรันบนเครื่องที่ติดตั้ง และทำการ run asterisk ที่ใช้งานจริงอยู่น่ะครับ
ส่วนแบบ monitor sip trunk แบบ ip นี้ขอเวลา งม ก่อนถ้าได้ยังไงจะเอามาฝากอีกครับ

โค้ด: เลือกทั้งหมด
#!/usr/bin/php

<?

$form = "name@domain.com";
$report_email = 'contact@domain.com';


$state = wots_up();
//echo "Status : [$state]\n";


if ($state == 'ok')
{
        //grace, usually should go this route
        exit;
}
else
{
        //keep cool for 10 seconds, we try again.
        sleep(10);
        $state = wots_up();
        $have_done = "We have retried in 10 seconds.\r\n";
}

if ($state == 'ok')
{
        //lucky we tried
        exit;
}
else
{
        $have_done .= "Trying to reload the sip channels.\r\n";
        $have_done .= shell_exec('/usr/sbin/asterisk -rx "module reload chan_sip"');
        sleep(10);
        $have_done .= "Reloaded sip channels and waited 10 seconds.\r\n";
        $state = wots_up();
}
if ($state == 'ok')
{
        //wipes the sweat
        exit;
}

$status = "$have_done\r\n=====================have done above, the current status: =====================\r\n\r\n$status";
$status = str_replace("\n",'<br>',$status);
if($state=='requesting'){
  $msg_err = 'Request Sent';
}elseif($state=='no_auth'){
  $msg_err = 'No Authentication';
}elseif($state=='unregistered'){
  $msg_err = 'Unregistered';
}elseif($state=='failed'){
  $msg_err = 'Failed';
}elseif($state=='auth_sent'){
  $msg_err = 'Auth. Sent';
}elseif($state=='rejected'){
  $msg_err = 'Rejected';
}elseif($state=='timeout'){
  $msg_err = 'Timeout';
}elseif($state=='unknown'){
  $msg_err = 'Unknown';
}




$err = array("Request Sent","No Authentication","Unregistered","Failed","Auth. Sent","Rejected","Timeout","Unknown");
$status = str_replace($err,"<b style='color:red;'>$msg_err</b>",$status);
if ($state == 'requesting')
{
        send_alert_email('Trunk has been sending registrating requests', $status);
}
elseif ($state == 'empty')
{
        send_alert_email('Voip trunk registration status is empty', $status);
}
elseif ($state == 'no_auth')
{
        send_alert_email('No Authentication is reported, wrong password?', $status);
}
elseif ($state == 'unregistered')
{
        send_alert_email('We have Unregistered trunk', $status);
}
elseif ($state == 'failed')
{
        send_alert_email('We have Registration failed trunk', $status);
}
elseif ($state == 'auth_sent')
{
        send_alert_email('We have trunk with Auth. Sent status', $status);
}
elseif ($state == 'rejected')
{
        send_alert_email('We have trunk with Rejected status', $status);
}
else
{
        send_alert_email('Trunk status is not registered', "$state\r\n\r\n$status");
}

function wots_up()
{
        global $status;

        //Prob the trunk registration.
        $status = shell_exec('/usr/sbin/asterisk -rx "sip show registry"');

        if (strlen(trim($status)) == 0)
        {
                return 'empty';
        }

        $lines = explode("\n", str_replace("\r\n", "\n", trim($status)));


        for ($i = 1; $i < count($lines); $i++)
        {
                echo "line $i : " .  $lines[$i] . "\n";
                if (strpos($lines[$i], 'Request Sent') !== false)
                {
                        return 'requesting';
                }
                elseif(strpos($lines[$i], 'No Authentication') !== false)
                {
                        return 'no_auth';
                }
                elseif(strpos($lines[$i], 'Unregistered') !== false)
                {
                        return 'unregistered';
                }
                elseif (strpos($lines[$i], 'Failed') !== false)
                {
                        return 'failed';
                }
                elseif (strpos($lines[$i], 'Auth. Sent') !== false)
                {
                        return 'auth_sent';
                }
                elseif (strpos($lines[$i], 'Rejected') !== false)
                {
                        return 'rejected';
                }
                elseif (strpos($lines[$i], 'Timeout') !== false)
                {
                        return 'timeout';
                }
                elseif (strpos($lines[$i], 'Unknown') !== false)
                {
                        return 'unknown';
                }

                $temp = preg_split('/\s+/', $lines[$i]);
                if (!isset($temp[3]))
                {
                        return "Can not extract Reg State for this line: " . $lines[$i];
                }
                elseif ($temp[3] <> "Registered")
                {
                        return "Unknown Reg state for this line: " . $lines[$i];
                }
        }
        return 'ok';
}

function send_alert_email($subject, $msg = '')
{
        global $report_email,$from;

        $headers  = 'MIME-Version: 1.0' . "\r\n";
        $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
        $headers .= "X-Priority: 1 (Higuest)\n";
        $headers .= "X-MSMail-Priority: High\n";
        $headers .= "Importance: High\n";
        $headers .= "From: $from\r\n";
        mail($report_email, $subject, $msg, $headers);
}



?>
smartsoft
Gold Member
 
โพสต์: 80
ลงทะเบียนเมื่อ: 11 มี.ค. 2010 09:44

Re: script monitor sip trunk

โพสต์โดย nuiz » 21 เม.ย. 2010 11:59

ขอบคุณครับสำหรับ Script
เฮ้อ ผมไม่เปน php ด้วยดิ ตอนนี้กำลังเปิดหนังสือ perl อ่านอยู่อ่ะครับ หวังว่าถ้าผมเขียน perl script เป็นแล้ว จะมีผลงานออกมาให้เอาไปทดลองใช้กันอ่ะครับ
** หากมีปัญหากับอุปกรณ์ที่ซื้อมาเองหรือบริการที่ทำขึ้นมาเอง ให้โพสต์ถามในเว็บบอร์ดนี้นะครับ **
** งานเร่งด่วนติดต่อว่าจ้างที่เบอร์ 08-5161-9439 อีเมล์ iamaladin@gmail.com ไลน์ NuizVoip ครับ **
nuiz
Diamond Member
 
โพสต์: 7058
ลงทะเบียนเมื่อ: 24 มี.ค. 2010 09:33

Re: script monitor sip trunk

โพสต์โดย smartsoft » 21 เม.ย. 2010 14:24

nuiz เขียน:สำหรับ SIP Trunk แบบไม่รีจิสเตอร์ เวลาเราเช็คด้วยคำสั่ง sip show registy ก็จะไม่เห็นครับ แต่เช็คด้วย sip show peers ก็จะมองเห็น และถ้าตอนคอนฟิก SIP Trunk นั้นใส่บรรทัด qualify=yes เข้าไปด้วย ก็จะมองเห็นคอลัมน์ Status ที่แสดงเวลาหน่วง (Rount Tip Time) ด้วย แต่นั่นก็เช็คได้แค่ว่า SIP Trunk นั้นตายหรือไม่ตาย (ลิ้งค์ดาวน์ เซอร์เวอร์เจ้ง อันนี้รู้ แต่ปัญหาอื่นๆบอกไม่ได้) แม้ว่าจะโชว์เวลา Status แต่ก็ไม่ได้บ่งบอกว่าเวลาโทรออกจะได้หรือไม่ได้ อย่างในกรณี Account ของเราเงินหมดมันก็จะโทรออกไม่ได้

สำหรับ SIP Trunk แบบไม่รีจิสเตอร์ (หรือแบบ Register ก็ตาม) ต้องมอนิเตอร์ค่า ASR (Answer Seizured Ratio) หรือไม่ก็ค่า ACD (Average Call Duration) หรือค่า ALoC (Average Length Of Call) ของ SIP Trunk นั้นครับ ว่าต่ำกว่าที่กำหนดไว้หรือเปล่า

ใน A2Billing มีฟีเจอร์อย่างว่านี้อยู่ ลองแกะๆดูครับ อยู่ในเมนู Maintenance -> Alarm ถ้าค่าต่ำกว่าที่กำหนด มันจะส่งเมล์แจ้ง มันส่งได้จริงๆนะครับ ลองแล้ว

แกะได้แล้ว เอาโค๊ดมาฝากด้วยนะครับ


ผมลองใช้ sip show peer sip_trunk ดูแล้วครับ ผมลองใส่ username หรือ password ผิดๆ ดู
status มันก็ฟ้องว่า ok อยู่ดีแหล่ะครับ ?

*sip_trunk = account_sip_trunk
smartsoft
Gold Member
 
โพสต์: 80
ลงทะเบียนเมื่อ: 11 มี.ค. 2010 09:44

Re: script monitor sip trunk

โพสต์โดย nuiz » 21 เม.ย. 2010 14:57

คอลั่มน์ Status เวลาเราใช้คำสั่ง sip show peers หน่ะครับ มันได้จากการส่ง OPTIONS ออกไป แล้วมี REPLY กลับมา (จะ REPLY กลับมาอีท่าไหนนั้นมันไม่สนใจครับ สนใจว่าได้กลับมาหรือเปล่า) แล้วคำนวณเวลานับแต่ส่ง OPTIONS จนได้ REPLY กลับมา เหมือนกับที่เราใช้คำสั่ง ping นั่นแหล่ะครับ

Status เกิดขึ้นได้เพราะเราใส่บรรทัด qualify=yes (หรือตัวเลข) ไว้ในตอนที่เราสร้าง SIP Trunk ครับ ถ้าเราคอมเมนต์บรรทัดนี้ไว้ คอลัมน์ Status จะกลายเป็น Unmonitored หน่ะครับ

ไม่เกี่ยวอะไรกับ Register ครับ

และสถานะ Status นี้มันใช้มอนิเตอร์ SIP Trunk ว่ายังทำงานอยู่เหรือเปล่า (หรือว่าดาวน์ไปแล้ว) ก็อาจจะใช้ Status นี้เช็คว่าดาวน์หรือไม่ดาวน์ก็ได้ครับ แต่ถึงแม้ว่าจะไม่ดาวน์ก็ไม่ได้บ่งบอกว่ามันจะใช้งานได้ อย่างเช่นกรณีของ True NetTalk ตอนนี้บน Server ผม เช็คอะไรก็ดีไปหมดทั้ง sip show registry, sip show peers แต่โทรไม่ออก เพราะ Server ของ True NetTalk เดี้ยงไปซะแล้ว

เช็คจาก Status ก็ดูได้ระดับหนึ่ง แต่ถ้าเช็คจาก ASR, ALOC ร่วมด้วย จะดีมากขึ้นไปอีกครับ

เขียน Script ม่ายเปนครับ เลยช่วยอะไรไม่ได้ กำลังๆๆ
** หากมีปัญหากับอุปกรณ์ที่ซื้อมาเองหรือบริการที่ทำขึ้นมาเอง ให้โพสต์ถามในเว็บบอร์ดนี้นะครับ **
** งานเร่งด่วนติดต่อว่าจ้างที่เบอร์ 08-5161-9439 อีเมล์ iamaladin@gmail.com ไลน์ NuizVoip ครับ **
nuiz
Diamond Member
 
โพสต์: 7058
ลงทะเบียนเมื่อ: 24 มี.ค. 2010 09:33

Re: script monitor sip trunk

โพสต์โดย smartsoft » 21 เม.ย. 2010 15:50

nuiz เขียน:คอลั่มน์ Status เวลาเราใช้คำสั่ง sip show peers หน่ะครับ มันได้จากการส่ง OPTIONS ออกไป แล้วมี REPLY กลับมา (จะ REPLY กลับมาอีท่าไหนนั้นมันไม่สนใจครับ สนใจว่าได้กลับมาหรือเปล่า) แล้วคำนวณเวลานับแต่ส่ง OPTIONS จนได้ REPLY กลับมา เหมือนกับที่เราใช้คำสั่ง ping นั่นแหล่ะครับ

Status เกิดขึ้นได้เพราะเราใส่บรรทัด qualify=yes (หรือตัวเลข) ไว้ในตอนที่เราสร้าง SIP Trunk ครับ ถ้าเราคอมเมนต์บรรทัดนี้ไว้ คอลัมน์ Status จะกลายเป็น Unmonitored หน่ะครับ

ไม่เกี่ยวอะไรกับ Register ครับ

และสถานะ Status นี้มันใช้มอนิเตอร์ SIP Trunk ว่ายังทำงานอยู่เหรือเปล่า (หรือว่าดาวน์ไปแล้ว) ก็อาจจะใช้ Status นี้เช็คว่าดาวน์หรือไม่ดาวน์ก็ได้ครับ แต่ถึงแม้ว่าจะไม่ดาวน์ก็ไม่ได้บ่งบอกว่ามันจะใช้งานได้ อย่างเช่นกรณีของ True NetTalk ตอนนี้บน Server ผม เช็คอะไรก็ดีไปหมดทั้ง sip show registry, sip show peers แต่โทรไม่ออก เพราะ Server ของ True NetTalk เดี้ยงไปซะแล้ว

เช็คจาก Status ก็ดูได้ระดับหนึ่ง แต่ถ้าเช็คจาก ASR, ALOC ร่วมด้วย จะดีมากขึ้นไปอีกครับ

เขียน Script ม่ายเปนครับ เลยช่วยอะไรไม่ได้ กำลังๆๆ


ผมได้ไปแกะ code จาก A2Billing มาแล้วครับ พวก ASR , ALOC นั้น มันจะเก็บค่าจะการโทรที่เราใช้งาน แล้วเอามาคำนวณ เวลา อีกที ครับ ครับ

คือตอนนี้ผมแค่ต้องการอยากทราบวิธี ว่า เราจะรู้ได้ อย่างไร ว่า sip trunk เรา นั้น ยัง connection ได้อยู่ และยัง register ได้ กับ sip trunk ครับ

ส่วนเรื่องโทรได้หรือไม่นั้น เด๋วผมขอไปคิดหาวิธีดูก่อน ว่าพอมีวิธีอื่นอีกไหม ครับ
smartsoft
Gold Member
 
โพสต์: 80
ลงทะเบียนเมื่อ: 11 มี.ค. 2010 09:44

Re: script monitor sip trunk

โพสต์โดย FamouS_Inw » 28 เม.ย. 2010 17:21

ขอถามหน่อยครับ...ถ้าจะเขียน php เพื่อให้แสดงบนหน้าเว็บเพจว่ามีใคร register อยู่กับ Asterisk บ้าง ต้องเขียนยังไงครับ
ผมลองหาดูใน google แล้ว บอกให้ใช้ AGI แต่ผมไม่ค่อยรู้เรื่องอะครับ พึ่งจะเริ่มศึกษาได้ไม่นานครับ ขอโทษด้วยนะครับถ้าไม่ค่อยเกี่ยวกับกระทู้นี้
รบกวนช่วยแนะนำหน่อยครับ...
FamouS_Inw
 
โพสต์: 4
ลงทะเบียนเมื่อ: 09 เม.ย. 2010 17:44

ต่อไป

ย้อนกลับไปยัง Asterisk SIP Server

ผู้ใช้งานขณะนี้

กำลังดูบอร์ดนี้: ไม่มีสมาชิกใหม่ และ บุคคลทั่วไป 14 ท่าน

cron