Zabbix低レベル検出を使用したアスタリスクトランクの監視

まえがき



昨年、私が働いている会社は積極的にIPテレフォニーに切り替え始めました。 これらの目的のために、FreePBXディストリビューションが使用されました。 テレフォニーの経験はほとんどなかったため、多くの問題がありました。 合計で、それぞれ約30トランクの2つのFreePBXサーバーを使用します。 いくつかのトランクはあまりよく動作せず、時々登録を失います。 そのため、ユーザーの前にアイドル状態のテレフォニーを見つけるために、登録のステータスを監視する必要がありました。

ITインフラストラクチャを監視するために、Zabbixを長い間使用しています。 各トランク(つまり約60)のデータ要素を取得するのは、退屈で退屈で面白くないタスクです。 さらに、監視中にトランクのリストを常に監視し、更新する必要があります。 そのため、この監視システムの最も興味深い機能の1つである低レベル検出を使用することが決定されました。 だから何が行われた。



Zabbixサーバーのセットアップ



Zabbixテンプレートの作成


Zabbix Webパネルで、設定->テンプレートに移動し、空のテンプレートを作成します。 たとえば、Asterisk Trunks Discoveryと呼びましょう。 テンプレートの編集に入り、「検出」セクションに進みます。 そこで、2つのディスカバリルールを作成します。1つはasterisk.discovery [ips]キーで、もう1つはasterisk.discovery [trunks]キーで監視し、2つ目は登録を監視します。 これらのキーは発明されており、好きなものを使用できます。主なことは、組み込みのZAbbixキーと重複しないことです。



画像



データ要素のプロトタイピング


