Enterprise 技術情報 Enterprise Technical information
外部との連携 Redmineでのチケット作成をKompiraに通知する
「Redmineへ新規チケットを登録する」でRedmineへ新規チケットを登録する方法をご紹介しましたが、本記事では逆にRedmineにチケットが登録されたら、それをトリガーとしてKompiraにチケットの内容を通知する方法をご紹介します。Kompira側では通知された内容に応じて、状況確認、リカバリー、担当者への通知などの処理を起動する事が出来ます。
ここで使う技術は大きく2つです。
(1) KompiraのREST API
(2) RedmineのWebhook
Kompiraを外部から操作するにはREST APIを利用します。RedmineからREST APIを呼び出すにはWebhookを利用します。
WebhookはWebコールバックなどと呼ばれる場合もありますが、あるアプリケーションから別のアプリケーションに対してリアルタイムに情報提供を行うための仕組みです。通常、Webhookは指定されたアプリケーションに対してHTTPリクエストを送信し、受信側(今回はKompira)はそのリクエストの内容を解釈して利用します。
環境情報 本稿は、以下の環境で検証しています。
Kompira REST APIの設定 Kompira REST APIを利用して、Kompiraのほぼ全ての機能をREST APIから呼び出す事が出来ます。APIを利用するためには認証のための”REST APIトークン”が必要になります。ここではrootユーザーで設定をしていきます。 [設定] -> [ユーザー管理] -> [root] -> [編集] 画面一番下の”REST API 有効化”チェックボックスをONにして[保存]をクリックします。
情報画面の画面一番下の”REST API トークン”の”トークンを表示する”をクリックし、トークンを表示します。トークンの文字列は後に利用しますので、メモ帳などにコピーしておいてください。
REST APIのエンドポイントは以下のURLです。
この画面のURLにKompiraのREST APIのURLを指定します。
この登録処理でWebhookが起動し、Kompiraにリクエストを送信します。Kompira側では予めジョブフロー”Webhook受信テスト”を実行中のため、Webhookが送信したデータがコンソールに表示されます。
(注意:このジョブフローは受信を続けますので、確認が終わりましたら[中止]ボタンを押して強制的に停止させてください。Kompiraの画面を切り替えてもジョブフローは動作していますので、別のAlertでメッセージを受信する処理を実行した場合に影響が出ます。)
ここで受信したメッセージの形式はWebhookの配布元サイト”https://github.com/suer/redmine_webhook“を参照してください。
一部、抜粋します。
ここまで、RedmineからWebhookを利用してKompiraのチャネルオブジェクトに対してREST APIでメッセージを送信し、Kompira側では受信したメッセージの各要素へのアクセス方法を見てきました。このメッセージの内容によってKompiraでの必要なジョブフローを処理を呼び出す事が出来ます。
例えば先の例では[メッセージ].payload.actionが「opened」であれば「新規チケットが作成された」事を示しています。これによりインシデントの初期対応する処理を記述したジョブフローを呼び出すなどが可能です。
Redmineのカスタムフィールドを追加する機能を使うことで、Kompiraのジョブフローで読み込むための値を登録するフィールドとして使用することで様々な応用も考えられます。
HTTPSモードに伴う連携の失敗について ※2020/06/30追記 上述の手順をお間違いなく設定していただいたのにも関わらず連携が失敗する場合、KompiraのHTTPSモード[1]が原因の場合があります。 下記手順よりHTTPSモードを解除してから改めて連携をお試し下さい。 1. Kompiraサーバから /etc/httpd/conf.d/kompira.conf の”Rewrite”から始まる行をすべてコメントアウトする 2. 次のコマンドを実行し、httpdを再起動する
環境情報 本稿は、以下の環境で検証しています。
項目 | バージョン |
OS | CentOS Linux release 7.7.1908 |
Kompira | ver.1.5.5.post7 |
Redmine | 4.1.1.stable |
Kompira REST APIの設定 Kompira REST APIを利用して、Kompiraのほぼ全ての機能をREST APIから呼び出す事が出来ます。APIを利用するためには認証のための”REST APIトークン”が必要になります。ここではrootユーザーで設定をしていきます。 [設定] -> [ユーザー管理] -> [root] -> [編集] 画面一番下の”REST API 有効化”チェックボックスをONにして[保存]をクリックします。


