【Datadog】Lookup Processorについて

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/382072/d33f19f5-210d-8a01-e619-59d2613520ae.png">

## はじめに
今回はDatadogのPipelineの機能の一つ、[Lookup Processor](https://docs.datadoghq.com/logs/log_configuration/processors/?tab=ui#lookup-processor) の使い方について書いていこうと思います。
Lookup Processorはその名の通り、指定のログ属性にマッチした値をProcessor上で設定した値にマッピングを行います。

例えば `store_code=001` という値がログに存在している時に、`001`を`銀座店`といったように、人が理解できる値などに置き換えることが可能です。

## 作り方

1.UI画面左のLogs → Configurationを選択
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/382072/21ca5600-7759-2618-6bef-cec170b2132b.png" width=40%>

2.Pipelineを作成する
今回はAPI経由でログを送信し、Lookup Processorの動きを見るので、`Source:api` でFilterします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/382072/193047cc-8f90-826e-58a0-3f3e9fa3fc4a.png">

3.作成したPipelineのトグルを開き、Add Processorを選択し、項目を埋めていく。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/382072/abc61321-833f-f842-ffed-900c5ff17ed7.png">

**各種設定項目について**
- Select the processor type
作成するProcessorを選択します。

- Name the processor
Processorに名前をつけます。

- Set lookup mapping
マッピングのルールを作成します。
Manual Mappingの場合、sourceとtargetが1対1になるように記載します。
CSVを使用して設定することも可能です。

- Fallback value
source属性のvalueがどれにもマッチしない場合に使用されるデフォルトの値です。

- Set source attribute
ログがもつ属性の中でどの属性をsourceとするかを設定します。

- Set target attribute path
上で設定したマッピングのルールの値を置くattribute pathを設定します。

## 実践

Send logsのAPIを使用し、ログを作成します。
今回は下記のようなbodyを持つログを使用します。

```json
{
  "ddsource": "api",
  "message": "hello",
  "store_code": "001"
}
```

Processorを通る前のログ
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/382072/49a63837-ff46-afc4-6f90-fd930ac3d54c.png" width=60%>

Processorを通った後のログ
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/382072/d9d11788-9a37-7f22-81a2-7c2c63a5811d.png" width=60%>

Event Attributesに`store.store_name`が表示されるようになり、マッピングルールで設定した銀座店が反映されていますね。
`store_code`を`002`や`003`にして送信すると、上野店や六本木店のように変化します。

このような感じで、例えばログやDBには情報を持たず、ドキュメントなど切り離された位置に存在していた情報をLookup Processorを使用することで、Datadog上ではそれらを組み合わせて可読性を向上させたログが確認できる。そんなことができるようになります。

## 上級者編
今度はSet lookup mappingにて[Reference Table](https://docs.datadoghq.com/logs/guide/reference-tables/?tab=manualupload)を使用してみます。
こちらを使用することで、一つのsourceを対象に、一度に複数のデータを挿入することが可能です。

こちらを使用するためには事前にReference Tableを登録しておく必要があるので、CSVファイルをアップロードします。
今回は下記のデータを含むCSVファイルを作成しました。

| source | store_name | store_zip_code | store_prefecture |
|:-----------|------------:|:------------:|:------------:|
| 001       | 銀座店        | 104-0061    | 東京         |
| 002     | 上野店      | 110-0005       | 東京         |
| 003       | 六本木店        | 106-0032         | 東京         |

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/382072/6bd6ca4f-7393-b133-32c8-730e46ee17c7.png" width=80%>

**各種設定項目について**
- Table details
Tableの名前を設定します。

- Upload or import data
テーブルのデータをアップロードします。
CSVファイルの直上げからS3のようなCloud storageを使用してアップロードすることも可能です。

- Preview table and schema
ファイルがアップロードされるとこちらが表示されるようになります。sourceにPrimary keyのチェックを追加し、セーブします。

Reference Tableの登録が完了しました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/382072/156c5821-8e83-3245-e6ae-c1580a4d1840.png">

最初に作成したLookup ProcessorのSet lookup mappingをManual MappingからReference Tableに切り替え、作成したReference Tableをプルダウンから選択します。
この時Set target attribute pathをstoreに変更します。こうすることで、store配下にsourceにマッチしたデータが入るようになります。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/382072/07baab05-6bff-76f1-dca9-4b7436ad45e4.png">

変更後、右下のUpdateを忘れずに選択して保存します。

### 実践
上で使用したSend logsのAPIを使用し、再度ログを流します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/382072/9dfd7754-1c98-8147-3de8-9ca048ee72d7.png" width=60%>

このようにstore配下にsource(store_code)が001となるデータが挿入されていますね。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/382072/01ee4817-dbb3-0b61-7948-081a7b215fd8.png" width=60%>

default valueの設定がないため、対応しない値が来た際にはProcessorは動作しません。

## 終わりに
触ってみると思っていたより直感的に操作でき、簡単にデータの追加ができて面白かったのでまとめてみました。一部ドキュメントではカバー仕切れない部分も説明できたかなーとは思います。Reference Tableには少し制限などもあるので、詳細はドキュメントをご確認ください！


## リファレンス
[Lookup Processor](https://docs.datadoghq.com/logs/log_configuration/processors/?tab=ui#lookup-processor)
[Reference Table](https://docs.datadoghq.com/logs/guide/reference-tables/?tab=manualupload)
[Send logs](https://docs.datadoghq.com/api/latest/logs/#send-logs)

![図25.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/382072/24e1c497-b12d-05f6-cbbb-3e352b4b4169.jpeg)