運用を見える化することでDevOpsを前進させよう(後編)~DevOps Day Tokyo 2013
世界中でDevOpsのムーブメントを広げているイベントDevOps Daysが今年も東京で「DevOps Day Tokyo 2013」として9月28日に都内で開催されました。
(本記事は「運用を見える化することでDevOpsを前進させよう(前編)~DevOps Day Tokyo 2013」の続きです)
自分1人で、1台のマシンで1日でデータを公開してみる

今日は「1台、1日、1人」で運用データの公開をしてみるというチャレンジをしたいと思います。
すべてのメトリクスをまとめて、自動的にデータを共有できるようにし、自分は手間がかからないように自動化してみましょう。

使うのはGraphiteというツールです。RRDtoolやGanglia、Cactiなどに似ています。
ドキュメントは貧弱だったりしますが、エコシステムはすばらしいと思います。入出力が簡単で、REST APIで簡単にグラフを作ることができるため、マッシュアップしたりダッシュボードのUIを作りやすく、サードパーティのツールもそろっています。
Graphiteで作ったグラフはURLを伝えるだけで共有できるので、HTMLで簡単にダッシュボードを作れます。

Graphiteはマシンが1台あれば、50台以上のマシンから取得した数千のメトリクスを処理できるでしょう。CPUインテンシブというよりも、メモリと速いディスクがあるほうがよいです。
インストールは難しくありませんが、コンフィグファイルがやや複雑です。
メトリクスは、/proc、ps、df、netstatなどを利用できます。briteco

こうした作業は1日もかからずにでき、誰にでも、共有できる運用メトリクスを用意することができると思います。
運用側のメトリクスは用意できるとして、アプリケーションやビジネスのメトリクスはどうすればいいでしょう。
StatsDでアプリケーションのログをとる
StatsDというツールがあります。これは私がEtsyにいるころに構築されたものです。イベントがリアルタイムにStatsDに配信されると、StatsDがデータを収集し、時系列に統計データとして計算してくれ、1分ごとにGraphiteに書き込んでいきます。

StatsDはUDPを活用します。メトリクスはUDPの中に入れられるのです。UDPはネットワークを過負荷にすることもなく、存在しないサーバにパケットを送ったとしても問題を起こしません。
つまり、どのアプリケーションであってもこの機能を安全に追加できる、ということです。

ユーザーがサービスにログインするデータのログをとるには、StatsDのコンフィグレーションファイルに1行追加するだけで済みます。
ユーザーのログインは高頻度で発生するイベントですが、低頻度のイベントもグラフ化できます。それもスクリプトに1行追加するだけです。低頻度のイベントとは、マシンのリブート、インストール、コアダンプ、クラッシュといったデータが該当するでしょう。
メトリクスの収集をデプロイのプロセスに入れるとこういう構成図になります。サーバが複数あり、誰かがログインすると StatsDがUDPパケットを送信し、1分ごとにまとまったデータがGraphiteに書き込まれていきます。

こうしてみると退屈なログインデータも興味深いものになります。下の赤い線は失敗したログインの数です。
グラフにすると何が起きたのか誰でも分かる
午前3時、なにが起きたのでしょうか。誰かがブルートフォース攻撃でもしたようです。このグラフは運用チームだけでなく、セキュリティチームもビジネスチームも参照できます。
グラフが急上昇すると自動的にアラートを発する機能も備えています。

これはGrapfhiteのデフォルトのビューですが、この形式は実験的な画面にはいいのでしょうけれど、毎日参照する画面としては面倒でしょう。

それよりもこうしたダッシュボード形式の方がいいでしょう。これはEtsyのグラフで、ここでサイトがクラッシュしたことが誰でも分かります。

ぜひみなさんも、ここで紹介した1台、1日、1人のチャレンジをしてみてください。そしてデータを見える化して社内で共有してみてください。さらに、人事、経理といったほかのビジネスグループのダッシュボードも作ってみてください。そうすることで社内の部署のコミュニケーションを向上させることができるでしょう。
公開されたスライド:Making operations visible - devopsdays tokyo 2013
DevOps Day Tokyo 2013
- 運用を見える化することでDevOpsを前進させよう(前編)~DevOps Day Tokyo 2013
- 運用を見える化することでDevOpsを前進させよう(後編)~DevOps Day Tokyo 2013
- GitHub社内のDevOpsを支えるツール「Boxen」と「Hubot」(前編)~DevOps Day Tokyo 2013
- GitHub社内のDevOpsを支えるツール「Boxen」と「Hubot」(後編)~DevOps Day Tokyo 2013
- クックパッドのインフラ責任者が語る、DevOpsを成功させる考え方「迷ったら健全な方を選ぶ」~DevOps Day Tokyo 2013
DevOps Day Tokyo 2012
あわせて読みたい
GitHub社内のDevOpsを支えるツール「Boxen」と「Hubot」(前編)~DevOps Day Tokyo 2013
≪前の記事
運用を見える化することでDevOpsを前進させよう(前編)~DevOps Day Tokyo 2013