PyCon APAC 2013参加レポート

第2回 Pythonによる開発運用を助けるツールたち ─パッケージシステム,DataDogでモニタリング,mockを使ったテスト

この記事を読むのに必要な時間:およそ 8 分

PythonとDataDogを使って簡単なシステムモニターリング

1日目の午後3番目のセッションは,堀田 直孝(@jhotta)さんによるPythonとDataDogを組み合わせて簡単にモニタリングシステムを構築しよう,というお話です。

DevOps活動を積極的に行われている堀田さんから,DevOpsに絡めてシステムモニタリングの重要性と,構築の手間や海外の企業と日本の企業の違いに関して発表がありました。

システムモニタリングの重要性

海外のIT系の企業では当たり前のように,システムモニタリングの結果をいつでも誰でも見れるよう,モニタを壁に貼り付けてあるそうです。

画像

これはEtsyの社内のワンショットだそうです。海外ではスタートアップからある程度大きくなった企業まで,このようにモニタを設置してあると説明がありました。

システムモニタリングのキーワードは,以下の3つです。

  • Collection:データ収集
  • Correlation:相関性の発見
  • Collaboration:協調作業への結びつけ

これらを実行するために,ビジュアライゼーションと先の写真のようなモニタリングが必要だそうです。

堀田さんは,⁠いろいろな会社がNagiosやZabbix,Muminなどを使ってシステムモニタリングを導入していますが,これらを活用できているのだろうか,重要なのはこれらの構築の時間よりも,指標をチェックし,継続的にビジネスを回すことではないか」と話していました。

以下のように,海外にはすでにさまざまなシステムモニタリングサービスがあり,堀田さんはこれらを活用してシステムモニタリングを早く始めるべきと言います。そしてその中でもDataDogが使いやすく,データのビジュアライズの点で優れているとのことです。

画像

日本国内ではGengoが使っているそうです。

堀田さんは,システムモニタリングの重要性の例として,データベースの最適化とクラウドのパフォーマンス監視を挙げていました。可視化していることで,データベースの最適化したタイミングがグラフから明らかにわかります。これにより,ビジネスサイドの人間にいちいち言葉で説明せずとも,その成果が伝わります。

画像

さらに,クラウド上のシステムを監視していると以下のように,ひと目でパフォーマンス劣化がわかります。このようにモニタリングすることで隠れたリスクを顕在化することができます。

画像

DataDogを使う

DataDogを使えば,以下のようなモニタリングダッシュボードを簡単に作成できます。

画像

このダッシュボードにはメッセージ機能も貼り付けることができ,堀田さんはDataDogはFacebookとシステムモニタリングを掛けあわせたサービスだと話していました。

Windowsをはじめ,Debian,Ubuntu,CentOSなど主要なOSに対応しており,数行でインストールすることができます。

$ DD_API_KEY=c81dc7fbacbfca8c9e4f1c02d439f112 bash -c "$(wget -qO- http://dtdg.co/agent-install-ubuntu)"
$ sudo sh -c "echo 'deb http://apt.datadoghq.com/ unstable main' > /etc/apt/sources.list.d/datadog.list"
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv- keys C7A7DA52
$ sudo apt-get update
$ sudo apt-get install datadog-agent
$ sudo sh -c "sed 's/api_key:.*/api_key: c81dc7fbacbfca8c9e4f1c02d439f112/' /etc/dd-agent/ datadog.conf.example > /etc/dd-agent/datadog.conf"
$ sudo /etc/init.d/datadog-agent start

Pythonから使うライブラリはPyPIに公開されており,パッケージインストーラ経由でインストールできます。

$ easy_install dogstatsd-python

データを送る際には以下の機能を使用できます。

  • Counters
  • Gauges
  • Histograms
  • Sets
  • Tags
  • Sample Rates

これらの機能を活用したコードがいくつか紹介されていました。

ページのアクセスごとにメトリクスをカウントアップする例
def render_page():
    """ Render a web page. """
    statsd.increment('web.page_views')
    return 'Hello World!'
定期的にメモリの空き容量を取得する例
def get_free_memory():
    ...
    return free_memory

while True:
    statsd.gauge('system.mem.free', get_free_memory())
    time.sleep(10)
クエリの実行時間を取得する例:
@statsd.timed('database.query.time')
def get_data():
    return db.query()

コードをアプリケーションに追加し,データを集めた後は,ダッシュボードをDataDogのページで作成します。作成の方法はDataDogのチュートリアルビデオを見るとわかりやすいようです。

Datadog in 2 minutes

あとは,こうやって作ったダッシュボードをオフィスにモニターを用意して,常時表示するだけとのこと。堀田さんはRaspberry Piを活用して,自宅でシステムモニタリングしているそうです。

発表の半分はDataDogの説明でしたが,そこからDataDogが非常に使いやすいサービスである印象を受けました。

NagiosやMumin,その他,アプリのダウンロード数,PV数などを見ることができる管理画面もそうですが,モニタリング用のダッシュボードのカスタマイズが難しい場合が多いです。DataDogはグラフの見た目もよく,その辺の問題が解決するのが良いですね。

各種指標をクローリングし,モニタリング用にまとめる程度であれば,無料の範囲で運用できるとのことなので,弊社でも一度使ってみようと考えています。

著者プロフィール

藤原敬弘(ふじわらたかひろ)

FULLER株式会社

1986年生まれ。北海道苫小牧市出身。苫小牧工業高等専門学校卒業。

Fuller, Inc. CTO

Webプログラマ,よく利用する言語はPython。Pythonコミュニティによく出没する。趣味でArduinoやRaspberry Piなどを使って,便利なものを自作する。

twitter:@wutali
github:https://github.com/wutali

バックナンバー

PyCon APAC 2013参加レポート