GCP関連のモニタリングを俺なりに検討してみる。


**僕は、ものぐさなのかもしれない。** 「監視システムが落ちていて、警報がでなかったら?」「何種類の異なるシステムを運用するのか?」と考えると、自前で監視ステムを運用する気になれない。

ということで、僕のお得意のDatadogを使って、どこまでGCPが監視できるのか探ってみることにす。

## Datadogは、GCP パートナーエコシステムのメンバーだった。
 
[2014/11/04のプレスリリース] ["Datadog joins Google Cloud Platform Partner Ecosystem to Monitor Infrastructure and Applications at Scale"](https://www.datadoghq.com/press-posts/datadog-joins-google-cloud-platform-partner-ecosystem-monitor-infrastructure-applications-scale/)によると、GAEのIntegration(monotiringを簡単に始める仕組み)を発表し、パートナーエコシステムに加わったらしい。

僕の記憶を紐解くと、[GCPは、5月にStackdriver購入](http://googlecloudplatform.blogspot.jp/2014/05/welcome-stackdriver-to-google-cloud-platform.html)していたと思う。このタイミングでなぜDatadogをパートナーエコシステムに加えのかも興味深い動向のような気がする。僕は、「GCPとして各部品を統合的に監視できるサービスを早急に用意しておく必要があった。」のではないかと個人的に思っている。そして僕は、GAEをGoogleのコンソール以外から監視できるサービスをDatadog以外から見つけることができなかった。(検索不足かな〜....)


## Docker(google container engine)に関していうと

Dockerに関していうと、GoogleによってContainer Advisor ([cadvisor](https://github.com/google/cadvisor))を公開しているものの、単独でメトリクスが取れるだけで他の監視情報と連携して監視ができるとは言い難い状況ではないかと推測する。(間違っていたら、是非ご指摘ください。)

更にアプリケーシション層のエンジニアに好まれるNew Relicの状況を見てみると、個別のコンテーナーにNew Relicのエージェントをインストールしないと、それぞれのコンテーナー内の情報までは収取仕切れないようである。

Datadogの現状を見てみると、次の３通りの方法からコンテナーのメトリクスを収集ができるような仕組みになっている。

1.Datadog Agent 専用コンテナをメトリクス収集 
2.各独立したコンテナー内とホストOS上にインストールしたDatadog Agentによるメトリクス収集
3.Docker Engineが動作している、ホストOS上にインストールしたDatadog Agentでプリビレッジモードを使ってメトリクス収集

このように柔軟に対応できるのはDatadogが独自に持っているAPI群に加えて、[Etsy](https://www.etsy.com/jp/)が公開している[Statsd](https://github.com/etsy/statsd/)のfork版を、Datadog Agentに内包しているからである。

**[1のケースと、2のケース]**

![Traditional-2.png](https://qiita-image-store.s3.amazonaws.com/0/53101/5264692f-fd8f-feb5-7896-446eaac02c32.png "Traditional-2.png")

**[3のケース]**


![DockerImage1.png](https://qiita-image-store.s3.amazonaws.com/0/53101/86d2a189-7047-5cf6-b74c-5d397d8c3079.png "DockerImage1.png")



1と3の方法が取れるとい観点からしてもDatadogが一日の長がある感じがする。今後、Dockerコンテナの監視に対する課金がどのように出来上がっていくかはまだまだ未定なものの、 **最も料金が削減できるAgentのインストール構成が自由に選択できる**からである。


## Datadogが持っているGCP Integrationsを調べて見る。

DatadogのIntegrationには、 **既にDocker, GAE, GCPのインテグレーションが準備されている。 **Datadogのダッシュボードから、ボタンをクリックして最小限の設定を追記するのみで、数分以内には監視が始められるのである。早急に、Google Contener Engine専用のIntegrationが公開されるのを期待したいものだ。


![gcp-integration_1.png](https://qiita-image-store.s3.amazonaws.com/0/53101/778ef6be-c3b0-2a00-8b8b-d3a554369627.png "gcp-integration_1.png")

この赤枠で囲ったGCPのインテグレーションを使えば、GCPで集めたメトリクスと、他のイベント情報(例えば:github, その他)やミドルウェアから集めたメトリクスを同じ画面で見ることができる。

そして、Datadogにメトリクスとイベントを集約することによって実現する、タグを使ったインフラのドリルダウンのイメージは、[「Datadogの本当の魅力とは」](http://qiita.com/jhotta/items/e7e20a1acd797bf2665b)を参照してもらいたい。


## Google App Engineの監視への探訪は。

個人的に昔からお付き合いのあった感のあるGAE=松尾＝Pythonなんだけど、Googleが運用しているからという視点で、GAEを監視するなんていう視点は全然なかった。もっと言うと、GAEの状況をGEAの周辺で起きているイベントをtagを使って重ね合わせて監視するなんて想像も付かなかった。

どのような情報が集められるのかなと思い[ソース](https://github.com/DataDog/gae_datadog/blob/master/datadog.py)を覗いてみると次のものが取れそうだ。

- project_name
- datastore
- memcache
- task_que
  - queue_name
  - tasks
  - oldest_eta_usec
  - executed_last_minute
  - in_flight
  - enforced_rate
- request
  - start_time
  - api_mcycles
  - cost
  - finished
  - latency
  - mcycles
  - pending_time
  - replica_index
  - response_size
  - version_id

とりあえず、Datadogの[blog](https://www.datadoghq.com/2014/11/monitor-google-app-engine-datadog/)記事を基に使い方を見ていくことする。"Setup and configuration"の部分に3ステップに分かれて手順が書かれ、最も重要な部分が端折って書かれているが、Datadogへのユーザー登録後に実際に必要なステップは、以下の通りである。

1.Datadogのダッシュボードで `Integrations`タブ -> `Integration`プルダウン -> `Google App Engine`タイルと移動して、`Available`にカーサーを当て、クリックする。
2.ポップアップ画面で`configuration`タブを選択し、指示に記載内容に従って設定作業をするめる。

![Screen Shot 2014-12-14 at 00.46.23.png](https://qiita-image-store.s3.amazonaws.com/0/53101/9166351e-fae8-3bd6-2169-77438bda3e43.png "Screen Shot 2014-12-14 at 00.46.23.png")

- DatadogのGAEモジュールをgithubから取得する。
- GAEのapp.yamlに、datadogのhandlerの記述を加える。
- GAEのapp.yamlに、Datadoへメトリクスを送信するために必要なAPIキーの情報を書き込む。

3.アプリケーションのURLをポップアップの`Datadog endpoint URL`の部分に入力する。
4.Task queuesの情報を、`Task queues (comma separated)`の部分に入力する。
5.`Install Integration`ボタンをクリックする。

ここまで設定ができると、datadogのダッシュボードから`Dashboards`タブ -> `Dashboards List`プルダウンを選択して表示されたページの画面右側の`Integration Dashboards`の列に`Google App Engine`と表示されいるので、ダブルクリックし、スクリーンボードを表示します。

![GAE-Dashboard-Final.png](https://qiita-image-store.s3.amazonaws.com/0/53101/d9936fd5-f0b0-ad1a-1250-def8cd9958a0.png "GAE-Dashboard-Final.png")

先に示した一般的に収集できる情報以外に、アプリケーションから直接収集したメトリクスを送信したい場合は、[DogStatsD](http://docs.datadoghq.com/guides/metrics/)か[datadogのAPIライブラリー](http://docs.datadoghq.com/api/)を使って、Datadogのサービスへ送信することができます。

以下に示すのが、pythonプログラム内からDatadog API経由でメトリクスを送信するサンプルになります。このサンプルは、page.viewというタグにメトリクス値の1000を送り続けるという単純なサンプルになります。

``` python
from dogapi import dog_http_api as api

api.api_key = 'YOUR_API_KEY'
api.application_key = 'YOUR_APPLICATION_KEY'

# Submit a single point with a timestamp of `now`
api.metric('page.views', 1000)

#see more examples here: http://docs.datadoghq.com/api/
```

ここまで、表示されれば、Datadogの機能を使ってGAEのメトリクスを基にアラートを設定したり、他のイベント情報と重ねわせて表示しつつ、GAEで動いているアプリの状況をより詳しく把握できるようになりました。(重ねわせて把握するところは、別の機会に詳しく書くとします。)


## Google Cloud Platformの監視への探訪は。

この部分は、専用ダッシュボードの存在と各インスタンスのメトリクスが取れているところまでは確認できのだが、Blogのポストにするにはもう少し時間をかけて検証が必要と判断したため、今回はこれ以上書かないことにする。(続きをお楽しみに。)


## Docker(google container engine)の監視への探訪は。

僕が記事を書くよりも、Qiitaの"DockerとDatadog"のHowto集の方が全然良いことは、検索をしていて痛感してしまった。是非次のURLのリンクを参照してもらいたい。

[[docker datadogの検索結果]](http://qiita.com/search?utf8=%E2%9C%93&sort=rel&q=docker+datadog)


## まとめ

昨今、GAEとDockerの部分がIntegrationで簡単に監視がスタートできれば、GCEに関しては各インスタンスにDD-agentをインストールし、ミドルウエア用のIntegrationを設定すれば、GCPが出しているインスタンスのメタデータさえとれれば、それ以降はホストタグを使った紐付けになるような気がする。(調べ終えていたいので、断定的には発言することはできないが…)

それにしても、 **時間切れ感がいなめない。**　

折角の機会なのに深く掘り下げてGCP Integrationについて述べられず、非常に心残りである。なので、GCPをベースとしたインフラでのDatadogの有効な使い方については、改めて調べなおし記事を書こうと思う。

2014年も、皆様が素晴らしいクリスマスを迎えられることを心から願っています。