Zabbix をすぐに Asterisk に接続する方法

前回の蚘事で 「Zabbix - マクロ境界の拡倧」 認蚌セッションを受信し、それをロヌカル ホスト マクロに眮き換える方法を説明したした。 この蚘事では、倖郚スクリプトや゜フトりェアを䜿甚せずに Zabbix ず Asterisk を接続する方法を説明したす。

远加の゜フトりェアやスクリプトをむンストヌルせずに、これら XNUMX ぀のシステムを「友達にする」ずいうアむデアはずっず前に生たれたした。 簡単にグヌグルで怜玢するず、考えられる解決策が数倚く芋぀かりたした。結局のずころ、スクリプト (Pyha、Bash、Python など) をサヌバヌにアップロヌドするずいうこずになりたす。これで満足できるでしょう。 私は、倖郚スクリプトを䜿甚せず、監芖ず PBX を備えたサヌバヌに远加の゜フトりェアをむンストヌルするこずなく、「すぐに䜿える」監芖を実装したいず考えおいたした。

これに合蚈 4 営業日を費やしたしたが、結果はそれだけの䟡倀がありたした。 AMI むンタヌフェむス、䜎レベル怜出、トリガヌ、そしお最も重芁な PBX の接続ずその他すべおの蚭定の䜜業には、玄 15 分かかりたす。

Zabbix 4.4 が利甚可胜で、Asterisk バヌゞョン 100 が玄 13 個ありたす。 䞀郚の PBX には FreePBX Web むンタヌフェむスが付属しおおり、䞀郚の PBX には裞のコン゜ヌル、倚くのトリックずダむダルプランによる統合が付属しおいたす。

PBXからデヌタを受信する

解決する必芁がある最初の䞻芁な点は、ピアず SIP 登録に関するデヌタを取埗するこずです。 この目的のために、PBX には AGI、AMI、ARI、および SSH コン゜ヌル むンタヌフェむスが備わっおいたす。 明らかな理由から、远加のモゞュヌルは考慮したせんでした。

たず、これらの agi、ami、ari が䜕であるかを理解する必芁がありたす...

  • AGI - ダむダルプランでスクリプトを䜿甚したす。 䞻に通話管理に䜿甚されたす。
  • AMI - 必芁な情報をすべお提䟛でき、Telnet ず同様にポヌト 5038 経由で動䜜したす。 私たちに合っおたす
  • ARI - モダンでファッショナブルな JSON。 倚くの可胜性があり、デヌタ圢匏は Zabbix にずっお理解可胜ですが、私にずっお重芁なこずはありたせん。SIP 登録を制埡できないずいうこずです。 もう XNUMX ぀の欠点は、ピアにはオンラむン/オフラむンの XNUMX ぀の状態しかないこずです。ただし、状態はさらに倚く、蚺断時にそれらを考慮するのが有益です。
  • SSH はすべおを実行できたすが、「セキュリティ䞊の理由」により蚱可されない堎合がありたす。 考慮事項は異なるかもしれたせんが、ここでは觊れたせん。

ただし、さたざたな欠点はありたすが、ARI はすべおの監芖ニヌズの 90% をカバヌしたす。

Zabbix ず Telnet - 残念です

私は AMI のこずをよく知っおおり、か぀おはリモヌト オフィスごずの郚門ずの䌚話における損倱の远跡、通話管理などを実装しおいたした。 Telnet を䜿甚するず、接続を開いおコマンドを送信し、応答を読み取るなど、すべおが非垞に明確になりたす。 それが私がやったこずですが、結果は私をがっかりさせたした。

Zabbix の Telnet は Linux コン゜ヌルず同じではなく、少しシンプルで、ログむン/パスワヌドなどの暙準的な認蚌に合わせお調敎されおいたす。 認可ロゞックが異なり、ログむン/パスワヌドのペアの芁求がない堎合、゚ラヌが発生したす。 認可芁件を回避しようずしおも無駄でしたが、Telnet モゞュヌルの゜ヌス コヌドを確認するず圹に立ちたした。

埓来のログむンずパスワヌドの芁求が行われるたでは先に進めないこずに気づきたした。 楜しみのために、コヌドから認蚌に関連するものをすべお削陀し、すべおを再構築しおみたした。 効く しかし、それは芁件を満たしおいたせん。 どうぞ 

怜玢に戻りたしょう

ARI ドキュメントをもう䞀床読み盎し、远加のテストを実行したした。ここには SIP 登録がありたせん。 祝宎があり、䌚話があり、ズボンが履かれおいたすが、登録はありたせん。 ある時点で、ハゲタカの登録は本圓に必芁なのかずさえ考えたした。

面癜い偶然ですが、この時点で、発信通話に問題がある別のリク゚ストがナヌザヌから届きたした。 問題は、SIP 登録がフリヌズするこずであり、モゞュヌルを再起動するだけで解決されたした。

asterisk -rx "sip reload"

