column

外部との連携 チャネルを利用して外部システムからデータを受信する

メール受信をトリガーにしてジョブフローを実行する」では、Kompiraでメールを利用する方法をご説明しました。
今回の記事はKompiraの「チャネル」を用いて、外部システムからKompiraに情報を送信する方法をご紹介します。

「メールチャネル」では外部のメールサーバーに対してポーリングをかけ、メールサーバーからメールを受信する動作をしますが、「チャネル」は外部からデータが送られてくるのを待機するという動きになります。「チャネル」にデータを送るのは専用のツール「kompira_sendevt」を用います。

 
Linuxへのkompira_sendevtインストール

まずはデータを送信するためのツールを用意します。次のようなコマンドで必要なモジュールをインストールします。

<version> はkompiraのバージョン(例えば1.4.8)を、
<Kompiraサーバー名> はKompiraサーバーのホスト名、またはIPアドレスを指定します。

ここまで実行できましたら、/opt/kompira/bin 以下に”kompira_sendevt”コマンドが配置されます。必要に応じてパスを通す設定を行ってください。

 
Windowsへのkompira_sendevtインストール

windowsでは動作のためにPythonの動作環境が必要となります。この記事執筆の時点ではPythonは古いバージョン2系と新しいバージョン3系がメンテナンスされています。これらはプログラムの記載方法などで差がありますが、今回はバージョン2系を利用します。

1. Python のインストール
Python2系 を Windows にインストールします。 (この記事の執筆時点での最新バージョンは 2.7.11) 公式ダウンロードサイト( (https://www.python.org/downloads/windows) からPython2系の最新パッケージをダウンロードしてインストールしてください。

インストールが完了したら、コマンドラインから Python が起動できるように、環境変数のパスを追加しておきます。

2. easy_install コマンドのインストール

Python の easy_install コマンドをインストールします。
https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py

上記のリンクを右クリックして保存します。ダウンロードしたら、コマンドラインを起動し、該当のファイルのあるところまで移動してから、以下のように実行します。

これで、easy_install コマンドがインストールされます。

3. kompira_sendevt パッケージのインストール

Kompira パッケージを Windows 上にダウンロードして展開し、展開したディレクトリに移動してから、以下のコマンドを実行します。(インストールしたPythonのバージョンに合わせてパス名を修正してください。)

以上で、イベント送信パッケージのインストールは完了です。以下のようにwindowsのコマンドコンソールで kompira_sendevt コマンドを実行してバージョン番号が表示されることを確認してください。

すでにAnacondaなどのパッケージでPythonの実行環境がインストールされている場合、上記のコマンドを参考に、個別にパッケージのインストールを行ってください。

 
ジョブフローでチャネルを扱う

ここまででデータの送信側の設定を行ってきましたが、今度は受信側のジョブフローの記載を行っていきます。ここではKompiraのデフォルトのチャネル 「/system/channels/Alert」を利用して、下記のようなジョブフローを実行します。

上記のジョブフローを実行しますと、実行画面の右側の「プロセス情報」のステータスは「待ち」状態になり、コンソールには実行中の表示と、データを受信した際には受信したメッセージが表示されます。
(このジョブフローを停止させるには「中止」「停止」ボタンを利用してください。)

次にkompira_sendevtコマンドをインストールしたサーバーからデータを送信します。次のようなコマンドを実行してみてください。

数秒後にkompiraのコンソールには以下のような表示が現れます。

上記のように “key=msg”というデータを送信すると、{ } でくくられたkey-value関係の辞書型のデータとして格納されます。また、この値は複数を送る事が出来ます。

 

次にデータをコマンドラインのパイプを使って送り込んでみます。

するとコンソールの表示は以下のようになります。

このように、パイプで送られたデータの場合には辞書型ではなく、通常の文字列として受信します。

「処理のトリガーとなるようなメッセージを送信する場合にはコマンドラインから送信する」「コマンドの出力結果などを送る場合にはパイプを利用する」といった使い分けをしてみてください。

チャネルで受信したデータにより、ジョブフローを起動するには、例えば下記のようにジョブフローを修正します。

ここで

というようにデータを送信すると、[./プロセス再起動]というジョブフローが実行される事になります。(ここでは仮に、[./プロセス再起動]が、再起動の対象となるサーバー名を引数にとることを想定しています。)

 
独自のチャネルを作成する

ここまではkompiraのデフォルトで用意されたチャネル”Alert”を利用してきましたが、これだけでは様々な機器や条件で受信したデータを振り分けるのに複雑になります。独自のチャネルを用意する方法をご紹介します。

方法は非常に簡単で、ジョブフローを作成するのと同様に、名前を指定し、型を「チャネル」にしてオブジェクトを作成します。

独自チャネルの作成

作成後は特に何かを設定する必要はありません。このチャネルを利用して先のジョブフローを書き換えると以下のようになります。

このジョブフローはデフォルトの”Alert”チャネルを用いた場合と機能的には差がありません。ただし、データを送る側では明示的にチャネルを指定する必要があります。

同一のチャネルを複数のジョブフローから利用する事も可能ですが、その際には最初に処理したジョブフローだけがメッセージを処理する事になります。このため実務面から見ますと、ジョブフローの用途に応じて、送信側のサーバーごと、または発生させるイベント種別ごとにチャネルを作成すると、受信データの扱いが楽になりますし、思わぬ事故を防ぐ事になります。

チャネル自体は、それを利用するジョブフローの有無や、ジョブフローが動作中/停止中などの状態に関係なく、データを受信します。また受信したデータは内部的にはメッセージキューに格納され、受信順にFIFO(First-in-First-out)で処理されます。

このように外部のサーバーからkompiraにデータを送る手段をご用意してありますので、運用ツールと連携させたり、スクリプトから呼び出して、kompira上のジョブフローを制御してみてください。