New Relic の ログ解析機能を活用して Key と Value のペアをパースしてログの確認を簡単に

　New Relic のログ解析機能を使って Key-Value 形式のログデータをパースすることができるようになりました。Grokパターンを使った基本的なパース方法とカスタマイズの方法を紹介します。
 　New Relic のログパースはGrokパターンと正規表現に対応しています。Grokパターンを使うことでログデータを簡単に解析してパースすることができます。Grokパターンを使ったログのパース方法については下記のブログをご確認ください。

https://newrelic.com/jp/blog/how-to-relic/how-to-use-grok-log-parsing

:::note info
最新のアップデートの詳細はこちら
[New Relic アップデート一覧
](https://newrelic.com/jp/blog/nerdlog/new-relic-update  "New Relic アップデート一覧")
:::

:::note info
無料のアカウントで試してみよう！
[New Relic フリープランで始めるオブザーバビリティ！](https://qiita.com/ktst79/items/5ee74b34e6adb8a7a6fa)
:::

# 今回のポイント
この記事で紹介しているポイントは、次の２つです。
1. **基本的な Key-Value 形式のログデータのパース方法を知る**
 Grok パターン keyvalue() を使用して Key-Value 形式のログをパースする方法を紹介します。
2. **パース方法をカスタマイズする方法がわかる**
 Grok パターン keyvalue() のオプション設定を使って解析動作をカスタマイズする方法を紹介します。

https://docs.newrelic.com/jp/docs/logs/ui-data/parsing/#parsing-key-value-pairs

# Grok パターン keyvalue() を使用した Key-Value 形式のログのパース方法
例えば、動作を簡単に把握するためにわかりやすい下記のログを例として使用します。
```:解析対象のログ
 key1=value1,key2=value2,key3=value3
```
上記のログを解析して Key と Value に分割して取り込む場合は、下記のようにGrokの式を設定します。
```:keyvalue
%{GREEDYDATA:custom_attribute_prefix:keyvalue()}
```
実際に New Relic 上で設定すると下記のように変換が実行されます。
![log1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043202/9e1e4742-15ce-42ba-be32-f1edd2e9a469.png)
![parse1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043202/814ec219-ff6a-43fc-a886-814bb55809fc.png)

　変換後はパーシングルールで設定した custom_attribute_prefix がプレフィックスとして属性名に付与されます。これだけでKey-Value 形式のログデータをパースして New Relic に取り込む事ができます。

# Grok パターン keyvalue() のオプション設定を使って解析動作をカスタマイズ
## 区切り文字を変更する
デフォルトは ```,```（カンマ） が区切り文字として設定されています。オプションで ```delimiter``` を設定すると区切り文字を変更する事ができます。

例えば、区切り文字に```;```（セミコロン）を使用する場合は下記のようになります。 
```:解析対象のログ
 key1=value1;key2=value2;key3=value3
```
上記のログを解析するために ```delimiter``` のオプションを設定します。
```:keyvalue
%{GREEDYDATA:custom_attribute_prefix:keyValue({"delimiter": ";"})}
```
```,```（カンマ）以外の区切り文字が指定されている場合でもこのように先ほどと同じように変換されています。
![parse2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043202/ab5ef3d9-1725-43e6-b57e-b723232ee101.png)

## keyValueSeparator
key と value の割り当てに使用されている文字列を変更する事ができます。デフォルトは ```＝```（イコール） が設定されています。オプションで ```keyValueSeparator``` を設定すると変更する事ができます。
例えば、key と value の割り当てに ```:```（コロン）を使用する場合は下記のようになります。 
```:解析対象のログ
 key1:value1;key2:value2;key3:value3
```
上記のログを解析するために ```:```（コロン） のオプションを設定します。
```:keyvalue
%{GREEDYDATA:custom_attribute_prefix:keyValue({"keyValueSeparator": ":"})}
```
```:```（コロン）以外のkey と value の割り当て文字列が指定されている場合でもこのように先ほどと同じように変換されています。
![parse3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043202/7fbff8fa-0c92-4890-9e9c-f81a2de2cee3.png)

## プレフィックスなし
変換後の値もカスタマイズできます。プレフィックスを設定しない場合はオプションで ```noPrefix``` を設定すると変更する事ができます。

例えば、下記のログを変換する際に属性のプレフィックスを設定しない場合です。
```:解析対象のログ
 key1=value1,key2=value2,key3=value3
```
上記のログを解析するために ```noPrefix``` のオプションを設定します。
```:keyvalue
%{GREEDYDATA:custom_attribute_prefix:keyValue({"noPrefix": true})}
```
このパターンで設定するとプレフィックスが設定されずにkeyがそのまま属性名として取り込まれます。
![parse4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043202/96e3f6d8-e52f-4b7b-ab3d-b910eeb6d896.png)

## オプションの組み合わせ
　keyvalue() のオプション設定は複数組み合わせる事が可能です。 **各オプションの設定を```,```（カンマ）で区切って連結する必要があります。** これまで紹介したオプションをすべて組み合わせた例を紹介します。
　区切り文字に **```;```（セミコロン）**, key と value の割り当てに **```:```（コロン）**, **プレフィックスなし** を組み合わせると下記のようになります。

例えば、下記のログを変換する例を紹介します。
```:解析対象のログ
 key1:value1;key2:value2;key3:value3
```
上記のログを解析するために ```delimiter```, ```keyValueSeparator```, ```noPrefix``` のオプションを設定します。
```:keyvalue
%{GREEDYDATA:custom_attribute_prefix:keyValue({"delimiter": ";", "keyValueSeparator": ":", "noPrefix": true})}
```
このパターンで設定すると複数のオプションが適用されて取り込まれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3043202/1f71aff5-1918-419b-8afa-928ce350e141.png)

# まとめ
　これまでは Key-Value 形式のログデータをパースする際は、それぞれ設定する必要がありましたが keyvalue() を使うと簡単に取り込む事が可能です。項目が可変の場合でも簡単にパースできるのは大きな利点です。他の Grok パターンと組み合わせる事が可能でログの一部が Key-Value 形式のケースにも対応しています。複数のパターンを組み合わせてログを取り込み時に変換してダッシュボードでの利用やアラート設定をより柔軟に実施できるようにログの解析機能を活用していきましょう。

　New Relicでは、**新しい機能やその活用方法**について、QiitaやXで発信しています！
**無料でアカウント作成**も可能なのでぜひお試しください！

:::note info
New Relic株式会社の[X(旧Twitter)](https://x.com/NewRelicJapan) や [Qiita OrganizationOrganization](https://qiita.com/organizations/newrelic)では、
新機能を含む活用方法を公開していますので、ぜひフォローをお願いします。
:::

:::note info
無料のアカウントで試してみよう！
[New Relic フリープランで始めるオブザーバビリティ！](https://qiita.com/ktst79/items/5ee74b34e6adb8a7a6fa)
:::

[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535230/66d6a010-e4fe-4004-a09b-c01eaad5a614.png)](https://newrelic.com/jp/contact-sales)