![画像](https://habrastorage.org/files/236/257/623/2362576236b546d699222d2d20c35f09.png)
こんにちは、ハブロフスクの住民。
この投稿では、アスタリスクサーバーの監視方法についてお話したいと思います。 もちろん、ハブ上のアスタリスクを監視するためにZabbixを使用することに関する投稿はすでにあります。私たちの意見では、それらに多くの興味深い情報を収集し、多くの必要なものを追加しました。
それの由来-あなたはカットの下で見ることができます。
テレフォニーは、会社の業務における重要なサービスです。 電話インフラストラクチャの展開および構成後の最も重要なタスクは、その監視です。 電話ネットワークの運用責任者にタイムリーに通知することで、会社は膨大な時間とお金を節約でき、電話交換のダウンタイムを最小限に抑えることができます。
最初に、Asteriskサーバーを監視するには、監視するツールを選択する必要があります。 もちろん、ネットワーク上にはサーバーの表面監視を可能にする多数の自己記述スクリプトがありますが、多くの場合、あまり機能的ではなく、Linuxの深い知識が必要であり、当然GUIもありません。
テレフォニーサーバーのステータスを監視するために、Zabbix監視システムを選択しました。 Zabbixは、ホストおよびプロセスを監視するための多数のテンプレートを備えた非常に強力な監視ツールであり、カスタムのものを埋め込むことができます。 Asteriskサーバーが正常に機能するために、監視する必要がある次のコンポーネントを特定し、それらのPythonスクリプトを作成しました。これらはZabbixに移植します。
- CPU、RAM、HDDの使用(グラフ、レポート、通知)
- 各インターフェイスのネットワークトラフィック
- アスタリスクのプロセスとメモリの監視
- mysqlのプロセスおよびメモリ分析
- Apacheのプロセスとメモリの監視
- Fail2banプロセスの追跡
- SIPプロバイダーの登録とステータス
- 各SIPプレーヤー(ピア)のステータス
- アスタリスクの現在の呼び出しの数
- キュー監視
- コールキュートラッキング
- キューエージェントの監視
上記のパラメーターのいずれかで問題が発生した場合、Zabbixは通知(通知オプション:電子メール、jabber、SMSによる通知)をPBX管理者または問題を迅速に解決するための対策を講じる他の責任者に送信します。
Zabbixアーキテクチャには以下が含まれます。
- 監視サーバー自体を直接、データの受信と処理、および警告スクリプトの起動
- データベース
- ウェブインターフェース
- 監視対象サーバーにインストールされたZabbixエージェント。
zabbixエージェントをインストールするプロセスを検討してください。
最初に、サーバーで次の依存関係が満たされる必要があります。
- Python 2.7以降
- python-all-dev
- Zabbix 2.4+
- アスタリスク1.8+
- argparse 1.2.1+
- pexpect 3.3+
- posix-ipc 0.9.9+
- wsgiref 0.1.2+
Zabbixエージェントを直接インストールします。
aptitude install zabbix-agent
Pythonモジュールをインストールして、カスタムZabbixスクリプトを実行します。
aptitude install python-pip python-all-dev pip install argparse pexpect posix-ipc wsgiref
必要なスクリプトをダウンロードします(便宜上、それらをbitbucketで収集しました)。
cd /etc/zabbix/ git clone https://pbxware@bitbucket.org/pbxware/asterisk-zabbix-py.git cd asterisk-zabbix-py
アスタリスクの設定に従ってsettings.pyを変更します。
vim setting.py # coding=utf-8 HOST = "localhost" - , Asterisk PORT = "5038" - AMI manager.conf USERNAME = "zabbix" - AMI PASSWORD = "zabbixpasswordami" - AMI DEFAULT_TIMEOUT = 3 AMI_VERSION = "1.3" - AMI, telnet localhost 5038
/etc/asterisk/manager.conf構成ファイルの最後に次の行を追加します。
[zabbix] ; username from settings.py secret=zabbixpasswordami ; password from settings.py deny=0.0.0.0/0.0.0.0 permit=127.0.0.1/255.255.255.0 read = system,call,log,verbose,agent,user,config,dtmf,reporting,cdr,dialplan write = system,call,agent,user,command,reporting,message allowmultiplelogin = yes displayconnects = no writetimeout = 100
これらの手順を完了したら、アスタリスクを再起動します。
service asterisk restart
次に、zabbixエージェントの設定ファイル/etc/zabbix/zabbix_agentd.confで、一番下に追加します:
Include=/etc/zabbix/asterisk-zabbix-py/userparameter_asterisk.conf
zabbixエージェントを再起動します。
/etc/init.d/zabbix-agent restart
利用可能なチーム:
- チャンネル-CoreShowChannels
- メンバー-SIPメンバー
- peer-SIPピア
- queue-SIPキュー
- レジストリ-SIP登録
パラメータ:
./run.py -aディスカバリー。
./run.py -f <field_name> -pフィールドのパラメーターを返します
./run.py -f <field_name> -p -rフィールド値の正規表現。 (返品グループ1)
./run.py -v詳細
例:
sudo -u zabbix /etc/zabbix/asterisk-zabbix-py/run.py registry -aすべてのSIP登録を返す
sudo -u zabbix /etc/zabbix/asterisk-zabbix-py/run.py peer -aすべてのSIPピアを返す
sudo -u zabbix /etc/zabbix/asterisk-zabbix-py/run.py peer -f Address-IP -p 101 IPアドレスpeer 101を返す
sudo -u zabbix /etc/zabbix/asterisk-zabbix-py/run.py peer -f Status -r "(\ d +)" -p 101 Return Qualify user 101
モジュールの説明
アスタリスクポーリングモジュールは、AMIを介して機能します。
settings.py-モジュール設定
userparameter_asterisk.conf-モジュールに渡されるzabbixコマンドとパラメーター
zasterisk / ami.py-pexpectを使用してAMIに接続します
コマンド/-コマンドを含むフォルダー
このモジュールは汎用的であり、必要なパラメーターがなければ簡単に追加できます。 たとえば、sip-peer 101のコンテキストを取得する必要があります。
sudo -u zabbix /etc/zabbix/asterisk-zabbix-py/run.py peer -f Context -p 101
ユーザーからの応答を取得(コンテキスト名)
または、たとえば、使用されているコーデックを確認します。
sudo -u zabbix /etc/zabbix/asterisk-zabbix-py/run.py peer -f Codecs -p 101
答えが得られます(g722 | ulaw | alaw | g729)
コマンドへの情報のより詳細な出力については、オプション「-v」を追加できます
追加のコマンドが必要な場合は、コマンドのファイルと同様に、IAXピアを監視するiax2.pyなどの独自のコマンドを追加します。
# coding=utf-8 from zasterisk.base import DiscoveryFieldCommand class Command(DiscoveryFieldCommand): help = ''' IAX2 peers ''' def discovery(self, ami): def callback(connect, timeout): events = self.parse_events(connect) return self.create_discovery(events.get("PeerEntry"), "{#USERNAME}", "ObjectName") return ami.execute("IAXpeers", {}, callback) def get_field(self, ami, field_name, param): return ami.execute("IAXpeers", {"Peer": param}, lambda connect, timeout: self.expect_field( connect, field_name, timeout)) def count(self, ami): return 0
その結果、IAXピアのパラメーターを監視できるようになります。
sudo -u zabbix /etc/zabbix/asterisk-zabbix-py/run.py iax2 -v -f IPaddress -p demo
結果:216.207.245.47
結論として、私たちは、監視のために私たちの意見で重要ないくつかのプロセスのみを引用したことに注意したいと思います。 Zabbix用のこのモジュールを使用すると、必要な他のプロセスを監視できます。 このトピックにより、アスタリスクの「寿命」に関する詳細情報が得られ、ダウンタイムを可能な限り最小限に抑えることができます。