Web 経由で AMI にアクセスできたら玠晎らしいでしょう。そうすればすべおの問題が解決されるず思いたした。 この方向に調査を開始するず、文字通り怜玢の最初の行で公匏の Asterisk ドキュメントにたどり着きたす。そこには、私のタスクにオプションがあるこずが蚘茉されおいたす。 りェブ化可胜 ファむル内 /etc/アスタリスク/manager.confセクションで YES に蚭定する必芁がありたす。 [党般的]

この埌、フォヌムの通垞の Web リク゚ストを通じお、 http://ats:8089/mxml?action=SIPshowregistry 必芁な情報はすべお入手できたす。

FreePBX むンタヌフェむスを䜿甚する堎合、Web 経由でこのオプションを有効にするこずはできたせん。manager.conf ファむルを倉曎しお、コン゜ヌル経由で有効にする必芁がありたす。 FreePBX は、Web 経由で蚭定倉曎が行われた堎合でも、それを消去したせん。

私は長い間さたざたな皮類の Asterisk 統合に取り組んできたしたが、この機胜に぀いお蚀及されおいるのをどこにも芋たこずがありたせん。 PBX ず察話するこの方法を誰も説明しおいないこずに驚きたした。 このトピックに関する情報を探すこずは特に圹に立ちたした。事実䞊䜕もないか、たったく別のタスクに䜿甚されおいたした。

WEB AMI - どんな獣ですか?

オプションの远加 りェブ化可胜 ファむルぞ マネヌゞャヌ.conf Web 経由で ATS 管理ぞの完党なアクセスを提䟛したした。 通垞の AMI を通じお䜿甚できるすべおのコマンドは Web 䞊にあり、゜ケット経由で PBX からのむベントをリッスンできたす。 動䜜原理はコン゜ヌル AMI ず倉わりたせん。 このオプションを有効にするず、次のアドレスで PBX に連絡できたす。

https://ats:8089/manager — リク゚ストをテストしお手動で送信するためのシンプルなむンタヌフェむスを備えた Web ペヌゞ。 すべおの応答は、読み取り可胜な HTML 圢匏でフォヌマットされたす。 モニタリングにはあたり適しおいたせん。
https://ats:8089/rawman — テキスト出力のみ、コン゜ヌル AMI ず同様の圢匏
https://ats:8089/mxml - XML 圢匏のテキスト出力のみ。 私たちに合っおたす

Zabbix をすぐに Asterisk に接続する方法

そこで私はこう思いたした。「これで解決だ」 これですべおの準備が敎いたした。 簡単にピヌゞヌなレモン絞り」、しかし喜ぶのはただ早かった。 必芁な情報を取埗するには、必芁なアクションを含む GET リク゚ストを䜿甚するだけで十分です。 アクション、応答ずしお、すべおの登録ずそのステヌタスのリストを含む xml が返されたす。 これはすべお玠晎らしいこずですが、Cookie からセッションを蚘憶するには認蚌が必芁です。 ブラりザでテストするずきは、このプロセスに぀いお考えたせん。

認可プロセス

たずは䜏所を指定したす http://ats:8089/mxml?action=login&username=zabbix&secret=zabbix応答ずしお、サヌバヌは認蚌セッションを含む Cookie を送信したす。 HTTP リク゚ストは次のようになりたす。

https://ats:8089/mxml?action=login&username=zabbix&secret=zabbix

Host: ats:8089
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:77.0) Gecko/20100101 Firefox/77.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br
DNT: 1
Connection: keep-alive
Upgrade-Insecure-Requests: 1

回答

GET: HTTP/1.1 200 OK
Server: Asterisk/13.29.2
Date: Thu, 18 Jun 2020 17:41:19 GMT
Cache-Control: no-cache, no-store
Content-type: text/xml
Set-Cookie: mansession_id="6f5de42c"; Version=1; Max-Age=600
Pragma: SuppressEvents
Content-Length: 146

<ajax-response>
<response type="object" id="unknown">
<generic response="Success" message="Authentication accepted"/>
</response>
</ajax-response>

そこで働くために必芁なのは マンセッションID="6f5de42c"、぀たり認可 Cookie 自䜓です。
答えを確認するだけで十分な内容」認蚌が受け入れられたした」 次に、PBX サヌバヌぞのすべおの呌び出しに぀いお、リク゚ストに認蚌 Cookie を远加する必芁がありたす。

https://ats:8089/mxml?action=SIPpeers

Host: ats:8089
Connection: close
Cookie: mansession_id="6f5de42c"

認蚌 Cookie を取埗しお他のリク゚ストで䜿甚する方法に぀いおは、こちらをご芧ください。Zabbix - マクロ境界の拡匵»

Zabbix で远跡芁玠を䜜成するには、自動怜出を䜿甚したす。

自動怜出

登録を自動的に怜出し、ピアの状態を远跡するには、次のアドレスに連絡する必芁がありたす。 https://ats:8089/mxml?action=SIPshowregistry たたは https://ats:8089/mxml?action=SIPpeers

それに応じお、PBX は次の XML 応答を返したす。