http[s]://[kompiraのhostname]/HTTPリクエストに次のヘッダーを含めるか、もしくは、クエリ文字列に “format=json” を含める必要があります。
Accept: application/json基本的には
http[s]://[kompiraのhostname]/[オブジェクトのパス][.メソッド名]でリクエストを行います。詳細はドキュメントを参照してください。 Webhookの設定 続いてRedmine側のWebhookの設定をします。まずはgithubよりRedmine webhookをインストールします。
# cd /var/lib/redmine/plugins # git clone git://github.com/suer/redmine_webhook.git # /usr/local/bin/bundle install # /usr/local/bin/bundle exec /usr/local/bin/rake redmine:plugins:migrate RAILS_ENV=production # service httpd restartRedmine画面から設定をします。 [プロジェクト] -> (プロジェクト名) -> [設定] -> [webhook]

http://[KompiraのIPアドレス]/system/channels/Alert.send?format=json&token=[KompiraのREST APIトークン]この例ではKompiraのAlertチャネルのオブジェクトを指定します。WebhookからAlertチャネルのsendメソッドを呼び出して、メッセージを送信します。 Kompira側でのメッセージの受信 Alertチャネルからの受信内容を表示するジョブフロー「Webhook受信テスト」を作成します。
</system/channels/Alert> -> print($RESULT) -> self()このジョブフローを実行すると、ステータスは”待ち”となり、コンソールは待機中の状態になります。Kompiraの画面はこのままにしておきます。 続いて、Redmineから新しいチケットを登録します。


{ "payload": { "issue": { "author": { "icon_url": "http://www.gravatar.com/avatar/example", "identity_url": null, "lastname": "user", "firstname": "test", "mail": "test@example.com", "login": "test", "id": 3 }, "assignee": { "icon_url": "http://www.gravatar.com/avatar/example", "identity_url": null, "lastname": "user", "firstname": "test", "mail": "test@example.com", "login": "test", "id": 3 }, "priority": { "name": "normal", "id": 2 }, ... (省略) } }応答は辞書型のデータであるため、Kompiraのジョブフローでは”[メッセージ].payload.issue.author.icon_url”のようにメッセージ中の各要素を呼び出す事が出来ます。 JSON形式のままでは読みにくいため、ここでAlertの監視用ジョブフロー”Webhook受信テスト”を次のように変更して実行します。各項目が個別に表示されます。
</system/channels/Alert> -> print($RESULT) -> [message = $RESULT] -> print("-------------------------------------------------")-> print("新しいチケットが作成されました。")-> print("プロジェクト名:", message.payload.issue.project.name)-> print("タイトル:",message.payload.issue.subject )-> print("説明:",message.payload.issue.description)実行した状態でRedmineで新規チケットを作成すると、Kompiraのコンソールでは次の様に表示されます。

HTTPSモードに伴う連携の失敗について ※2020/06/30追記 上述の手順をお間違いなく設定していただいたのにも関わらず連携が失敗する場合、KompiraのHTTPSモード[1]が原因の場合があります。 下記手順よりHTTPSモードを解除してから改めて連携をお試し下さい。 1. Kompiraサーバから /etc/httpd/conf.d/kompira.conf の”Rewrite”から始まる行をすべてコメントアウトする 2. 次のコマンドを実行し、httpdを再起動する
systemctl restart httpd[1] HTTPによるアクセスを強制的にHTTPSにする機能
スタートガイド
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にユーザーを登録する