Enterprise 技術情報 Enterprise Technical information
外部との連携 メール受信をトリガーにしてジョブフローを実行する
運用の現場ではSlackのようなメッセンジャーアプリが利用されてきていますが、メールによる通知もまだまだ多いと思います。具体的には、システム側でのcronによる処理結果や監視ツールからのレポートなどがメールで通知されてくるケースがあります。今回はKompiraがメールサーバーよりメールを受信し、その内容によってメンテナンス処理を実行する方法をご紹介します。
ここでは、メールサーバーよりIMAP4/POP3プロトコルを通じて、メールを取り込む「メールチャネル」を利用します。メールチャネルは設定されているメールサーバー(IMAP4/POP3サーバー)をチェックし、メール受信をした場合にはそのメールを取得し、ジョブフローに渡します。この際に受信したメールはメールサーバーから削除されます。メールチャネルはあらかじめ指定された時間間隔でメール受信のポーリング処理を行います。
動作確認環境
ソフトウェア | バージョン |
---|---|
Kompira | 1.4.10.post10 |
LinuxOS | CentOS6.10 |
または
ソフトウェア | バージョン |
---|---|
Kompira | 1.5.5.post7 |
LinuxOS | CentOS7.8.2003 |
メールチャネルの作成
「メールチャネル」はジョブフローと同様に、管理画面から作成します。この際に型指定のプルダウンでは「メールチャネル」を指定します。ここでは「mchan」という名前で作成します。
次のようなメールチャネルの設定画面が表示されます。
フィールド | 説明 |
---|---|
サーバー名 | IMAP/POP3サーバーをホスト名かIPアドレスで指定 |
プロトコル | メール受信のプロトコルとしてIMAP/POP3のいずれかを指定 |
SSL | SSLによる通信を行う場合に有効化します。 |
ポート番号 | 受信のポート番号を指定します。指定が無い場合にはデフォルトのポートが使用されます。 |
ユーザー名 | メールサーバーのユーザー名を指定 |
パスワード | メールサーバーのパスワードを指定 |
受信チェック間隔 | 新着メッセージを確認する間隔を分単位で指定します。デフォルトは10分で、「0」を指定するとデフォルト値が指定されます。負の値を指定した場合は新着メッセージの確認を行いません。 |
無効 | メールサーバーへの接続を無効にします |
ログサイズ | ログの最大サイズを指定。最大サイズを超えた場合には古いメッセージから削除されます。(ログはメールチャネル画面の”ログ”タブで閲覧可) |
メールを受信するジョブフローの作成
作成したメールチャネル”mchan”をジョブフロー中で利用する際には、”<./mchan>”のように、<>で囲みます。受信したメッセージの内容は$RESULTに格納されます。
<./mchan> -> print("メールを受信しました") -> [raw_mail_text = $RESULT] -> print(raw_mail_text) -> print("メールを解析します") -> [mail_text = mail_parse(raw_mail_text)] -> print(mail_text) -> [from = mail_text['From']] -> print("$fromからメールを受信しました")
メッセージの内容はヘッダー部分も本文部分も一緒になっているため、mail_parse() という組み込み関数を利用して、辞書型のデータに変換します。メールのヘッダー情報に加えて”Body”キーでメールの本文、”Filename”キーで添付ファイル名にアクセスできます。またメールの本文はContent-TypeがText/Plainで添付ファイルが無い場合に限りutf-8形式にエンコードされます。Content-Typeがmultipartの場合は”Is-Multipart”キーがtrueになり、”Body”キーの要素が辞書オブジェクトの配列になります。
上記のジョブフローを一部修正して、メールの表題が”DOWN”であった場合には、指定のサーバーのプロセスを再起動するジョブフローを呼び出すようにしてみます。
<./mchan> -> [raw_mail_text = $RESULT] -> [mail_text = mail_parse(raw_mail_text)] -> [subject = mail_text['Subject']] -> # メールのタイトルが"DOWN"の場合には、サーバーのプロセス再起動を実施 { if subject == "DOWN"| [./プロセス再起動] }
「プロセス再起動」は「ジョブフローから別のジョブフローを呼び出す」で作成したジョブフローをそのまま使いましたが、もちろん他の処理を記述していただいても構いません。(関係者への通知、チケットシステムへの投稿、予備系への切り替えなど)
ジョブフローの常駐化
上記で作成したジョブフローはメールを1通処理して終了となりますが、これを継続的に行なえるように変更してみましょう。
繰り返しの処理を指定するためにwhileブロックを使用し、あわせて何らかの原因で受信処理に異常が発生した場合でも全体が強制終了しないように、tryブロックを追加します。
{ while(true) | # 無限ループにする { try | # ブロック内部の処理が正常に行われると $STATUSに0が挿入される <./mchan> -> [raw_mail_text = $RESULT] -> [mail_text = mail_parse(raw_mail_text)] -> [subject = mail_text['Subject']] -> # メールのタイトルが"DOWN"の場合には、サーバーのプロセス再起動を実施 { if subject == "DOWN" | then: print("DOWNを検知しました") -> [./プロセス再起動] else: print("処理対象外メールです") } } => { if $STATUS != 0 | then: print("受信処理中にエラーが発生しました。次のメール待ちです") else: print("受信処理が正常に完了しました。次のメール待ちです") } }
このジョブフローを実行して、メールを指定のアドレスに送信すると、以下のような結果となります。このジョブフローは無限ループとしているので、停止させる場合は手動で「中止」ボタンをクリックする必要があります。 (プロセスが実行中であるかどうかは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にユーザーを登録する