2015.12.10

アラートをチャットワークに送る

こんにちは、次世代システム研究室のN.O.です。

最近チャットワークを業務で使うことが増えてきました。チャットワークではAPIを公開しているのでメッセージを自動的に送信することも可能です。またiOS、Android用のクライアントアプリではプッシュ通知を受け取ることができるのでアラートメールの代わりにもなりそうです。そこで今回はAPIを利用してバッチ処理のアラートをチャットワークに送ってみます。

チャットワークAPIドキュメント
http://developer.chatwork.com/ja/index.html

なお注意事項としてチャットワークAPIは現在「プレビュー版」となっており、利用申請が必要となります。またビジネスプラン、KDDI ChatWorkの場合は自社のチャットワーク管理者から権限を付与される形になりますので、社内システム部門などにご相談ください。

今回のバッチ

今回の対象はjarのバッチです。本来はログ機構に手を入れてAPIをコールしたいところですが、このjar用のIDE環境を1から用意する必要があり、構築には時間がかかりそうです。
そこで手っ取り早くログ出力をfluentdで拾ってAPIを叩くようにします。

セットアップ

認証方法 – チャットワークAPIドキュメントを参考にAPIトークンを取得します。

api
fluentdではチャットワーク用のoutputプラグインを利用させて頂きました。
sue445/fluent-plugin-out_chatwork
https://github.com/sue445/fluent-plugin-out_chatwork

ログファイルのサンプル

jarのバッチのログ出力先は/var/log/scheduler/scheduler.logとします。ログは以下のような出力となります。
/var/log/scheduler/scheduler.log
2015-11-28T14:08:09.314 [main] INFO  Main - Start
2015-11-28T14:08:09.320 [main] ERROR Main - Exception javax.management.RuntimeErrorException: null
2015-11-28T14:08:09.330 [main] INFO  Main - End

fluentdの設定ファイル

API_TOKEN、ROOM_ID、USER_IDに適切な値を入れます。
<source>
  type tail
  path /var/log/scheduler/scheduler.log
  pos_file /var/log/td-agent/scheduler.log.pos
  tag scheduler
  format /^(?<time>[^\s]+) (?<thread>[^\s]+) (?<level>[^\s]+)(?<message>.*)/
  time_format %FT%T.%L
</source>

<match scheduler>
  type rewrite_tag_filter
  rewriterule1 level ^(\w+) $1.${tag}
</match>

<match INFO.scheduler>
  type null
</match>

<match *.scheduler>
  type         chatwork
  api_token    API_TOKEN   #API_TOKENに値を入れる
  room_id      ROOM_ID   #ROOM_IDに値を入れる
  message      "[To:USER_ID] [info][title]scheduler batch[/title] <%= record['level'] %> <%= record['message'] %>[/info]"   #USER_IDに値を入れる
</match>

動作確認

実際にエラーログを投げ込んでみてメッセージが来ることが確認できました。

chatwork_test

あとがき

今回は簡易的に作ってみましたが、メールに比べてスマートフォンのプッシュ通知の方がより気づきやすいと感じました。しかしながらこのままでは大量にERRORが発生した場合の考慮ができておりません。一般的なAPI同様、チャットワークのAPIにもレートリミットがあり「APIのリクエスト数は、5分あたり100回まで」となっております。短時間に大量のERRORが発生したとして、全てAPIをコールするような使い方は迷惑この上無いので、この点についてはカスタマイズのしやすいout_execプラグインの利用を検討したいと思います。

次世代システム研究室では、グループ全体のインテグレーションを支援してくれるアーキテクトを募集しています。インフラ設計、構築経験者の方、次世代システム研究室にご興味を持って頂ける方がいらっしゃいましたら、ぜひ 募集職種一覧 からご応募をお願いします。

皆さんのご応募をお待ちしています。

Pocket