PythonからFireBirdに接続し、データベースへの書き込みの事実を監視する

背景


PBXがCDRを書き込む「状態」のアスタリスク11およびFireBird 2.5 DBMSがあります。 まれですが、データベースのレコードが停止することがあります。CDRで何かを見る必要がある場合は、それについて学習します。 レコードがないことを確認した後、アスタリスクを再起動すると、データベース内のレコードが復元されます。 繰り返しますが、CDRから重要な情報を受け取っていないため、CDRへの書き込み/非書き込みの事実を何らかの方法で追跡することにしました。

Zabbix 3を監視システムとして使用するため、FireBirdに接続し、CDRを使用してテーブルへの最後の書き込み時間を確認する単純なPythonスクリプトを作成することに決めました。この時間が30分を超える場合、監視システムはこれについて通知します。

Python 3をインストールする


Asteriskは既に古いCentos 6.8にインストールされるため、最初に新しいPythonをインストールします。

執筆時点で最新のソースをダウンロードします。

wget http://www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz -O /var/tmp/Python-3.6.1.tar.xz 

上記のディレクトリに移動します。

 cd /var/tmp/Python-3.6.1 

私たちは実行します:

 ./configure 

収集するもの:

 make 

インストール:

 make install 

Pythonは/ usr / local / bin / python3ディレクトリにインストールされます

FireBirdと通信するためのPythonライブラリのインストール


FireBirdのバージョンのクライアントライブラリを更新または記録する必要があります。 2.5.5、3.0.2を実行できます。

2.5.5。 既に、libfbclient.so.3.0.2を同じディレクトリ/ usr / lib64に追加し、既存のものと同様にlibfbclient.so.3シンボリックリンクを作成し、libfbclient.soシンボリックリンクをlibfbclient.so.3を指す同じシンボリックリンクに置き換えます。 。

python 3.6.1の最新バージョンのPipはすでに利用可能で、python3-pip3と同様に呼び出されます。
LinuxでFireBirdを操作するためのライブラリをインストールします。

 pip install fdb 

FireBirdに接続し、CDRのレコードの有無の結果を取得するスクリプト


 #!/usr/local/bin/python3 #       cdr   import fdb from datetime import timedelta, datetime #  con = fdb.connect(dsn='192.168.7.15:e:/path/db_asterisk.fdb', user='user', password='password') #   cur = con.cursor() #   dt = (datetime.now() - timedelta(minutes=30)).replace(microsecond=0) cur.execute("select iif(exists(select * from cdr c where c.calldate > '" + str(dt) + "'), 1, 0) from rdb$database") # cur.fetchall()    .    ; +   print(str(cur.fetchall()[0][0])) 

もちろん、接続文字列では、データ(IP、パス、ログイン、パスワード)を示します。

Zabbixサーバー


この記事は、監視システムの使用方法を教えることを目的としていないため、ここではプロセスを理解するためにすべてが簡潔に説明されています。

アスタリスクを使用してノードに新しいデータ項目を作成します。

画像

イベントのトリガーを追加します。

画像

Zabbixエージェント


アスタリスクを使用してサーバーにアクセスし、エージェント構成を編集します。
/etc/zabbix/zabbix_agentd.confファイルの最後に、次の行を追加します。

 UserParameter=CDRWrite.check[*], /path/to_scripts/script.py 

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

 service zabbix-agent restart 

Zabbixで行われた後、サーバーはスクリプトの実行に関するデータの受信を開始する必要があります。 データが30分以上書き込まれない場合(この場合、勤務時間中は不可能です)、監視システムはこれを通知します。

Source: https://habr.com/ru/post/J325668/


All Articles