UUUM攻殻機動隊(エンジニアブログ)

UUUMのエンジニアによる技術ブログです

Datadog の導入がめっちゃ楽だった話

こんにちは、新人エンジニアのハトネコエです。
気付いたらプログラミングを始めて2年が経ちました。

みなさまはゴールデンウィークをいかがお過ごしでしたでしょうか?
私は人生初めてVPSを契約しました。

Ansible でサーバー構築のレシピを四苦八苦しながら作り、アプリケーションを動かせるまで至ると、
今度はサーバーの監視をしたくなってきます。

(↓なお、Ansibleについては以前、弊社のナカハシがこちらの記事で取り上げました)

サーバー監視のクラウドサービスと言えば Mackerel がおなじみです。
見やすいグラフが印象的で、弊社でも一部利用させていただいております。

Mackerel が便利なのは知っているので、
今回は異なるクラウドサービスを使おうと考えました。 Datadog です。

f:id:nekonenene:20170508180215p:plain

わんわん。

Datadog の魅力は、その多彩な連携にあります。

f:id:nekonenene:20170508180412p:plain

これを書いている時点で 115 のサービスやアプリケーションとの連携が用意されています。

連携方法はサービスやアプリケーションによってややこしいものもありますが、
下のように連携ページに設定方法が書かれているので、ドキュメントを探しに行かなくてよいのがなかなか親切です。

f:id:nekonenene:20170508180950p:plain

Datadogによる監視を有効にするには、Datadogエージェントをサーバーにインストールする必要があるのですが、
Ansibleですとそれがとても簡単です。

f:id:nekonenene:20170509101908p:plain

Datadog のアカウントを取得すると、上のスクリーンショットのようにインストール方法の一覧が出てきて、
その中に Ansible も含まれています。

ansible-galaxy コマンドを通して Datadog のオフィシャルロールをダウンロードしてきて、
YAMLファイルに数行記述し Ansible を実行するだけで、エージェントはインストールされます。

それだけでもサーバーのCPU使用率やメモリ使用率などは見られますが、
より詳しく、例えば

  • プロセスの死活監視をしたい
  • 指定したURL(公開しているサイト)にHTTPアクセスし応答があるか確認したい
  • nginxへのリクエスト数を監視したい

といった監視項目を実現するには、下のようなvarファイルを作り、
Playbook内のvars_filesのひとつとして指定すればOKです。

datadog_api_key: 'your_datadog_api_key'

datadog_checks:
  process:
    init_config:
    instances:
      - name: ssh
        search_string: ['ssh', 'sshd']
      - name: nginx
        search_string: ['nginx']
  http_check:
    init_config:
    instances:
      - name: Example Project
        url: http://example.com
        timeout: 5
  # 注)Datadog で nginx 連携をONにしてください
  # また、stub_status の設定が必要です (参考: http://qiita.com/hiroki_y/items/099a9a7c28ae7c592a2e )
  nginx:
    init_config:
    instances:
      - nginx_status_url: http://127.0.0.1/nginx_status

そしてPlaybookを実行すると、Datadogの公式Ansible roleは
Datadogエージェントの設定フォルダ
/etc/dd-agend/conf.d 以下に process.yaml , http_check.yaml , nginx.yaml を作成し、
その後Datadogエージェントを再起動し監視が動くようにしてくれます。

f:id:nekonenene:20170509105935p:plain

f:id:nekonenene:20170509104318p:plain

f:id:nekonenene:20170509104915p:plain

こんなふうに取得できるようになります。
このグラフではHTTPレスポンスが返ってこなくなった時間があることがわかりますね。(たしかバーチャルホストの設定をいじってた時間)

また、Ansible自体との連携もあります。
実行時間やchanged数、failed数、のカウントをおこなえます。

最初は「そういうAnsibleの結果はローカルに表示されるからいらないのでは?」と思っていたのですが、
実際ログデータとして取ってみると、CPUのスパイクが発生している原因が明確になりましたし、
チーム開発だと「気付いたらサーバーの設定変わってる、あ、この時間にrole実行されてるじゃん」とわかって便利かもしれません。

f:id:nekonenene:20170509111215p:plain

上に書いてきた監視設定をMackerelで実現しようとすると、プラグインインストールやカスタムメトリックの設定などをがんばらなければいけなく、けっこうな時間を取られます。
「監視の設定のために時間を取られるなんて……」と考える方にとっては、MackerelよりDatadogの方がいいでしょう。

Datadogのいいところは監視設定の簡単さにとどまらず、ダッシュボードの使いやすさにあります。
グラフのサイズをキーボードの [ キー, ] キーで変更でき、
グラフのタイトルをクリックするとグラフをブラウザサイズいっぱいで見られるといった、利便性の高いショートカットが用意されています。

f:id:nekonenene:20170509112620p:plain

それからもちろん、アラート機能もあります。
ですが、残念なことにこれは無料プランでは使うことが出来ません。本当に残念です。

設定をすると、条件に一致したときSlackなどに通知をおこなうことができます。

f:id:nekonenene:20170509113540p:plain

料金は年払いだと月額 $15 / host、月払いだと月額 $18 / host での提供です。
https://www.datadoghq.com/pricing/

ほぼMackerelと同額ですね。
https://mackerel.io/ja/pricing/

契約して最初の2週間は有料プランが体験できますので、
導入は簡単ですからお試しくださることをお勧めします。

こうしてサーバー監視までおこなうと、次はElasticsearchとKibanaを用いたログのブラウザ表示とか
やってみたくなってきますね! 次の長期休暇が訪れたら、のんびり設定してみたいなあと思います。