IDCF Tech-Blog

IDCF テックブログ

クラウド・ビッグデータ・データセンターを提供するIDCフロンティアの公式エンジニアブログ

IDCFクラウドでJenkinsのビルド失敗をMackerelで検知し、Reactioから架電

今回は、IDCFクラウドを使ってJenkinsでビルドが失敗した際にmackerelで検知してReactioから電話を掛けさせるというシステムを紹介します。

mackerel

こんにちは。

カスタマーサービス本部 カスタマーリレーション部 テクニカルサポート第2グループの山下です。

部署名長いですが、以後、お見知りおきください。

この記事は、IDCFクラウドを使ってJenkinsでビルドが失敗した際にmackerelで検知して、
Reactioから電話を掛けさせるというシステムの紹介になります。
Mackerelだと、SlackやHipChatやChatworkと連携して簡単に通知できますが、
あえてここは電話で!notificationに溢れているこの時代、ちょっとスマホがブルブルしただけでは気づきません。連絡の最強ツールは今も昔も電話です!
忘年会や新年会の続くこの時期、業務を忘れて心置きなくワイワイできるように、導入してみてはいかがでしょうか?
結局、電話来たら対処しないといけないんですが、初動は早くなると思います!

概要

Jenkinsのログである、/var/log/jenkins/jenkins.logから、
ビルド失敗時に出るFAILUREの項目を抽出して、表示させるカスタムメトリックをMackerelに作成。
MackerelとReactioを連携し、架電させる。

環境

IDCFクラウド

CentOS 7.1 64bit
Standard.S4 メモリ4GB

Jenkins

jenkins-1.639-1.1.noarch
※Jenkinsのインストール方法については割愛します。

mackerel

mackerel-agent-0.25.0-1.noarch mackerel-check-plugins-0.2.0-1.noarch

手順

IDCFクラウドでの、mackerelインストール、初期設定の方法は、
下記、エンジニアブログを参照してください。
http://www.idcf.jp/blog/cloud/mackerel1/
http://www.idcf.jp/blog/cloud/mackerel2/
また今回は、サービスにIDCF、ロールにtech2gと設定しています。
サービスは、Services - サービスを追加 から登録完了です。

mackerelプラグインインストール

# yum install mackerel-check-plugins -y

mackerelでカスタムメトリックを作成する方法は下記を参照ください。
http://help-ja.mackerel.io/entry/advanced/custom-metrics
以下、カスタムメトリックの説明URLから抜粋

メトリックの投稿

設定ファイルで指定するコマンドは、標準出力の各行に以下のフォーマットの出力をすることが期待されます( \tはタブ文字です):

{metric name}\t{metric value}\t{epoch seconds}
  • 名前の最後のドットまでが共通するメトリックがひとつのグラフにまとめられ、ホスト詳細で閲覧できます。
  • メトリック名の先頭には自動的に"custom."という文字列が付与されます。
  • メトリック名に使える文字は英数字もしくはハイフン(-)、アンダースコア(_)、ドット(.)のいずれか(/[-a-zA-Z0-9_.]/)です。

私にはmackerelさんのドキュメントにある対応が技術的に難しかった為、上記、抜粋の仕様にあわせるように、

めんどくさがりな設定を追加しました。

念のためバックアップ

# cp /etc/mackerel-agent/mackerel-agent.conf{,.`date +%Y%m%d%H%M`}

mackerel-agent.confを編集

- /etc/mackerel-agent/mackerel-agent.conf

↓追加行

[plugin.metrics.failure_sum_jenkins]
command = 'echo -e "failure_sum.jenkins	`tail -1 /var/log/jenkins/jenkins.log | grep -c FAILURE`	`date -u +%s`"'

反映させるため、mackerelエージェントを再起動

# systemctl restart mackerel-agent.service

まずは、reactioに登録

https://reactio.jp/sign_up
こちらのページからPCのメールアドレスを入力し、
届いたメールの案内に従い、登録してください。

mackerel と reactio の連携を行う

いまmackerelでreactioチャンネルを使うと6か月無料です。
https://reactio.jp/campaign/mackerel

設定例

