New Relic Infrastructure - プロセス監視の設定と運用 ​

はじめに ​

システムの安定稼働において、重要なプロセスが正常に動作しているかの監視は不可欠です。New Relic Infrastructure Agentは、Linux/Windows環境で動作するプロセスの状態、リソース使用量、起動インスタンス数などを詳細に監視できます。

この記事では、プロセス監視の設定方法、アラートの構成、実践的な運用パターンについて詳しく解説します。

プロセス監視の概要 ​

プロセス監視でできること ​

Infrastructure Agentのプロセス監視機能により、以下の情報を取得・監視できます:

  • プロセスの起動状態(実行中/停止)
  • CPU使用率・メモリ使用量
  • プロセスの起動インスタンス数
  • プロセスのコマンドライン引数
  • プロセス所有者とユーザー情報
  • スレッド数、ファイルディスクリプタ数

アーキテクチャと動作原理 ​

プロセスメトリクスの有効化 ​

デフォルトの動作 ​

New Relicアカウントの作成時期により、プロセスメトリクスのデフォルト設定が異なります:

  • 2020年7月20日以前のアカウント: デフォルトで有効
  • 2020年7月20日以降のアカウント: デフォルトで無効

新しいアカウントでは、明示的に有効化する必要があります。

Linux環境での設定 ​

設定ファイルの編集 ​

bash
# 設定ファイルを編集
sudo vim /etc/newrelic-infra.yml
yaml
# プロセスメトリクスを有効化
enable_process_metrics: true

# サンプリング間隔の設定(秒単位、デフォルト: 20)
metrics_process_sample_rate: 30

# プロセスの最大取得数(デフォルト: 100)
max_process_samples: 200

サービスの再起動 ​

bash
# 設定を反映
sudo systemctl restart newrelic-infra

# 状態確認
sudo systemctl status newrelic-infra

# ログでプロセス監視の動作を確認
sudo journalctl -u newrelic-infra -f | grep -i process

Windows環境での設定 ​

MSIインストール時の設定 ​

PowerShellスクリプトでインストール時にプロセス監視を有効化できます:

powershell
# MSIインストーラーでプロセス監視を有効化
$msiPath = "$env:TEMP\newrelic-infra.msi"
$licenseKey = $env:NEW_RELIC_LICENSE_KEY