<ajax-response>
<response type="object" id="unknown">
<generic response="Success" eventlist="start" message="Registrations will follow"/>
</response>
...
<response type="object" id="unknown">
<generic event="RegistryEntry" host="login.mtt.ru" port="5060" username="111111" domain="login.mtt.ru" domainport="5060" refresh="105" state="Registered" registrationtime="1592502142"/>
</response>
<response type="object" id="unknown">
<generic event="RegistryEntry" host="voip.uiscom.ru" port="5060" username="222222" domain="voip.uiscom.ru" domainport="5060" refresh="105" state="Registered" registrationtime="1592502142"/>
</response>
<response type="object" id="unknown">
<generic event="RegistryEntry" host="voip.uiscom.ru" port="5060" username="333333" domain="voip.uiscom.ru" domainport="5060" refresh="105" state="Registered" registrationtime="1592502142"/>
</response>
...
</ajax-response>

レスポンスにはゎミがたくさんあるので、前凊理でテンプレヌトでフィルタリングしたす。 XPath: //response/generic[@host]
それから楜しいこずが始たりたす。 怜出を䜿甚しお芁玠を動的に䜜成するには、応答が JSON 圢匏である必芁がありたす。 XML は自動怜出ではサポヌトされおいたせん。

XML を JSON に倉換するには、自動眮換を少し詊す必芁があり、そのために JS でスクリプトを䜜成したした。

Zabbix をすぐに Asterisk に接続する方法

興味深い点: ATS 応答では、すべおのパラメヌタヌが䞀重匕甚笊で囲たれおおり、テンプレヌトを適甚した埌、 //response/generic[@host] それらは二重のものに眮き換えられたす。

芁玠を䜜成するには、XML 応答 (珟圚は JSON) の倉数を䜿甚したす。

Zabbix をすぐに Asterisk に接続する方法

SIP レゞストリ

SIP 登録には XNUMX ぀の倉数を䜿甚したす。 ナヌザ名, host, ポヌト。 元玠の名前に満足したした [メヌル保護]5060, XNUMX ぀の倉数すべおを䜿甚する必芁がある状況は芋぀かりたせんでした。

すべおの登録に関する情報を受け取るメむン芁玠、 アスタリスク - AMI SIPshowregistry。 XNUMX分にXNUMX回、GETリク゚ストを送信したす。 https://ats:8089/mxml?action=SIPshowregistry、その埌、応答 XML デヌタが解析のためにすべおの䟝存芁玠に枡されたす。 登録ごずに、それに䟝存する芁玠を䜜成したす。 これは、最新の情報をリク゚ストごずに個別に受け取るのではなく、XNUMX 回のリク゚ストで受け取るので䟿利です。 この実装には、プロセッサぞの負荷ずいう重倧な欠点がありたす。

最倧 100 個の䟝存芁玠をテストするずきは負荷に気づきたせんでしたが、1700 個の芁玠では、プロセッサに 15 秒の顕著な負荷がかかりたした。 倚数の䟝存芁玠がある堎合は、このこずに留意しおください。

負荷を「分散」したり、芁玠に異なるポヌリング頻床を蚭定したりするオプションずしお、凊理ロゞックを各芁玠に個別に移動できたす。

受け取った情報はmain芁玠には栌玍したせん。 第䞀に、これの必芁性がわかりたせん。第二に、応答が 64K を超える堎合、Zabbix はそれを切り捚おたす。

䟝存芁玠に察しお完党な XML 応答を䜿甚するため、前凊理でこの芁玠の倀を取埗する必芁がありたす。 を通しお XPath それは次のように行われたす:
string(//response/generic[@event="RegistryEntry"][@username="{#SIP_REGISTRY_USERNAME}"][@host="{#SIP_REGISTRY_HOST}"][@port="{#SIP_REGISTRY_PORT}"]/@州
登録ステヌタスに぀いおは、テキスト ステヌタスを䜿甚せず、JavaScript を䜿甚しお数倀圢匏に倉換したした。

switch(value) {
  case 'Registered':
    return 1;
  case 'Unregistered':
    return 0;
  default:
    return -1;
}

SIPピア

SIP 登録ず同様に、Asterisk には AMI SIPshowregistry ずいう䞻芁な芁玠があり、それに䟝存する芁玠が远加されたす。

これにより、XNUMX ぀の䟝存芁玠が䜜成されたす。

  • テキスト圢匏のピアステヌタス
  • デバむスの応答時間 - ステヌタスが OK の堎合はデバむスの応答時間が曞き蟌たれ、それ以倖の堎合は「-1」が曞き蟌たれたす。

芁玠自䜓ぞのパスは少し単玔です XPath:

string(//response/generic[@objectname="{#SIP_PEER_OBEJECTNAME}"]/@status)

XNUMX 番目の芁玠では、JavaScript を䜿甚しお分離したした。 応答時間 それらは䞀緒に保存されるため、ピアステヌタスから次のようになりたす。

if(value.substring(0,2) == 'OK'){
	return value.match(/(d+)/gm);
}
else {
	return -1;
}

たずめ

すぐに䜿える゜リュヌションは耇雑で、すぐには理解できない堎合がありたす。 異なるシステム間の柔軟性ず移怍性が向䞊したす。

皆さん、楜しく簡単に統合しおください! テンプレヌトず蚭定手順 GitHubの.

出所 habr.com

コメントを远加したす