Kompira

Menu Menu

Enterprise Technical information

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

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

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


 

動作確認環境

 

ソフトウェア バージョン
Kompira 1.5.5.post8
LinuxOS CentOS7.8.2003
Windows Windows10 2003

 

※本記事は上記環境を利用して検証しております。掲載時点の情報であり、最新のものとは異なる場合があります。予めご了承ください。

 


 

Linuxへのkompira_sendevtインストール

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

 

$ wget https://bitbucket.org/kompira/package/downloads/kompira--bin.tar.gz
$ tar zxvf kompira--bin.tar.gz
$ cd kompira--bin
$ sudo ./install.sh --sendevt <kompiraサーバー名>

 

<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

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

 

$ python ez_setup.py

 

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

 

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

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

 

$ easy_install --script-dir=C:\Python27\Scripts dist\Kompira_sendevt--py2.6.egg

 

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

 

$ kompira_sendevt --version

 

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

 

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

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

 

</system/channels/Alert> -> # データの受信待機
[message = $RESULT] ->      # データを受信したら内容は$RESULTに格納される。
print('${message}を受信しました') ->
self()                      # 再度、受信待機に戻る

 

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

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

 

$ /opt/kompira/bin/kompira_sendevt -s <kompiraサーバ名> key=msg

 

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

 

{'key': 'msg'}を受信しました

 

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

 

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

 

$ cd /opt/kompira/bin
$ pwd | ./kompira_sendevt -s <kompiraサーバ名>

 

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

 

/opt/kompira/binを受信しました

 

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

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

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

 

</system/channels/Alert> ->  # データの受信待機
[message = $RESULT] ->      # データを受信したら内容は$RESULTに格納される。
print('${message}を受信しました') ->
{ if message.title == "DOWN"|
  [./プロセス再起動: message.server]
} ->
self()                     # 再度、受信待機に戻る

 

ここで

 

$ /opt/kompira/bin/kompira_sendevt -s <kompiraサーバ名> title=DOWN server=server1

 

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

 

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

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

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

 

独自チャネルの作成

 

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

 

<./独自チャネル> ->        # データの受信待機
[message = $RESULT] ->   # データを受信したら内容は$RESULTに格納される。
print('${message}を受信しました') ->
{ if message.title == "DOWN"|
  [./プロセス再起動:message.server]
} ->
self()                   # 再度、受信待機に戻る

 

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

 

$ /opt/kompira/bin/kompira_sendevt -s <kompiraサーバ名> --channel=<チャネル名> title=DOWN server=server1

 

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

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

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

スタートガイド

Kompiraジョブフローの基礎

ジョブフローの簡単な例

Kompiraの機能

外部との連携