$arguments = @(
    "/i", "`"$msiPath`"",
    "/quiet",
    "/norestart",
    "GENERATE_CONFIG=true",
    "LICENSE_KEY=$licenseKey",
    "ENABLE_PROCESS_METRICS=true",
    "METRICS_PROCESS_SAMPLE_RATE=30"
)

Start-Process -FilePath "msiexec.exe" -ArgumentList $arguments -Wait -NoNewWindow

設定ファイルでの有効化 ​

既存インストールの場合、設定ファイルを編集します:

powershell
# 設定ファイルのパス
$configPath = "C:\Program Files\New Relic\newrelic-infra\newrelic-infra.yml"

# 設定を追加
Add-Content -Path $configPath -Value @"

# プロセス監視設定
enable_process_metrics: true
metrics_process_sample_rate: 30
max_process_samples: 200
"@

# サービスの再起動
Restart-Service -Name "newrelic-infra"

プロセスフィルタリングの設定 ​

監視対象プロセスの絞り込み ​

すべてのプロセスを監視すると、データ量が膨大になり、コストが増加します。必要なプロセスのみを監視するため、フィルタを設定します。

include_matching_metrics による包含フィルタ ​

特定のプロセスのみを監視対象とする設定:

yaml
# /etc/newrelic-infra.yml (Linux)
# または C:\Program Files\New Relic\newrelic-infra\newrelic-infra.yml (Windows)

enable_process_metrics: true

# 監視対象プロセスを指定
include_matching_metrics:
  process.name:
    - nginx
    - httpd
    - mysqld
    - postgres
    - java
    - dotnet
    - node

正規表現を使用した高度なフィルタリング:

yaml
include_matching_metrics:
  process.name:
    - ^nginx.*
    - ^mysql.*
    - .*java.*
    - python.*

exclude_matching_metrics による除外フィルタ ​

不要なプロセスを除外する設定:

yaml
enable_process_metrics: true

# すべてのプロセスを監視対象とするが、一部を除外
exclude_matching_metrics:
  process.name:
    - ^systemd.*
    - ^dbus.*
    - ^kworker.*
    - Chrome
    - firefox

複合フィルタの例 ​

包含と除外を組み合わせた実践的な設定:

yaml
enable_process_metrics: true
metrics_process_sample_rate: 30

# Webサーバーとデータベース関連のみ監視
include_matching_metrics:
  process.name:
    - nginx
    - apache2
    - httpd
    - mysql
    - postgres
    - redis
    - mongodb

# ただし、テスト用プロセスは除外
exclude_matching_metrics:
  process.name:
    - .*test.*
    - .*dev.*

Linux実行モードとプロセス監視 ​

Linuxでは、Agentの実行モードによって取得できるプロセス情報が異なります:

実行モード説明取得可能な情報制限事項
Rootroot権限で実行すべてのプロセス情報なし
PrivilegedCAP_SYS_PTRACE等のCapabilityを付与ほぼすべての情報一部の特権操作のみ制限
Unprivileged通常ユーザー権限同一ユーザーのプロセスのみ他ユーザーのプロセスは取得不可

Privilegedモードの設定例 ​

bash
# newrelic-infraユーザーに必要なCapabilityを付与
sudo setcap cap_sys_ptrace,cap_dac_read_search=+ep /usr/bin/newrelic-infra

# 設定ファイルで実行モードを指定
sudo tee -a /etc/newrelic-infra.yml > /dev/null <<EOF
# Privilegedモードで実行
privileged: true
EOF

プロセス監視アラートの設定 ​

Process running アラート条件 ​

重要なプロセスが停止した場合や、インスタンス数が異常な場合に通知を受け取るアラートを設定します。

New Relic UIでのアラート作成手順 ​

実践的なアラート条件例 ​

例1: Nginxプロセスの停止監視

条件名: Critical - Nginx Process Down
タイプ: Process running
フィルタ: hostname LIKE 'web-%' AND processDisplayName = 'nginx'
閾値: 少なくとも 1 個のプロセスが実行中でない場合
期間: 2 分間
重大度: Critical

例2: データベースプロセスの過剰起動監視

条件名: Warning - Too Many MySQL Processes
タイプ: Process running
フィルタ: hostname LIKE 'db-%' AND processDisplayName = 'mysqld'
閾値: 5 個以上のプロセスが実行中の場合
期間: 5 分間
重大度: Warning

NRQLを使用した高度なアラート ​

ProcessSampleイベントを使用して、より複雑な条件を設定できます:

CPU使用率が高いプロセスの検知 ​

sql
SELECT average(cpuPercent) 
FROM ProcessSample 
WHERE processDisplayName IN ('nginx', 'apache2', 'httpd')
FACET hostname, processDisplayName
閾値: 平均CPU使用率が 80% を超えた場合
期間: 5 分間

メモリリークの疑いがあるプロセスの検知 ​

sql
SELECT latest(memoryResidentSizeBytes) / 1024 / 1024 / 1024 AS memoryGB
FROM ProcessSample
WHERE processDisplayName = 'java'
FACET hostname, commandLine
閾値: メモリ使用量が 8 GB を超えた場合
期間: 10 分間

プロセスの起動回数監視(頻繁な再起動を検知) ​

sql
SELECT uniqueCount(processId)
FROM ProcessSample
WHERE processDisplayName = 'nodejs'
FACET hostname
閾値: 10 分間に 3 回以上の異なるプロセスIDが出現した場合
期間: 10 分間

データの可視化とクエリ ​

ダッシュボードでの表示 ​

プロセスCPU使用率のトップ10 ​

sql
SELECT average(cpuPercent) AS 'CPU %'
FROM ProcessSample
WHERE cpuPercent > 0
FACET processDisplayName, hostname
SINCE 30 MINUTES AGO
LIMIT 10

プロセスメモリ使用量の推移 ​

sql
SELECT average(memoryResidentSizeBytes) / 1024 / 1024 AS 'Memory MB'
FROM ProcessSample
WHERE processDisplayName IN ('nginx', 'java', 'mysqld')
FACET processDisplayName
TIMESERIES AUTO
SINCE 1 HOUR AGO

ホスト別のプロセス数 ​

sql
SELECT uniqueCount(processId) AS 'Process Count'
FROM ProcessSample
FACET hostname
SINCE 30 MINUTES AGO
TIMESERIES

実践的な運用パターン ​

Webサーバー監視のベストプラクティス ​

yaml
# Webサーバー向けの最適化された設定
enable_process_metrics: true
metrics_process_sample_rate: 20

# Webサーバー関連プロセスのみ監視
include_matching_metrics:
  process.name:
    - nginx
    - apache2
    - httpd
    - php-fpm
    - gunicorn
    - uwsgi

# カスタム属性で環境を識別
custom_attributes:
  service: web
  tier: frontend

データベースサーバー監視の設定 ​

yaml
enable_process_metrics: true
metrics_process_sample_rate: 30

include_matching_metrics:
  process.name:
    - mysqld
    - postgres
    - mongod
    - redis-server
    - cassandra

custom_attributes:
  service: database
  tier: backend

アプリケーションサーバー監視 ​

yaml
enable_process_metrics: true
metrics_process_sample_rate: 20

include_matching_metrics:
  process.name:
    - java
    - node
    - python
    - dotnet
    - ruby

# Javaアプリケーションの詳細を取得
# JVMメトリクスはAPM Agentと併用推奨

custom_attributes:
  service: application
  tier: middleware

パフォーマンスへの影響と最適化 ​

リソース使用量の考慮 ​

プロセス監視を有効にすると、Agent自体のリソース使用量が増加します:

監視対象プロセス数CPU使用率増加メモリ使用量増加
10-50個1-2%10-20 MB
50-100個2-5%20-50 MB
100-200個5-10%50-100 MB

最適化のポイント ​

1. サンプリングレートの調整 ​

yaml
# 重要度が低い環境では間隔を長くする
metrics_process_sample_rate: 60  # 60秒間隔

2. max_process_samplesの制限 ​

yaml
# 取得するプロセス数の上限を設定
max_process_samples: 100  # 最大100プロセス

3. 必要最小限のフィルタ設定 ​

yaml
# 重要なプロセスのみに絞る
include_matching_metrics:
  process.name:
    - critical-service-1
    - critical-service-2

トラブルシューティング ​

プロセスメトリクスが取得されない ​

症状 ​

New Relic UIでProcessSampleイベントが表示されない

確認手順 ​

bash
# Linux: 設定ファイルの確認
sudo cat /etc/newrelic-infra.yml | grep -A5 process

# エージェントログの確認
sudo journalctl -u newrelic-infra -f | grep -i process

# プロセス監視が有効か確認
sudo newrelic-infra -dry-run -verbose
powershell
# Windows: 設定ファイルの確認
Get-Content "C:\Program Files\New Relic\newrelic-infra\newrelic-infra.yml" | Select-String -Pattern "process"

# エージェントログの確認
Get-Content "C:\Program Files\New Relic\newrelic-infra\logs\newrelic-infra.log" -Tail 50 | Select-String -Pattern "process"

解決方法 ​

  1. enable_process_metrics: true が設定されているか確認
  2. フィルタ設定が厳しすぎないか確認
  3. エージェントの再起動

特定のプロセスだけ表示されない ​

Linux権限の問題 ​

bash
# Agentの実行モードを確認
ps aux | grep newrelic-infra

# rootで実行されていない場合、Privilegedモードを設定
sudo setcap cap_sys_ptrace,cap_dac_read_search=+ep /usr/bin/newrelic-infra

フィルタ設定の確認 ​

yaml
# デバッグのため、一時的にすべてのプロセスを監視
enable_process_metrics: true
# include_matching_metrics をコメントアウト

プロセス情報が不完全 ​

一部のプロセス情報(コマンドライン引数など)が取得できない場合:

bash
# Linux: SELinuxの状態を確認
getenforce

# SELinuxが有効な場合、必要な権限を付与
sudo setsebool -P daemons_dump_core 1

セキュリティとコンプライアンス ​

機密情報の保護 ​

プロセスのコマンドライン引数には、パスワードや秘密鍵などの機密情報が含まれる可能性があります。

特定のプロセスを除外 ​

yaml
# 機密情報を含む可能性のあるプロセスを除外
exclude_matching_metrics:
  process.name:
    - kubectl
    - aws-cli
    - mysql.*--password.*

strip_command_line オプション ​

yaml
# コマンドライン引数を収集しない
enable_process_metrics: true
strip_command_line: true

コンプライアンス要件への対応 ​

特定の規制(PCI-DSS、HIPAAなど)では、プロセス情報の収集に制限がある場合があります:

yaml
# 最小限のプロセス情報のみ収集
enable_process_metrics: true
strip_command_line: true
max_process_samples: 50

# 必要最小限のプロセスのみ
include_matching_metrics:
  process.name:
    - approved-service-1
    - approved-service-2

まとめ ​

New Relic Infrastructure Agentのプロセス監視機能を活用すると、システムの安定性を大幅に向上できます。適切なフィルタ設定とアラート条件により、重要なプロセスの異常を迅速に検知し、ダウンタイムを最小化できます。

重要なポイント ​

  1. プロセスメトリクスの有効化: enable_process_metrics: true を設定
  2. 適切なフィルタリング: 必要なプロセスのみを監視してコスト削減
  3. アラート設定: プロセス停止や異常なリソース使用を検知
  4. 権限管理: Linux環境では適切な実行モードを選択
  5. セキュリティ: 機密情報が含まれるプロセスの扱いに注意

次のステップ ​


関連記事: Infrastructure Agent概要とアーキテクチャ関連記事: 設定ファイル完全リファレンス