1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

DatadogAdvent Calendar 2022

Day 16

Datadog Forwarderを使用してログストリーム単位でDatadog Monitorを作成する

Posted at

What's This

こちらの記事で、ロググループのメトリクスフィルターで検知した文字列をDatadogに流してログ監視する
流れを作ったものの、不都合が生じる場面がありました。

問題点

以下の例で考えてみます。
ロググループがあり、その下にふたつログストリームを作成しています。

例
AWS側
ロググループ:EC2-LogGroup
ログストリーム:
ec2-ichigouki
ec2-nigouki
メトリクスフィルター:Error

Datadog側
上記ロググループで設定されたメトリクスフィルターを通して、
流れてきたError文字列を監視するモニターを作成する。

前回の方法では、ログストリーム単位ではなく、ロググループ単位でモニターを作成していました。

なので、ec2-ichigouki、ec2-nigouki どちらか一方のログストリームで監視文字列"Error"が生成された場合、
どちらのログストリームでErrorが発生したのかを区別することができません。
ロググループ単位でしか検知できないためです。

なので、ログストリーム単位でモニターを作成しました。メモです。
あくまでメモなので、参考にされる場合は、公式ドキュメント等の副読的な感じで読まれると幸いです。

イメージ

スクリーンショット 2022-07-21 13.37.34.png

1.CFn実行

Datadog Forwarder Lambda 関数をデプロイする。
https://docs.datadoghq.com/ja/serverless/forwarder/
スクリーンショット 2022-06-29 12.14.35.png

2.インストールされた Forwarder へ、Cloud watch logsトリガーを設定。

https://docs.datadoghq.com/ja/logs/guide/send-aws-services-logs-with-the-datadog-lambda-function/?tabs=awsconsole
スクリーンショット 2022-06-29 13.21.19.png

スクリーンショット 2022-06-29 13.42.52.png

3.フィルターパターンを設定する。

2で設定した文字列がログストリーム内で発生したら、CL watch logsのトリガーが実行されて、DDに飛んでいく。

※ただ、トリガーではロググループ単位でしか設定できない。
Datadog logs側で、ログストリーム単位でモニターを作成するために、以下を実施する。

※一度トリガーを発生させて、DD logsへログを転送させないと、
Datadog GUI上で任意のログストリームのメトリクスは発見できませんでした。
なので次の手順を行います。

4.各ログストリーム単位で、ERROR文字列をログイベントでテスト発行し、一度datadog logsに流す。

流れてきたログ内容から、ログストリームの箇所を押下し、add facetでログストリーム単位でメトリクスを生成。
(Event Attributes > i:log streamの箇所)

スクリーンショット 2022-06-30 17.09.54.png

4.(Terraformで作成する場合)

基本的には、一度トリガーを発生させてdatadog Logsへログデータを送信しないと、
ログストリームのメトリクスを監視するモニターは作成できないと認識しています。

しかし、以下の方法で、トリガーを発生させずにモニターを作成することができました。
すでに本番運用していたり、トリガーを発生させずにモニターを作成したい場合などは、こちらで解決できるのではないかと思います。

備考

ちなみに、検知したい文字列が複数ある場合を想定します。
そうなると、手順2.で、Cloud watch logsトリガーを設定する際に、複数のサブスクリプションフィルターを設定するかと思いますが、
サブスクリプションフィルターは1つのロググループあたり、2つしか作成できません(2022/07/21時点)

なので、複数設定したい場合は、以下のように設定すると良いかと思います。

サブスクリプションフィルターで、フィルターパターンに以下のように入れる

フィルターパターン: ?error ?alert ?Error ?Alert

Datadog Monitorのクエリに以下のように、検知したい文字列を入れる

こうすることで、1つのモニターにつき、1つの文字列を検知するように設定可能。

logs("@aws.awslogs.logStream:ログストリーム名 error")
logs("@aws.awslogs.logStream:ログストリーム名 alert")
logs("@aws.awslogs.logStream:ログストリーム名 Error")
logs("@aws.awslogs.logStream:ログストリーム名 Alert")

Reference

https://docs.datadoghq.com/ja/serverless/forwarder/
https://docs.datadoghq.com/ja/logs/guide/send-aws-services-logs-with-the-datadog-lambda-function/?tab=awsconsole
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html
https://github.com/DataDog/datadog-serverless-functions/blob/master/aws/README.md
https://htnosm.hatenablog.com/entry/2021/12/06/090000

1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?