@kyanny's blog

My thoughts, my life. Views/opinions are my own.

New Relic のグラフを毎時チャットに貼り付ける

New Relic をこまめにチェックすべきだが怠惰かつ忘れっぽいせいでチェックできないので、グラフ画像が毎時チャットにつぶやかれるようにしてみた。

f:id:a666666:20141115171514p:plain

やり方はけっこう込み入っている。

  1. New Relic の Embedded Charts 機能を使って埋め込み用のグラフを作る。
  2. Amazon S3 にバケットポリシーでデフォルト公開設定にしたバケットを作る。
  3. 適当なサーバーに Jenkins と phantomjs と s3cmd をインストールし、 s3cmd は 2. で用意したバケットに書き込める Access Key Secret Key で --configure しておく。
  4. capture_put.sh というスクリプトを使い、 phantomjs で embedded chart のスクリーンショットを撮って s3 に put し、画像の URL を HipChat に投稿する。

Jenkins で新しい Job を作り、 Parameterized build でいくつかデフォルト値を用意しておく。必要な変数は capture_put.sh にコメントで書いてある。その上で Build shell にこんな風に書く。

#!/bin/bash
set -u
set -e
set -x
. capture_put.sh
capture_put \
  https://rpm.newrelic.com/public/charts/XXXXXXXXXXX \
  my-application \
  https://rpm.newrelic.com/accounts/XXXXXX/embedded_charts

Build periodically で定期的に実行されるようにすると、チャットルームにグラフが流れてくる。この例では、直近 60 分のレスポンスタイムのグラフが毎時流れてくるようにした。0クリックになって革命的、というほどではないが、 New Relic というかアプリケーションのパフォーマンスに対する意識は若干高まった。

s3 に一度画像を put する必要があるのは HipChat の仕様によるものなので、 Slack などでは事情が違うかもしれない。 Jenkins をまだ自前で持っていない場合は Bitnami を使うと立ち上げが楽だ(AWS Marketplace のを使ってもいい)


New Relic を Heroku addons 経由で利用しているとダッシュボードへのアクセスに Heroku のシングルサインオンを経由する必要があり、ブラウザのブックマークと相性が悪い。そのせいで足が遠のいてしまう、というのがこれをやってみるモチベーションになった。

画像の URL だけを貼り付けても HipChat はいい感じにプレビュー表示してくれるのだけど、ちょっとシェルスクリプトをがんばって Jenkins Job や embedded charts 一覧ページへのリンクも同時に投稿するようにしたら、いろいろ探し回る手間が省けてなかなか便利だった。チャットへの自動投稿は便利なのでよくやるけど、やり始めた本人もどこで動かしてるか忘れてしまって止められない、なんて笑えない事態になることもあるので、投稿内容に自分自身を止めるためのポインタを含ませるのは後々困らなくて良いと思う。