New Relic APMでリクエストのクエリパラメータを取得してみよう

New Relic APMの簡単な設定でリクエストに付与されているクエリパラメータを取得することで、ログから確認するよりも簡単にリクエストについたパラメータを確認できるようになりますよ！設定方法についてご紹介です！

## 設定方法
Java APMエージェントを例にクエリパラメータの取得方法についてご紹介です。APMエージェントはデフォルトの設定ではセンシティブな情報が含まれている可能性があるため、リクエストに紐づくクエリパラメータを取得しませんが、APMエージェントの設定ファイルの変更で取得できるようになります。

幾つか取得方法の設定を見ていきます。

### 全てのクエリパラメータを取得する
リクエストに紐づく全てのパラメータを取得する場合は、```attirubtes.include```で```request.parameters.*```と定義します。
```yaml:newrelic.yml
  attributes:

    # When true, attributes will be sent to New Relic. The default is true.
    enabled: true

    #A comma separated list of attribute keys whose values should
    # be sent to New Relic.
    include: request.parameters.*

    # A comma separated list of attribute keys whose values should
    # not be sent to New Relic.
    #exclude:
```

アプリケーションを再起動することで設定が反映されます。

取得したパラメータはTransactionの属性（Attribute）として付与されるため、Transactionに紐づくパラメータをすぐに確認することができるようになります。
リクエスト例: ```http://www.example.com/?example1=1&example2=2&example3=3```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/e6407a90-22d2-43b6-93fd-41f5b0be0af3.png)

### 取得するパラメータを明示的に指定する
取得するパラメータを明示的に指定することも可能です。
```yaml:newrelic.yml
  attributes:

    # When true, attributes will be sent to New Relic. The default is true.
    enabled: true

    #A comma separated list of attribute keys whose values should
    # be sent to New Relic.
    include: request.parameters.example1,request.parameters.example2

    # A comma separated list of attribute keys whose values should
    # not be sent to New Relic.
    #exclude:
```
この場合、```attirubtes.include```で明示的に指定したパラメータのみ属性として取得されます。
リクエスト例: ```http://www.example.com/?example1=1&example2=2```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/f46f8160-a531-d0ca-1d49-06851f258767.png)


### 一部のパラメータの取得を除外する
```attirubtes.include```でワイルドカードで指定しますが、一部のパラメータだけ```attirubtes.exclude```で定義することで取得を除外することも可能です。
```yaml:newrelic.yml
  attributes:

    # When true, attributes will be sent to New Relic. The default is true.
    enabled: true

    #A comma separated list of attribute keys whose values should
    # be sent to New Relic.
    include: request.parameters.*

    # A comma separated list of attribute keys whose values should
    # not be sent to New Relic.
    exclude: request.parameters.example1,request.parameters.example3
```
```attirubtes.exclude```で定義したパラメータは取得されてないことが確認できます。
リクエスト例: ```http://www.example.com/?example1=1&example2=2&exapmle3=3```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/4f797803-161a-1563-85c4-2386df203fde.png)

## クエリパラメータの分析例
特定のクエリパラメータが付与されているTransactionの件数をrequest.uri毎に算出する例です。
```sql
SELECT
    count(*)
FROM
    Transaction
WHERE
    appName = '****'
and request.parameters.example1 is not null
FACET request.uri,request.parameters.example1
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/cf3556e1-16d9-4b2d-9ae8-15c8b3f84795.png)
WHERE句でパラメーターに含まれる値を絞り込んで、request.uri毎のTransactionの件数の推移を確認する例です。
```sql
SELECT
    count(*)
FROM
    Transaction
WHERE
    appName = '****'
and request.parameters.example2 = '2'
FACET request.uri TIMESERIES
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485441/087da9c0-76f2-c662-763f-6b4783e747da.png)

# まとめ
本記事では、New Relic APMでリクエストのクエリパラメータを取得する設定例と、クエリパラメータを使った分析の例をご紹介しました。ログから確認するよりも簡単にパラメータを使ったアプリケーションの分析が出来るようになります。

言語毎の設定方法は公式ドキュメントをご確認ください。
- [Java](https://docs.newrelic.com/jp/docs/apm/agents/java-agent/attributes/java-agent-attributes/#requestparams)
- [Node.js](https://docs.newrelic.com/jp/docs/apm/agents/nodejs-agent/attributes/nodejs-agent-attributes/#requestparams)
- [PHP](https://docs.newrelic.com/jp/docs/apm/agents/php-agent/attributes/attribute-examples/#ex_req_params)
- [Python](https://docs.newrelic.com/jp/docs/apm/agents/python-agent/attributes/python-attribute-examples/)
- [Ruby](https://docs.newrelic.com/jp/docs/apm/agents/ruby-agent/attributes/ruby-attribute-examples/)
- [.NET](https://docs.newrelic.com/jp/docs/apm/agents/net-agent/attributes/net-attribute-examples/#example2)

JavaのAPMエージェントのインストール方法を確認されたい方は、以下の記事が参考になります。

https://qiita.com/nr-mito/items/4fcdef036777e6d2878

# その他
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)
:::