Enterprise 技術情報 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の機能
-
- フィールド修飾子でフィールドの入力内容に制約を設ける
- Kompiraでの文字列のパターンマッチング
- Kompira上でWikiページを作成する
- スケジューラを使って定期的にジョブを実行する
- ジョブフローを実行するフォームを作成する
- テーブル内の情報を選択して処理を実行する
- ジョブフローに権限設定をする
- ジョブフロー画面の各種設定
- Pythonで記述された処理をKompiraから呼び出す
- Kompiraオブジェクトのプロパティ,メソッド,フィールドを扱う
- Windowsでリモートスクリプトを実行する(その1)
- Windowsでリモートスクリプトを実行する(その2)
- Kompira上のデータをバックアップする(その1)
- Kompira上のデータをバックアップする(その2)
- Kompira上のデータをバックアップする(その3)
外部との連携
-
- Prometheusからの通知をKompiraで受信する
- Kompira cloud Pigeonを利用した通知電話の利用
- ネットワーク機器へのコマンド投入
- KompiraからWindowsGUIアプリケーションを操作する (1/2)
- メールを送信する
- メール受信をトリガーにしてジョブフローを実行する
- アラートメールをフィルタリングして転送する
- チャネルを利用して外部システムからデータを受信する
- Webページから内容を取得する
- Redmineへ新規チケットを登録する
- Redmineでのチケット作成をKompiraに通知する
- Kompira REST APIを利用して外部からジョブフローを実行する
- Kompira REST APIを利用して外部からオブジェクト情報を取得する
- KompiraからSlackに通知する
- Slackでの投稿をKompiraに通知する
- KompiraからTwilioで電話をかける
- Zabbixからの通知をKompiraで受信する
- syslogをKompiraで受信する
- snmptrapをKompiraで受信する
- KompiraでExcelファイルの読み書きをする
- KompiraでGoogle SpreadSheetの読み書きをする
- Active Directoryから情報を取得する
- Active Directoryにユーザーを登録する