DatadogのLog Managementにて特定の項目でフィルタをかけたい

Datadog の Log Management にて項目（以下 Attribute）を検索として利用できるものと利用できないものがあることに気づきました。
検索可能な Attribute にする方法がわからず詰まったのでメモしておきます。

今回は [Datadog-Log-Forwarder](https://serverlessrepo.aws.amazon.com/applications/arn:aws:serverlessrepo:us-east-1:464622532012:applications~Datadog-Log-Forwarder) を使って CloudFront のログを上げたあとの状態から開始しています。

## 事前知識 : Attribute とは

ログを選択したときに右からにゅっと出てくる部分に表示されている json の項目のことを指します。

![datadog_attributes.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135041/4315c461-5031-eeed-bbbb-07aa032b6760.png)

[Standard Attributes - Datadog](https://docs.datadoghq.com/logs/processing/attributes_naming_convention/)

Attribute はデフォルトでいくつか規定されており、Log Management へデータ投入後の Pipeline でログ上の項目を Attribute にマッピングしたりするのですが、それはまた別の話。

`Log > Configuration > Pipelines | Standard Attrbutes` で現在の設定が確認できます。

## 特定の Attribute を選択して値が合致するものを除外する

例としてスパイダーからのアクセスを除外してみます。

適当なスパイダーからのアクセスログを選択して、`@http.useragent_details.browser.family` をクリックするとメニューが出てきます。

![datadog_log_exclude_attribute.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135041/9e061951-af1c-a379-aed8-88892fdb5aac.png)

- Search
- Exclude
- Add Column
- Edit facet

この Exclude を選べば Log Explorer から `@http.useragent_details.browser.family:Baiduspider` に合致するものがなくなります。
超便利な UI ですね。

これだと特定のスパイダーしか除去できていないので、別の Attribute を除外項目にしてみます。

`@http.useragent_details.device.brand` が `Spider` のものを Exclude しようと思ったらメニューに出てきません。

![datadog_log_attribute_menu.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135041/e9527a46-152a-1698-b6ce-73b85b8279dd.png)

- Add Column
- Create facet

なにかログ投入時に設定が必要だったのか？
Pipeline でなにかしないといけないのかと思ったのか？
とも思いましたが、そんなことはなかったです。

検索可能な Attribute になっていない場合は、 `Create facet` を選択します。
Group だけ似たようなところがいいので選んで（あとからでも変更できます）、あとはデフォルトのまま Create します。

![datadog_create_facet.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135041/4f18600e-6481-b8ed-3319-21cd9aff1d20.png)

Log Explorer の左カラムにある Filters の WEB ACCESS グループの下に Device Brand が出てきました。
これで Filter の項目として`@http.useragent_details.device.brand`を使うことができます。

![datadog_facet_filter.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135041/cffe49fe-d084-e8f6-6175-5512724a4be2.png)

作成直後は開いてもチェックボックスがひとつもないですが、数分すればアクセスログの `@http.useragent_details.device.brand` に入っている値を表示してくれます。
facet 作成前のデータにはこの Filter は適用されないのでご注意ください。

## facet とは

[Search - Datadog](https://docs.datadoghq.com/logs/explorer/search/)
[Log Explorer - Datadog](https://docs.datadoghq.com/logs/explorer/?tab=facets#setup)

ちゃんとマニュアルに書いてありました。

> A facet displays all the distinct members of an attribute or a tag as well as provides some basic analytics, such as the number of logs represented. This is also a switch to easily filter your data.
> Facets allow you to pivot or filter your datasets based on a given attribute. Examples facets may include users, services, etc…

ログに入っている値をチェックボックスとして一覧にしてくれたり、その件数を表示してくれたり、フィルタ処理もしてくれるのが facet です。

聞き慣れない単語だったのでググりづらく解決方法見つけられなかったです。。
まずマニュアルを読めという話ですが。

## facet を作らずに検索条件にしたい

Live Tail にするとなぜかどの Attribute でも Filter として利用可能になっています。
とりあえず grep したいんだ！というときに使えますね。

![datadog_live_tail.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135041/299a8ed5-34da-eb0e-abb2-c68bcd70a25d.png)