◾️はじめに
今回は、datadog でフィルタリングについて色々思うことがあったので メモしておく。
目次
【1】複数条件 1)条件演算子 【2】数値に対する検索 1)「:」+ 不等号 2)「:」+ [X TO Z] 【3】特殊記号 1)ワイルドカード「*」 2)ワイルドカード「?」 3)除外「-」 【4】エスケープ 1)特殊文字とスペース 2)注意点:「/」は特殊文字じゃない 【5】属性検索 @ 【6】テンプレート変数を使う場合 1)後方一致 2)注意点:テンプレート変数適用において部分一致は非対応(っぽい)
【1】複数条件
基本的にスペースで区切ればAND条件でフィルタリングされる
1)条件演算子
* 条件演算子も用意されていて、()で囲めば複雑なフィルタリングも可能 * 以下の公式ドキュメントを参照
https://docs.datadoghq.com/ja/logs/explorer/search_syntax/
https://docs.datadoghq.com/ja/tracing/trace_explorer/query_syntax/
https://docs.datadoghq.com/ja/metrics/advanced-filtering/
演算子 | 説明 | 例 |
---|---|---|
AND | 積: 両方の条件を含むイベントが選択 | ("Timeout" AND "Out of memory") |
OR | 和: いずれかの条件を含むイベントが選択 | ("Timeout" OR "Out of memory") |
NOT | 否: 対象の逆(右例だと「Out of memory」以外) | ("Timeout" OR NOT "Out of memory") |
- | 除外: 対象を除外(右例だと「Out of memory」を除外) | ("Timeout" AND -"Out of memory") |
【2】数値に対する検索
https://docs.datadoghq.com/logs/explorer/search_syntax/#numerical-values
より抜粋 ~~~~~~ 数値属性を検索するには、まずその属性をファセットとして追加します。 次に、数値演算子 (<、>、<=、または >=) を使用して、 数値ファセットの検索を行うことができます。 ~~~~~~
1)「:」+ 不等号
10秒以上のクエリを検索する場合
@demo_time:>=10
2)「:」+ [X TO Z]
1秒から10秒のクエリを検索する場合
@demo_time:[1 TO 10]
【3】特殊記号
* 以下の公式ドキュメントを参照
https://docs.datadoghq.com/ja/logs/explorer/search_syntax/
https://docs.datadoghq.com/ja/tracing/trace_explorer/query_syntax/
1)ワイルドカード「*」
* Key / Value 共にワイルドカード「*」を使用可能
例
https://docs.datadoghq.com/ja/metrics/advanced-filtering/
例 | 説明 |
---|---|
service:web* | web で始まるすべてのログメッセージに一致 |
service:*web | web で終わるすべてのログメッセージに一致 |
*:web | web という用語ですべてのログ属性を検索 |
2)ワイルドカード「?」
* ? ワイルドカードを使用して 1 つの特殊文字またはスペースに一致
例
# 値が hello world の属性 my_attribute を検索する
@my_attribute:hello?world
3)除外「-」
* 対象を除外 * ("Timeout" AND -"Out of memory") だと「Out of memory」を除外
https://docs.datadoghq.com/logs/explorer/search_syntax/#tags
より抜粋 (env:prod AND -version:beta) は、 タグ env:prod を含み、タグ version:beta は含まないすべてのログに一致
【4】エスケープ
* 以下の公式ドキュメントを参照
https://docs.datadoghq.com/logs/explorer/search_syntax/#escape-special-characters-and-spaces
1)特殊文字とスペース
* 「\」でエスケープする必要がある
datadog の特殊文字
+ - = && || > < ! ( ) { } [ ] ^ " “ ” ~ * ? : \ #
2)注意点:「/」は特殊文字じゃない
* 「/」は特殊文字じゃないので、エスケープは不要
【5】属性検索 @
* 長くなったので、以下の関連記事に分冊
datadog ~ 属性/ファセット/属性検索@ ~
https://dk521123.hatenablog.com/entry/2025/02/26/150349
【6】テンプレート変数を使う場合
* 基本的には、Filter部分に 「@【適用したいパラメータ】:$【テンプレート変数名】.value」を追加する
例
@region:$region.value
1)後方一致
@【適用したいパラメータ】:[何らかの文字列]$【テンプレート変数名】.value で対応可能 => 以下の公式ブログの「Consolidate template variables by attributing values as a partial string」にも記載
例
# e.g. service:demo-service-dev/demo-service-stage/demo-service-prod @service:demo-service-$env.value
2)注意点:テンプレート変数適用において部分一致は非対応(っぽい)
* 上述「1)後方一致」はOKなのだが 例えば「host:"/aws-glue/app/$【テンプレート変数名】.value/jobs/job_name"」 のようなことは、(将来的にはわからんが、今のところ)できない => 以下のサイト
https://stackoverflow.com/questions/74205227/use-template-variable-within-a-log-query-in-datadog
対応案
* ワイルドカードや複数条件で対応できるかどうか考える
対応例
# e.g. host:"/aws-glue/app/{dev/stage/prod}/jobs/job_name" # Case1 host:/aws-glue/app/* @env:$env.value # Case2 host:(/aws-glue/app/dev/jobs/job_name OR /aws-glue/app/stage/jobs/job_name OR /aws-glue/app/prod/jobs/job_name) @env:$env.value
参考文献
https://qiita.com/yoyoyo_pg/items/91dadbf250917238b1e7
関連記事
datadog ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2024/03/30/004746
datadog ~ 属性/ファセット/属性検索@ ~
https://dk521123.hatenablog.com/entry/2025/02/26/150349
datadog dashboard ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2025/02/09/000106
datadog dashboard ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2025/02/17/184724
datadog dashboard ~ あれこれ編 ~
https://dk521123.hatenablog.com/entry/2025/02/19/220516
datadog Logs ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2025/02/14/200308
datadog Logs ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2025/02/15/213417
datadog Alert ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2025/02/16/232413