API Keyは、Reactioのプロジェクト - プロジェクト詳細 から確認できます。
Organization IDは、reactio登録時に付与されるサブドメインです。
架電通知を利用するにチェックを入れると、mackerelから電話が来ます。
連携方法は下記URLを参照ください。
http://help-ja.mackerel.io/entry/howto/alerts/reactio

テスト

Jenkinsで意図的にビルドを失敗させてみましょう。
/var/log/jenkins/jenkins.logの抜粋

情報: {プロジェクトネーム} #xx main build action completed: FAILURE

上記のようなログがでます。
このログにあるFAILUREの文字列を検知して、mackerelにアラートが通知されます。

Mackerel側の動き

Hosts - 登録したホスト名 - 画面下のカスタムメトリックに、custom.failre_sum.* というグラフが表示されます。

※アラートを検知すると下記のグラフのように1以上になります。

またAlertsの項目でも検知します。

Reactioの動き

Mackerelのアラートをトリガーとして、050から始まる番号から電話が来ます。

IMG_0010 reactio-05

ちなみに、Reactioの電話を掛ける仕組みはtwilioを使っています。

http://twilio.kddi-web.com/

そうこうしているうちに、reactioにアラートが来ます。
TOPメニュー - 発生中 から確認できます。

インシデントをクリックすると詳細が表示されます

いかがでしたでしょうか。
電話は来ましたでしょうか?

注意点

1)Reacioのインシデントは対応完了に!

長時間更新されていません。
対応漏れの可能性がありますので、ご確認ください。
というように後追いの電話が定期的に来ます。
対応漏れには気をつけましょう。

2)アラート重複検知

今回紹介した自己流カスタムメトリックだと、下記のコマンドの実行結果を見ています。

tail -1 /var/log/jenkins/jenkins.log | grep -c FAILURE

Mackerelの1分周期のチェックだと、
/var/log/jenkins/jenkins.logに最終行に FAILUREがある限りアラートが発報します。。
つまり、次にSUCCESS等のログがでない限りアラートが続きます。

Mackerelプラグインでは、アラートは重複チェックされない為、
このようなことは起きません。
ただし、reactioとの連携はできないようでした。
私のようなめんどくさがりな設定ではなく、mackerelプラグインを使ったログ監視(check-log)の方法について紹介します。
mackerelプラグインのログ監視(check-log)の紹介ページはこちら
http://help-ja.mackerel.io/entry/howto/check/log
/etc/mackerel-agent/mackerel-agent.conf に、下記を追加

[plugin.checks.jenkins_log]
command = "usr/local/bin/check-log --file /var/log/jenkins/jenkins.log --pattern 'FAILURE' --return"

説明

/var/log/jenkins/jenkins.log からFAILURE行を監視して、検知したらMackerelにアラートを飛ばします。

一度、引っかかったFAILURE行については重複チェックされないようになっています。
反映させるため、mackerelエージェントを再起動

# systemctl restart mackerel-agent.service

mackerel pluginのアラートでの表示

他、Mackerelの機能

用途は異なりますが、サービスメトリックであれば、reactioとの連携は可能です。
https://mackerel.io/ja/features/service-metrics

あと、trial、有料プランのみのサービスになりますが外形監視でも、reactioとの連携は可能です。
http://help-ja.mackerel.io/entry/external-monitoring

今回は、Jenkinsのビルド失敗を検知していますが、/var/log/messeagesのある文字列を拾って来たり
などなど柔軟に監視やグラフ化が可能です。
ぜひ、今回紹介できなかった他のプラグインも使ってみてください
http://help-ja.mackerel.io/entry/howto/mackerel-agent-plugins

IDCFクラウドなら月額料金無料、監視対象のサーバー台数無制限でMackerelをお使いいただけます。

詳細は下記URLをご参照ください
http://www.idcf.jp/cloud/mackerel/

最後になりますが、Reactioのような電話通知や、
さらに障害対応まで自動化できる、株式会社フィックスポイント様の
Kompiraサービスもぜひお試しください!
http://www.kompira.jp/about

以上

<関連記事>

Copyright © IDC Frontier Inc.