各検出ルールについて、データ要素のプロトタイプを作成する必要があります。プロトタイプは実際、各トランクに関するデータを収集します。 asterisk.discovery [trunks]ルールでは、データ項目にasterisk.registryキー[{#TRUNKNAME}]を使用します。 キー名も​​重要ではありません。パラメーター#TRUNKNAMEのみが重要です。 他のすべてが写真に表示されます。



画像



asterisk.discovery [ips]ルールでは、標準のpingテンプレートのデータ要素を使用して、ホスト名をマクロ{#TRUNKIP}に置き換えました。 すべてが写真にはっきりと見えます。



画像



テンプレートを目的のサーバーに添付するためだけに残ります。 これで、Zabbixのセットアップが完了しました。



アスタリスクサーバーを構成する



scripts / usr / scripts用のフォルダを作成します。 トランクtrunk_disc.phpを検出するためのスクリプトと、トランクreg_mon.phpを監視するためのスクリプトをコピーします(そう、それらはphpにあり、急いで走り書きされ、手がまだ完成していないため、あまりにも曲がっています)。 スクリプト自体:

スクリプトtrunk_disc.php
#!/usr/bin/php <?php error_reporting(1); exec("sudo asterisk -rx 'sip show registry'", $tr_list); foreach($tr_list as $line) { $ar_line = null; $ar_line[] = trim(substr($line, 0, 40)); $ar_line[] = trim(substr($line, 47, 19)); $ar_line = array_diff($ar_line, array('')); $ar_line = array_combine(array(0,1), $ar_line); $trunks[] = $ar_line['1']; $ip = explode(":", $ar_line['0']); if (!in_array($ip['0'], $ips)) { $ips[] = $ip['0']; } } $trunks[0] = ''; $ips[0] = ''; $trunks = array_diff($trunks, array('')); $ips = array_diff($ips, array('')); function getJson($items, $name) { $first = 1; print "{\n"; print "\t\"data\":[\n\n"; foreach ($items as $item) { if (!$first) { print "\t,\n" ; $first = 0; } print "\t{\n"; print "\t\t\"{#$name}\":\"$item\"\n"; print "\t},\n"; } print "\n\t]\n"; print "}\n"; } if ($argv[1] == 'trunks') { getJson($trunks, "TRUNKNAME"); } elseif ($argv[1] == 'ips') { getJson($ips, "TRUNKIP"); } else { print "error"; }
      
      







スクリプトreg_mon.php
 #!/usr/bin/php <?php error_reporting(0); $find = "*".$argv[1]."*"; exec("sudo asterisk -rx 'sip show registry'", $tr_list); $filter = preg_grep($find, $tr_list); foreach($filter as $line) { if (preg_match("*Registered*", $line) & preg_match($find, $line)) { exit('1'); } else { exit('0'); } } exit('0')
      
      







Zabbixエージェント設定ファイルで、次を追加します:



 UserParameter=asterisk.registry[*],/usr/scripts/reg_mon.php $1 UserParameter=asterisk.discovery[*], /usr/scripts/trunk_disc.php $1
      
      





そして、Zabbixaエージェントを再起動します。



確認する



操作を確認するには、Zabbixサーバーのコンソールにログインします。 チームを運営する
 zabbix_get -s -k asterisk.discovery[trunks] 
      



{ "data":[ { "{#TRUNKNAME}":"trunk1" }, { "{#TRUNKNAME}":"trunk2" }, { "{#TRUNKNAME}":"trunk3" }, { "{#TRUNKNAME}":"trunk4" }, { "{#TRUNKNAME}":"trunk5" }, { "{#TRUNKNAME}":"trunk5" }, ...






trunk1,trunk2 .. zabbix_get -s -k asterisk.discovery[ips]

:

{ "data":[ { "{#TRUNKIP}":"213.141.252.17" }, { "{#TRUNKIP}":"188.187.255.6" }, { "{#TRUNKIP}":"sip.pctel.ru" }, ...






. , zabbix_get -s -k asterisk.registry[trunk1] 1, 0. , . - Zabbix .





, . , , .. Zabbix . , , . .












zabbix_get -s -k asterisk.discovery[trunks]



{ "data":[ { "{#TRUNKNAME}":"trunk1" }, { "{#TRUNKNAME}":"trunk2" }, { "{#TRUNKNAME}":"trunk3" }, { "{#TRUNKNAME}":"trunk4" }, { "{#TRUNKNAME}":"trunk5" }, { "{#TRUNKNAME}":"trunk5" }, ...






trunk1,trunk2 .. zabbix_get -s -k asterisk.discovery[ips]

:

{ "data":[ { "{#TRUNKIP}":"213.141.252.17" }, { "{#TRUNKIP}":"188.187.255.6" }, { "{#TRUNKIP}":"sip.pctel.ru" }, ...






. , zabbix_get -s -k asterisk.registry[trunk1] 1, 0. , . - Zabbix .





, . , , .. Zabbix . , , . .












 zabbix_get -s -k asterisk.discovery[trunks] 
      



{ "data":[ { "{#TRUNKNAME}":"trunk1" }, { "{#TRUNKNAME}":"trunk2" }, { "{#TRUNKNAME}":"trunk3" }, { "{#TRUNKNAME}":"trunk4" }, { "{#TRUNKNAME}":"trunk5" }, { "{#TRUNKNAME}":"trunk5" }, ...






trunk1,trunk2 .. zabbix_get -s -k asterisk.discovery[ips]

:

{ "data":[ { "{#TRUNKIP}":"213.141.252.17" }, { "{#TRUNKIP}":"188.187.255.6" }, { "{#TRUNKIP}":"sip.pctel.ru" }, ...






. , zabbix_get -s -k asterisk.registry[trunk1] 1, 0. , . - Zabbix .





, . , , .. Zabbix . , , . .












zabbix_get -s -k asterisk.discovery[trunks]



{ "data":[ { "{#TRUNKNAME}":"trunk1" }, { "{#TRUNKNAME}":"trunk2" }, { "{#TRUNKNAME}":"trunk3" }, { "{#TRUNKNAME}":"trunk4" }, { "{#TRUNKNAME}":"trunk5" }, { "{#TRUNKNAME}":"trunk5" }, ...






trunk1,trunk2 .. zabbix_get -s -k asterisk.discovery[ips]

:

{ "data":[ { "{#TRUNKIP}":"213.141.252.17" }, { "{#TRUNKIP}":"188.187.255.6" }, { "{#TRUNKIP}":"sip.pctel.ru" }, ...






. , zabbix_get -s -k asterisk.registry[trunk1] 1, 0. , . - Zabbix .





, . , , .. Zabbix . , , . .












zabbix_get -s -k asterisk.discovery[trunks]



{ "data":[ { "{#TRUNKNAME}":"trunk1" }, { "{#TRUNKNAME}":"trunk2" }, { "{#TRUNKNAME}":"trunk3" }, { "{#TRUNKNAME}":"trunk4" }, { "{#TRUNKNAME}":"trunk5" }, { "{#TRUNKNAME}":"trunk5" }, ...






trunk1,trunk2 .. zabbix_get -s -k asterisk.discovery[ips]

:

{ "data":[ { "{#TRUNKIP}":"213.141.252.17" }, { "{#TRUNKIP}":"188.187.255.6" }, { "{#TRUNKIP}":"sip.pctel.ru" }, ...






. , zabbix_get -s -k asterisk.registry[trunk1] 1, 0. , . - Zabbix .





, . , , .. Zabbix . , , . .












zabbix_get -s -k asterisk.discovery[trunks]



{ "data":[ { "{#TRUNKNAME}":"trunk1" }, { "{#TRUNKNAME}":"trunk2" }, { "{#TRUNKNAME}":"trunk3" }, { "{#TRUNKNAME}":"trunk4" }, { "{#TRUNKNAME}":"trunk5" }, { "{#TRUNKNAME}":"trunk5" }, ...






trunk1,trunk2 .. zabbix_get -s -k asterisk.discovery[ips]

:

{ "data":[ { "{#TRUNKIP}":"213.141.252.17" }, { "{#TRUNKIP}":"188.187.255.6" }, { "{#TRUNKIP}":"sip.pctel.ru" }, ...






. , zabbix_get -s -k asterisk.registry[trunk1] 1, 0. , . - Zabbix .





, . , , .. Zabbix . , , . .















All Articles