Datadogを活用したアプリケーションのログ監視

こんにちは 古川です。
私の所属している部署ではこれまでサーバのモニタリング機能、リソース監視などで利用していたMackerelから左記に加えてログ収集も出来るDatadogへの移行が始まりました。
同じタイミングでアプリケーションのログ監視を行う必要があったので、今回Datadogを利用して対応することにしました。
(実際の業務ではAnsibleとTerraformを利用して実装しましたが、今回は分かり易い様に手動で対応した場合で記載しています)

実現したいこと

  • Datadogにアプリケーションのログを集約
  • 集約されたログを検知し、アラートを通知

前提

  • CentOS7

datadog-agentの導入

まず、ログを送信するサーバでdatadog-agentのインストールを行います。

$ DD_API_KEY=<DATADOG_API_KEY>  bash -c "$(curl -L https://s3.amazonaws.com/dd-agent/scripts/install_script.sh)"

DATADOG_API_KEY は管理画面から確認出来ます。上記コマンドを叩けばインストール完了です。

エージェントを導入するだけでホストサーバのメトリクスが取れるようになりました。 f:id:AdwaysEngineerBlog:20210319144542p:plain

Datadogに送信したいログの設定

次にログをDatadogに送信する為の設定を行います。まずはdatadog-agentのステータスを確認します。

$ sudo datadog-agent status

表示されるステータスの内容

~~~~~~~~~省略~~~~~~~~~

==========
Logs Agent
==========


  Logs Agent is not running
  
~~~~~~~~~省略~~~~~~~~~

初期設定ではカスタムログをDatadogに送れない設定になっているので、設定を変更します。

ログ送信の有効化

$ sudo vim /etc/datadog-agent/datadog.yaml
~~~~~~~~~省略~~~~~~~~~

##################################
## Log collection Configuration ##
##################################

## @param logs_enabled - boolean - optional - default: false
## Enable Datadog Agent log collection by setting logs_enabled to true.
#
# logs_enabled: false

~~~~~~~~~省略~~~~~~~~~

上記のコメントアウトを外して logs_enabled: trueに変更します

datadog-agentの再起動

$ sudo systemctl restart datadog-agent

ステータスを確認

$ sudo datadog-agent status
~~~~~~~~~省略~~~~~~~~~

==========
Logs Agent
==========

    Sending compressed logs in HTTPS to agent-http-intake.logs.datadoghq.com on port 443
    BytesSent: 0
    EncodedBytesSent: 28
    LogsProcessed: 0
    LogsSent: 0

~~~~~~~~~省略~~~~~~~~~

これでログの送信が有効になりました。
では次に送信するログの設定を行います。

ログを送信する為に構成ディレクトリを作成します。

sudo mkdir /etc/datadog-agent/conf.d/test_apps.d/

上記で作成したディレクトリ以下に設定ファイルを作成します。

sudo vim /etc/datadog-agent/conf.d/test_apps.d/conf.yaml

今回は以下のような内容で保存します。

init_config:

instances:

logs:
  - type: file
    path: /var/www/apps/log/application.log
    service: test_app
    source: application

path項目で/var/www/apps/log/application.logというファイルに書き出されたログをDatadogに送信するように設定します。
注意点としては対象のログファイルをdatadog-agentが参照出来るようにパーミッションを設定して下さい。

datadog-agentの再起動

$ sudo systemctl restart datadog-agent

これで対象ファイルに吐き出されたファイルがDatadogに送られるようになったはずです。
f:id:AdwaysEngineerBlog:20210319144722p:plain

datadogの管理画面上でのアラート設定

では最後に収集したログに対してアラート設定を行います。

Datadogの管理画面のメニューから Monitors → Manage Monitors → New Monitor をクリックし、monitor type一覧から Logsを選択。
まず「Define the search query」で監視したいログを定義します。ログの送信設定でservice名を「test_app」と設定しているので、このservice名で指定します。
次に「Set alert conditions」で閾値を設定します。過去1分以内にログが1件以上とする場合は以下のような設定にします。
必要であれば、「Say what's happening」にアラートが出た際に表示するメッセージ設定して下さい。

f:id:AdwaysEngineerBlog:20210319144742p:plain

簡易的な説明となりましたが、Datadogでのアプリケーションログ監視ができました。

導入を通して

datadog-agentのインストールからカスタムログの収集、監視まで比較的簡単に導入することが出来ました。
しかもモニタリングやログ集約、監視などがDatadogで対応出来るので、障害発生時の調査が効率的に行えるのが良いですね!

今回はアプリケーションのログを収集の為に利用しましたが、Datadogはインテグレーションが豊富で多くのサービスとの連携が可能なので、
今後色んなサービスで有効活用できればと思います。