Datadog Log ManagementでNginxのエラーを監視する

SRE Group Managerをしている前田 (@glidenote)です。 弊社では先日監視システムを刷新し、Datadogを全サーバに導入し、今年3月にDatadogから正式リリースされたDatadog Log Managementを利用しNginxのエラー監視をするようにしました。今回はその件について紹介します。

TL;DR

  • Datadog Log Managementを利用して、Nginxのエラーを監視するようにした
  • とりあえずLogを送っておいて、グラフを作ったり、後から必要な形に加工するという運用が簡単に出来るようになった
  • 正式リリース間もないので、まだまだな部分があるが、手軽にログ監視が出来るので今後の機能拡張が楽しみ

前提

以前から弊社では、

  • Fluentdを利用して計10数億行/dayの各種ログを処理
  • NginxのログはFluentdを利用して、BigQuerySentryに送って保管&監視
  • アプリ自体のエラーはBugsnagで監視

という感じの処理を行っています。

従来のSentryを利用したNginxのログ監視概要

これまで弊社ではNginxのログをFluentd + grep Filter Plugin+ fluent-plugin-sentryを利用して、Sentryに送り監視をしていました。

f:id:kaizenplatform:20180705173128p:plain

下記はSentry上でのエラーイベントの表示画面。エラートラッキングサービスなので、エラーの詳細なども見やすいです。

f:id:kaizenplatform:20180705165740p:plain

Datadog Log Managementとは

  • Datadog社の提供するログ管理サービスで、ログを収集し、検索、グラフ化、アラートの作成などが容易になるサービスです

Introducing Log Processing and Analytics in Datadog from Datadog TV on Vimeo.

  • 弊社ではNewrelicを利用しているので、まだ利用出来ていないですが公式の動画を見るとDatadog APM と組み合わせると、アプリのパフォーマンスが劣化したときに、どんなことが発生していたか該当時刻のログと合わせ調査が行えたりするようです。
    • Datadog APMとの組み合わせは現在検証中なので、正式導入した時にまたこのブログで紹介出来ればと思います。

Datadog Log Managementへログを送信する

Datadog Log Managementにログを送る方法はいくつかありますが、弊社では全サーバにDatadog Agent (version >= 6.0)が導入済みなのでDatadog Agentを利用してログを送信しています。 Datadog Agentを利用してログを送信する場合は、はじめに/etc/datadog-agent/datadog.yaml で、Log機能を有効にし、

logs_enabled: true

NginxのLog Directory /var/log/nginx なので、 下記のような /etc/datadog-agent/conf.d/nginx.d/conf.yaml という設定ファイルを用意します。(service部分などは適宜変更してください)

init_config:

logs:
  - type: file
    path: /var/log/nginx/*.log
    service: webapp-k2
    source: nginx
    sourcecategory: http_web_access

設定ファイルを用意し、datadog-agentを再起動するとDatadog Log Managementにログが送信されるようになります。

主要なOSS、コンテナ、クラウドサービスに予め対応しているので、ドキュメント通りに設定すれば、すぐ動くようになっています。

f:id:kaizenplatform:20180705140415p:plain

f:id:kaizenplatform:20180705141145p:plain

f:id:kaizenplatform:20180705141211p:plain

対応していないものでもDatadogが開発しているFluentdのプラグインfluent-plugin-datadogなどを利用してログ送信が可能です。

f:id:kaizenplatform:20180705141341p:plain

ログのParse Ruleをカスタムする

Datadog Log Management側でログを自動でよしなにParseしてくれるのですが、ログの形式をカスタムしている場合、上手く処理がされないので、その場合は、Grok Parserを利用して対応することが出来ます。

f:id:kaizenplatform:20180705141831p:plain

ログを監視しアラートを作成する

ログが送信されると下記のような形で確認が出来るようになります。 f:id:kaizenplatform:20180705142710p:plain

アラートは下記のような条件で抽出し、発生するたびにアラートが飛ぶようになっています。

  • @http.status_code:[500 TO 599]
  • env:prd
  • service:webapp-k2

f:id:kaizenplatform:20180705143439p:plain

Slackへの通知は下記のような感じ。

f:id:kaizenplatform:20180706144144p:plain

ちなみにSentryからの通知は下記のような感じ。現時点ではSentryの通知の方が見やすい f:id:kaizenplatform:20180706144318p:plain

従来の構成(Fluentd+Sentry)との比較

  • 導入が非常に簡単
  • 条件を指定しないと全ログが同じ画面に表示されているので、管理画面が見づらい
    • 弊社はNginxの他に /var/log/secure などのログも収集しているので、全部が同じ画面に混在して表示されているのは見づらい
  • アラートが飛ぶのに数分かかる。
    • Sentryは発生した瞬間にアラートが飛んでくる
    • 開発ロードマップには入っているので、そのうち改善されるはず

正式リリースされて間もないので、まだまだな部分がありますがDatadog Log Managementは簡単に利用出来て、なにより監視サービスに統合されておりログ監視が容易になるのが素晴らしい。今後下記のような機能拡張が予定されているので楽しみなサービスです。

f:id:kaizenplatform:20180705150424p:plain