New Relic のプロセス稼働データ最適化に関する3つのTips！

インフラを監視する上で重要な項目の一つである「プロセス監視」。New Relicで監視した時にたくさんのプロセスに関する情報を取得して、データ量が増えてしまった経験はありませんか？
必要なプロセスは監視したいけど、データ量は最適化したい！
そんな時に検討する方法を3つご紹介したいと思います。

:::note info
このアップデートの詳細はこちら。
[New Relic アップデート(2024年9月)](https://newrelic.com/jp/blog/nerdlog/new-relic-update-202409)
[New Relic アップデート](https://newrelic.com/jp/blog/nerdlog/new-relic-update "New Relic アップデート")
:::

## New Relicにおけるプロセス監視について
インフラストラクチャエージェントバージョン 1.12.0 以降が必要です。 2020 年 7 月 20 日より前に作成されたアカウント、および/または新しいガイド付きインストールを使用してインストールされたインフラストラクチャ エージェントでは、この変数がデフォルトで<B>有効</B>になっています。
もし無効になっている場合に送信設定を行うためには`enable_process_metrics`を`true`にする必要があります。
有効化するとCPU 使用率、メモリ使用量、プロセス ID、および各プロセスに関するその他の関連詳細などのメトリックが、アクティブなプロセスを 20 秒ごとにデータをサンプリングし、それぞれを `ProcessSample` に格納します。
しかしOS上で起動しているプロセスが多い環境においては、取得するデータもその分増えるため想定よりも増えてしまい、プロセス監視を断念する = `enable_process_metrics`を`false`にする判断をせざるを得ない可能性もあります。

プロセス監視はとても重要な監視項目の一つです。
この記事では、必要なデータを取り込みプロセス監視を継続していける要するベストプラクティスとなる3つの方法をご紹介したいと思います！

運用をより良くするための情報として、下記の記事も合わせてご参照ください。

https://qiita.com/qryuu/items/12b66f9b40411a1e6a36

https://docs.newrelic.com/jp/docs/infrastructure/infrastructure-alerts/alert-infrastructure-processes/

### 事前準備
プロセス内のどのメトリクスが重要かを判断するのは運用される方ですが、以下のNRQLを使うことで、収集されている現在のプロセスを確認することが可能です。
設定を行う前に、自身の環境の確認にご活用ください。

(例1)Metricとして取り込んだ最新のプロセスCPU使用率の直近1時間の状況を、process.name毎に時系列で表示

```
SELECT latest(`host.process.cpuPercent`) FROM Metric FACET `process.name`  SINCE 1 HOURS AGO TIMESERIES
```

(例2)ProcessSampleに取り込んだプロセスCPU使用率の直近1時間の状況を、processDisplayName毎に時系列で表示

```
SELECT average(cpuPercent) FROM ProcessSample FACET processDisplayName SINCE 1 HOURS AGO TIMESERIES
```
またデフォルトでは、低メモリのプロセスはサンプリングの対象から除外されます。
もし今回対象となるプロセスが低メモリのプロセスの場合は、`disable-zero-mem-process-filter`を設定してから先に進めてください
※今回の例に使用している環境では設定していません

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313446/4ccae9f1-16d3-27d0-97ac-bf83d2cd05ec.png" width=80%>


```
# デフォルトでは false になっているので true に変更する
disable_zero_mem_process_filter: true
```
設定の詳細はこちらの[ドキュメント](https://docs.newrelic.com/docs/infrastructure/infrastructure-agent/configuration/infrastructure-agent-configuration-settings/#disable-zero-mem-process-filter)も併せてご参照ください



### 1. Prosess collector の収集間隔の変更
まず現在のProsess collectorの収集間隔を確認します。
下記NRQLを実行したときに1分毎に3つのドットで表示されていれば、現在の間隔は<B>20秒</B>ということを意味します。

```
FROM ProcessSample SELECT average(cpuPercent) facet processDisplayName  TIMESERIES MAX since 5 minutes ago
```

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313446/96ab9cc5-5e49-2b0b-dada-24f5d6094656.png" width=80%>


デフォルトのnewrelic-infra.ymlの設定は下記のようになっています。

```
enable_process_metrics: true
status_server_enabled: true
status_server_port: 18003
```

以下のように設定することでサンプリング間隔を変更することは可能です。
最小値は`20`ですが、今回は例として60秒に設定します(-1に設定すると無効になります)

設定の詳細はこちらの[ドキュメント](https://docs.newrelic.com/docs/infrastructure/infrastructure-agent/configuration/infrastructure-agent-configuration-settings/#metrics-process-sample-rate)も併せてご参照ください

```
enable_process_metrics: true

# 下記を追加
metrics_process_sample_rate: 60

status_server_enabled: true
status_server_port: 18003
```
newrelic-infraプロセスを変更後にリロードすると、TIMESERIES MAX NRQLで1分ごとに1つのドットのみのデータが表示されます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313446/d001eb2f-da2e-68b7-2371-f205f9fb4538.png" width=80%>



### 2. 不要なプロセスの除外設定(Black list方式)
New Relic Infrastructure エージェントの `exclude_matching_metrics` 設定を使用すると、一致するパターンに基づいて特定のメトリックを収集およびレポートから除外することが可能です。この機能は、関連するメトリックに焦点を当てて、New Relic に送信されるデータの量を管理および削減するのに特に役立ちます。

まずは現在の状況を確認します

```
FROM ProcessSample SELECT average(cpuPercent) facet processDisplayName since 5 minutes ago  
```

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313446/43fa3130-4028-9fcb-4940-97357f9e240e.png" width=80%>


newrelic-infra.ymlに下記のように設定を追加します

```
enable_process_metrics: true
metrics_process_sample_rate: 60

# 下記を追加
exclude_matching_metrics:
  process.name:
    - regex "^amazon"    
    - "systemd-journald"

status_server_enabled: true
status_server_port: 18003
```
newrelic-infraプロセスを変更後にリロードすると、除外設定を行ったプロセスが表示されなくなります

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313446/645a1c4b-568e-6fab-4320-b36e7ae9fc35.png" width=80%>


設定の詳細はこちらの[ドキュメント](https://docs.newrelic.com/docs/infrastructure/infrastructure-agent/configuration/infrastructure-agent-configuration-settings/#exclude-matching-metrics)も併せてご参照ください

### 3. 必要なプロセスのみ取得設定(White list方式)
逆にNew Relic Infrastructure エージェントの `include_matching_metrics` 設定を使用すると、一致するパターンに基づいて特定のメトリックのみ収集およびレポートすることが可能です。最も重要性の高いメトリックに焦点を絞り、New Relic に送信されるデータの量を削減できます。

まずは現在の状況を確認します

```
FROM ProcessSample SELECT average(cpuPercent) facet processDisplayName since 5 minutes ago  
```

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313446/645a1c4b-568e-6fab-4320-b36e7ae9fc35.png" width=80%>


newrelic-infra.ymlに下記のように設定を追加します

```
enable_process_metrics: true
metrics_process_sample_rate: 60
exclude_matching_metrics:
  process.name:
    - regex "^google"    
    - "systemd-journald"

# 下記を追加
include_matching_metrics:
  process.name:
    - "newrelic-infra"    
    - regex "^systemd"

status_server_enabled: true
status_server_port: 18003
```

newrelic-infraプロセスを変更後にリロードすると、含めるよう設定したプロセスのみ表示されるようになります。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/313446/38a4de74-bea2-d22c-41cd-f474a257848d.png" width=80%>


この例のように、同じ項目に対して `include_matching_metrics` と `exclude_matching_metrics` の両方が存在する場合、`include`が優先されます。つまり、インフラストラクチャ エージェントは、「java」または「systemd」で始まる process.name からメトリックを収集または報告します。

設定の詳細はこちらの[ドキュメント](https://docs.newrelic.com/docs/infrastructure/infrastructure-agent/configuration/infrastructure-agent-configuration-settings/#include-matching-metrics)も併せてご参照ください


### 注意点
インフラ エージェントは、 process.name や process.cmd などのディメンションをNew Relic上でのフィルターとして使用することのみをサポートしており、メトリック名で直接設定しフィルターすることはできません。 

たとえば、以下の構成ではインフラ サービスの起動に失敗します。 

```
  exclude_matching_metrics:
    - "host.process.threadCount"
```


## まとめ
このようにNew Relic Infrastructure エージェントのオプションである `metrics_process_sample_rate`、 `exclude_matching_metrics` または `include_matching_metrics` 設定は、プロセス監視を行うために必要なデータの適切な収集間隔の調整、および特定のメトリックを収集およびレポートから除外/含めることができる強力な機能です。データ量を管理し、関連するメトリックに焦点を当て、特定のニーズを満たすためのデータ収集を効率的に行い、最適なプロセス監視の実現にお役立てください！！


:::note info
無料のアカウントで試してみよう！
[New Relic フリープランで始めるオブザーバビリティ！](https://qiita.com/ktst79/items/5ee74b34e6adb8a7a6fa)
:::
:::note info
[New Relic株式会社のQiita Organization](https://qiita.com/organizations/newrelic)では、
新機能を含む活用方法を公開していますので、ぜひフォローをお願いします。
:::

New Relic株式会社のAdvent Calendar 2024では、New Relicを使い始められたばかりの方、すでに熟達されているの方の活用Tips、アイディアまで、New Relicに関する知見を幅広く募集しています!

https://qiita.com/advent-calendar/2024/newrelic