New Relic Infrastructure - プロセス監視の設定と運用
はじめに
システムの安定稼働において、重要なプロセスが正常に動作しているかの監視は不可欠です。New Relic Infrastructure Agentは、Linux/Windows環境で動作するプロセスの状態、リソース使用量、起動インスタンス数などを詳細に監視できます。
この記事では、プロセス監視の設定方法、アラートの構成、実践的な運用パターンについて詳しく解説します。
プロセス監視の概要
プロセス監視でできること
Infrastructure Agentのプロセス監視機能により、以下の情報を取得・監視できます:
- プロセスの起動状態(実行中/停止)
- CPU使用率・メモリ使用量
- プロセスの起動インスタンス数
- プロセスのコマンドライン引数
- プロセス所有者とユーザー情報
- スレッド数、ファイルディスクリプタ数
アーキテクチャと動作原理
プロセスメトリクスの有効化
デフォルトの動作
New Relicアカウントの作成時期により、プロセスメトリクスのデフォルト設定が異なります:
- 2020年7月20日以前のアカウント: デフォルトで有効
- 2020年7月20日以降のアカウント: デフォルトで無効
新しいアカウントでは、明示的に有効化する必要があります。
Linux環境での設定
設定ファイルの編集
# 設定ファイルを編集
sudo vim /etc/newrelic-infra.yml# プロセスメトリクスを有効化
enable_process_metrics: true
# サンプリング間隔の設定(秒単位、デフォルト: 20)
metrics_process_sample_rate: 30
# プロセスの最大取得数(デフォルト: 100)
max_process_samples: 200サービスの再起動
# 設定を反映
sudo systemctl restart newrelic-infra
# 状態確認
sudo systemctl status newrelic-infra
# ログでプロセス監視の動作を確認
sudo journalctl -u newrelic-infra -f | grep -i processWindows環境での設定
MSIインストール時の設定
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設定ファイルでの有効化
既存インストールの場合、設定ファイルを編集します:
# 設定ファイルのパス
$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 による包含フィルタ
特定のプロセスのみを監視対象とする設定:
# /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正規表現を使用した高度なフィルタリング:
include_matching_metrics:
process.name:
- ^nginx.*
- ^mysql.*
- .*java.*
- python.*exclude_matching_metrics による除外フィルタ
不要なプロセスを除外する設定:
enable_process_metrics: true
# すべてのプロセスを監視対象とするが、一部を除外
exclude_matching_metrics:
process.name:
- ^systemd.*
- ^dbus.*
- ^kworker.*
- Chrome
- firefox複合フィルタの例
包含と除外を組み合わせた実践的な設定:
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の実行モードによって取得できるプロセス情報が異なります:
| 実行モード | 説明 | 取得可能な情報 | 制限事項 |
|---|---|---|---|
| Root | root権限で実行 | すべてのプロセス情報 | なし |
| Privileged | CAP_SYS_PTRACE等のCapabilityを付与 | ほぼすべての情報 | 一部の特権操作のみ制限 |
| Unprivileged | 通常ユーザー権限 | 同一ユーザーのプロセスのみ | 他ユーザーのプロセスは取得不可 |
Privilegedモードの設定例
# 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 分間
重大度: WarningNRQLを使用した高度なアラート
ProcessSampleイベントを使用して、より複雑な条件を設定できます:
CPU使用率が高いプロセスの検知
SELECT average(cpuPercent)
FROM ProcessSample
WHERE processDisplayName IN ('nginx', 'apache2', 'httpd')
FACET hostname, processDisplayName閾値: 平均CPU使用率が 80% を超えた場合
期間: 5 分間メモリリークの疑いがあるプロセスの検知
SELECT latest(memoryResidentSizeBytes) / 1024 / 1024 / 1024 AS memoryGB
FROM ProcessSample
WHERE processDisplayName = 'java'
FACET hostname, commandLine閾値: メモリ使用量が 8 GB を超えた場合
期間: 10 分間プロセスの起動回数監視(頻繁な再起動を検知)
SELECT uniqueCount(processId)
FROM ProcessSample
WHERE processDisplayName = 'nodejs'
FACET hostname閾値: 10 分間に 3 回以上の異なるプロセスIDが出現した場合
期間: 10 分間データの可視化とクエリ
ダッシュボードでの表示
プロセスCPU使用率のトップ10
SELECT average(cpuPercent) AS 'CPU %'
FROM ProcessSample
WHERE cpuPercent > 0
FACET processDisplayName, hostname
SINCE 30 MINUTES AGO
LIMIT 10プロセスメモリ使用量の推移
SELECT average(memoryResidentSizeBytes) / 1024 / 1024 AS 'Memory MB'
FROM ProcessSample
WHERE processDisplayName IN ('nginx', 'java', 'mysqld')
FACET processDisplayName
TIMESERIES AUTO
SINCE 1 HOUR AGOホスト別のプロセス数
SELECT uniqueCount(processId) AS 'Process Count'
FROM ProcessSample
FACET hostname
SINCE 30 MINUTES AGO
TIMESERIES実践的な運用パターン
Webサーバー監視のベストプラクティス
# 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データベースサーバー監視の設定
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アプリケーションサーバー監視
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. サンプリングレートの調整
# 重要度が低い環境では間隔を長くする
metrics_process_sample_rate: 60 # 60秒間隔2. max_process_samplesの制限
# 取得するプロセス数の上限を設定
max_process_samples: 100 # 最大100プロセス3. 必要最小限のフィルタ設定
# 重要なプロセスのみに絞る
include_matching_metrics:
process.name:
- critical-service-1
- critical-service-2トラブルシューティング
プロセスメトリクスが取得されない
症状
New Relic UIでProcessSampleイベントが表示されない
確認手順
# 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# 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"解決方法
enable_process_metrics: trueが設定されているか確認- フィルタ設定が厳しすぎないか確認
- エージェントの再起動
特定のプロセスだけ表示されない
Linux権限の問題
# Agentの実行モードを確認
ps aux | grep newrelic-infra
# rootで実行されていない場合、Privilegedモードを設定
sudo setcap cap_sys_ptrace,cap_dac_read_search=+ep /usr/bin/newrelic-infraフィルタ設定の確認
# デバッグのため、一時的にすべてのプロセスを監視
enable_process_metrics: true
# include_matching_metrics をコメントアウトプロセス情報が不完全
一部のプロセス情報(コマンドライン引数など)が取得できない場合:
# Linux: SELinuxの状態を確認
getenforce
# SELinuxが有効な場合、必要な権限を付与
sudo setsebool -P daemons_dump_core 1セキュリティとコンプライアンス
機密情報の保護
プロセスのコマンドライン引数には、パスワードや秘密鍵などの機密情報が含まれる可能性があります。
特定のプロセスを除外
# 機密情報を含む可能性のあるプロセスを除外
exclude_matching_metrics:
process.name:
- kubectl
- aws-cli
- mysql.*--password.*strip_command_line オプション
# コマンドライン引数を収集しない
enable_process_metrics: true
strip_command_line: trueコンプライアンス要件への対応
特定の規制(PCI-DSS、HIPAAなど)では、プロセス情報の収集に制限がある場合があります:
# 最小限のプロセス情報のみ収集
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のプロセス監視機能を活用すると、システムの安定性を大幅に向上できます。適切なフィルタ設定とアラート条件により、重要なプロセスの異常を迅速に検知し、ダウンタイムを最小化できます。
重要なポイント
- プロセスメトリクスの有効化:
enable_process_metrics: trueを設定 - 適切なフィルタリング: 必要なプロセスのみを監視してコスト削減
- アラート設定: プロセス停止や異常なリソース使用を検知
- 権限管理: Linux環境では適切な実行モードを選択
- セキュリティ: 機密情報が含まれるプロセスの扱いに注意
次のステップ
- ポート監視の設定 - ネットワークポートの状態監視
- セキュリティログ監視 - OSのセキュリティイベント監視
- Linux環境でのエージェント導入 - 基本的なインストール手順
- Windows環境でのエージェント導入 - Windows固有の設定
関連記事: Infrastructure Agent概要とアーキテクチャ関連記事: 設定ファイル完全リファレンス