こんにちは 古川です。
私の所属している部署ではこれまでサーバのモニタリング機能、リソース監視などで利用していた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 は管理画面から確認出来ます。上記コマンドを叩けばインストール完了です。
エージェントを導入するだけでホストサーバのメトリクスが取れるようになりました。
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に送られるようになったはずです。
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」にアラートが出た際に表示するメッセージ設定して下さい。
簡易的な説明となりましたが、Datadogでのアプリケーションログ監視ができました。
導入を通して
datadog-agentのインストールからカスタムログの収集、監視まで比較的簡単に導入することが出来ました。
しかもモニタリングやログ集約、監視などがDatadogで対応出来るので、障害発生時の調査が効率的に行えるのが良いですね!
今回はアプリケーションのログを収集の為に利用しましたが、Datadogはインテグレーションが豊富で多くのサービスとの連携が可能なので、
今後色んなサービスで有効活用できればと思います。