NemoClaw環境で監視すべき4つの指標
NemoClawをプロダクション環境で運用する際、监视対象は大きく4つのレイヤーに分かれます。各レイヤーを適切に計測しなければ、性能劣化や障害の根本原因を特定できません。
| レイヤー | 主な指標 | 収集ツール |
|---|---|---|
| GPUハードウェア | GPU使用率・メモリ使用率・温度・電力消費 | NVIDIA DCGM |
| 推論エンジン(NIM) | 推論レイテンシP50/P90/P99・スループット(tokens/sec) | NIM内蔵メトリクス + Prometheus |
| エージェント動作 | タスク完了率・リトライ率・ポリシーブロック数 | OpenTelemetry |
| インフラ全体 | CPU・RAM・ネットワーク・ディスクI/O | Prometheus node_exporter / Datadog |
NemoClawはOpenShellサンドボックス内でエージェントを実行するため、コンテナレベルのメトリクスとGPUレベルのメトリクスを両方収集する構成が必要です。どちらか一方だけでは問題の全体像を把握できません。
NVIDIA DCGM によるGPU使用率・温度の計測
NVIDIA DCGM(Data Center GPU Manager)はNVIDIA公式のGPU監視ツールです。NemoClawのNIM推論エンジンが動くGPUのメトリクスを最も正確に収集できます。DCGMはPrometheusエクスポーターを内蔵しており、既存のPrometheus + Grafanaスタックへ直接メトリクスを流せます。
DCGM Exporterのインストールと起動
# DCGM Exporterをコンテナで起動(NVIDIA Dockerランタイム必須)
docker run -d --gpus all \
--name dcgm-exporter \
--restart unless-stopped \
-p 9400:9400 \
nvcr.io/nvidia/k8s/dcgm-exporter:3.3.5-3.4.0-ubuntu22.04
# 動作確認:GPU使用率メトリクスが出力されることを確認
curl -s http://localhost:9400/metrics | grep DCGM_FI_DEV_GPU_UTIL
Kubernetes環境の場合はDaemonSetとしてデプロイします。NVIDIA公式のHelm Chartが利用可能です。
収集すべき主要メトリクス一覧
| メトリクス名 | 説明 | 推奨アラートしきい値 |
|---|---|---|
DCGM_FI_DEV_GPU_UTIL |
GPU演算使用率 (%) | 95% を5分超 → 警告 |
DCGM_FI_DEV_FB_USED |
GPUメモリ使用量 (MiB) | 搭載量の90%超 → 警告 |
DCGM_FI_DEV_GPU_TEMP |
GPU温度 (℃) | 75℃超 → 注意、83℃超 → 緊急 |
DCGM_FI_DEV_POWER_USAGE |
GPU消費電力 (W) | TDPの95%超 → 注意 |
DCGM_FI_DEV_NVLINK_BANDWIDTH_TOTAL |
NVLink帯域幅(マルチGPU構成時) | 最大帯域の80%超 → 注意 |
GPU温度が83℃(ジャンクション温度の一般的な上限付近)を超えるとNVIDIAドライバーが自動的にクロックを落とす「サーマルスロットリング」が発動します。推論レイテンシが突然悪化した場合は温度を最初に確認してください。
Prometheus + Grafana による推論レイテンシの可視化
Prometheusはスクレイプ型のメトリクス収集システムで、GrafanaはそのデータをビジュアライズするOSSダッシュボードツールです。DCGM ExporterとNIMの内蔵メトリクスエンドポイントを組み合わせることで、GPUレベルから推論性能まで一元管理できます。
prometheus.yml の設定例
# prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
# NVIDIA DCGM:GPUハードウェアメトリクス
- job_name: dcgm
scrape_interval: 15s
static_configs:
- targets: ["localhost:9400"]
# NIM推論エンジン:推論レイテンシ・スループット
- job_name: nim_inference
scrape_interval: 10s
static_configs:
- targets: ["localhost:8000"]
metrics_path: /metrics
# NemoClawエージェント:エージェント動作メトリクス(OpenTelemetry経由)
- job_name: nemoclaw_agent
scrape_interval: 30s
static_configs:
- targets: ["localhost:9464"]
# node_exporter:ホストのCPU・RAM・ディスク
- job_name: node
scrape_interval: 30s
static_configs:
- targets: ["localhost:9100"] Grafanaダッシュボードの推奨パネル構成
NemoClaw運用に必要なGrafanaダッシュボードは以下の3ロウ構成が標準的です。
- Row 1 - GPU Overview:GPU使用率(時系列)、GPUメモリ使用量(ゲージ)、GPU温度(時系列)、消費電力(時系列)
- Row 2 - Inference Performance:推論レイテンシP50/P90/P99(時系列)、秒間トークン生成数(tokens/sec、時系列)、同時リクエスト数(ゲージ)、キューイング待ち時間(時系列)
- Row 3 - Agent Behavior:エージェントタスク成功率(%)、ポリシーブロック数/時(時系列)、平均タスク完了時間(ヒストグラム)、エラー率(時系列)
NVIDIAはDCGM専用の公式GrafanaダッシュボードをGrafana Labsのカタログに公開しています(Dashboard ID: 12239)。これをベースに推論性能パネルを追加するのが最短ルートです。
推論レイテンシのヒストグラム計測
NIMは推論レイテンシをHistogramメトリクスとしてPrometheusに公開します。パーセンタイル計算にはPrometheusのhistogram_quantile関数を使います。
# GrafanaのPromQL例:推論レイテンシP99(過去5分)
histogram_quantile(0.99,
rate(nim_request_duration_seconds_bucket[5m])
)
# P50・P90・P99を一度に表示する場合
histogram_quantile(0.50, rate(nim_request_duration_seconds_bucket[5m]))
histogram_quantile(0.90, rate(nim_request_duration_seconds_bucket[5m]))
histogram_quantile(0.99, rate(nim_request_duration_seconds_bucket[5m]))
# スループット(tokens/sec)
rate(nim_tokens_generated_total[1m])
P99レイテンシはP50の2〜5倍になることが多く、外れ値の影響を受けやすい指標です。アラートはP99で設定しつつ、傾向の把握にはP90を参照するのが実践的な運用です。
OpenTelemetry によるエージェント動作の分散トレーシング
OpenTelemetry(OTel)はCNCF(Cloud Native Computing Foundation)が標準化したオブザーバビリティフレームワークです。NemoClawエージェントのタスク実行トレースを収集することで、どのツール呼び出しがレイテンシのボトルネックになっているかを特定できます。
OpenTelemetry Collectorの設定
# otel-collector-config.yaml
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
http:
endpoint: 0.0.0.0:4318
processors:
batch:
timeout: 5s
send_batch_size: 512
exporters:
# Prometheusへメトリクスをエクスポート
prometheus:
endpoint: "0.0.0.0:9464"
namespace: nemoclaw
# Grafana Tempoへトレースをエクスポート(オプション)
otlp/tempo:
endpoint: "tempo:4317"
tls:
insecure: true
# ログをファイルへ出力
file:
path: /var/log/nemoclaw/otel-traces.json
service:
pipelines:
metrics:
receivers: [otlp]
processors: [batch]
exporters: [prometheus]
traces:
receivers: [otlp]
processors: [batch]
exporters: [otlp/tempo] NemoClawエージェントへのOTelインストルメンテーション
NemoClawのカスタムエージェントやラッパースクリプトにOpenTelemetry SDKを組み込むことで、エージェントの動作を詳細に計測できます。
# Python SDKによる計測例(NemoClawエージェントラッパー)
from opentelemetry import trace, metrics
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
# トレーサーの初期化
provider = TracerProvider()
provider.add_span_processor(
BatchSpanProcessor(OTLPSpanExporter(endpoint="http://localhost:4317"))
)
trace.set_tracer_provider(provider)
tracer = trace.get_tracer("nemoclaw.agent")
# エージェントタスク実行のトレース
with tracer.start_as_current_span("agent.task") as span:
span.set_attribute("agent.task_id", task_id)
span.set_attribute("agent.policy_profile", "standard")
with tracer.start_as_current_span("tool.file_read"):
# ファイル読み取り処理
pass
with tracer.start_as_current_span("nim.inference"):
# NIM推論呼び出し
pass Datadog GPU拡張による統合モニタリング
DatadogはSaaSベースのフルスタック監視プラットフォームです。DatadogのGPU監視インテグレーション(nvidia_gpu)とNVIDIA DCGMエクスポーターを組み合わせることで、GPUメトリクス・アプリケーションAPM・ログ管理を1つのプラットフォームで完結できます。エンジニアリングリソースが限られているチームに向いています。
DatadogエージェントとGPUインテグレーションの設定
# 1. Datadog Agentのインストール(Ubuntu 22.04)
DD_API_KEY="" \
DD_SITE="datadoghq.com" \
bash -c "$(curl -L https://install.datadoghq.com/scripts/install_script_agent7.sh)"
# 2. nvidia_gpu インテグレーションの有効化
sudo -u dd-agent datadog-agent integration install -t datadog-nvidia_gpu==1.0.0
# 3. インテグレーション設定ファイルの作成
# /etc/datadog-agent/conf.d/nvidia_gpu.d/conf.yaml
init_config:
instances:
- gpu_ids:
- all
collect_per_process_metrics: true
min_collection_interval: 15
# 4. Datadog Agentの再起動
sudo systemctl restart datadog-agent Datadog vs Prometheus + Grafana の比較
| 観点 | Datadog | Prometheus + Grafana |
|---|---|---|
| 初期セットアップ | エージェント一発インストール(◎) | 各コンポーネントを個別構築が必要(△) |
| コスト | 有料(GPU監視: $1〜2/ホスト/時)(△) | OSS無料(ホスティングコストのみ)(◎) |
| GPU詳細度 | DCGM連携で詳細取得可(◎) | DCGM Exporter経由で同等(◎) |
| 分散APM | ネイティブ対応(◎) | 別途Tempo/Jaeger等が必要(△) |
| アラート設定 | GUIで直感的に設定可(◎) | Alertmanagerの別途設定が必要(△) |
| スケーラビリティ | SaaS側が自動スケール(◎) | Prometheusのシャーディングが必要(△) |
SLOベースのアラート設定方法
SLO(Service Level Objective)とはサービスの品質目標を数値で定義したものです。単にしきい値アラートを設定するより、SLOに基づいたエラーバジェット消費率でアラートする方が、誤報を減らしつつ重大な問題を早期に検知できます。
SLOベースのアラートの考え方:「このまま消費が続くとSLOを1時間後に違反する」という予測ベースのアラートが誤報を大幅に削減します。単純なしきい値アラートでは夜間の一時的なスパイクで毎回起こされることになります。
NemoClaw向けSLO定義の例
| SLI(指標) | SLO目標値 | 計測方法 |
|---|---|---|
| 推論レイテンシ P99 | 5秒以内を99.5%のリクエストで達成 | NIMメトリクス histogram_quantile |
| エージェントタスク成功率 | 99%以上のタスクがエラーなく完了 | OpenTelemetryのspan status |
| GPU可用性 | 月間99.9%(ダウンタイム44分以内) | DCGMのGPU使用可能状態 |
| API可用性 | 月間99.9%(5xx率0.1%以下) | NIM APIのHTTPステータスコード |
Alertmanager によるエラーバジェットアラート設定
# Prometheus AlertingRules(recording rules + alerting rules)
# まずrecording ruleでエラー率を計算
groups:
- name: nemoclaw_slo_recording
rules:
# 推論レイテンシのSLO違反率(P99 > 5秒のリクエスト割合)
- record: nemoclaw:inference_latency_slo_error_rate:5m
expr: |
sum(rate(nim_request_duration_seconds_bucket{le="5"}[5m]))
/ sum(rate(nim_request_duration_seconds_count[5m]))
- name: nemoclaw_slo_alerts
rules:
# エラーバジェット消費が速い場合(1時間以内にSLO違反が予測される)
- alert: NemoClawInferenceLatencySLOBurn
expr: |
(1 - nemoclaw:inference_latency_slo_error_rate:5m) > 0.005
for: 2m
labels:
severity: warning
team: mlops
annotations:
summary: "推論レイテンシSLOのエラーバジェット消費が加速中"
description: "P99レイテンシがSLO目標(5秒以内99.5%)を超過するリクエストが {{ $value | humanizePercentage }} に達しています。"
# GPU使用率が高くレイテンシ悪化が予測される場合
- alert: NemoClawGPUHighUtilization
expr: DCGM_FI_DEV_GPU_UTIL > 95
for: 5m
labels:
severity: warning
annotations:
summary: "GPU使用率が95%を超過(GPU: {{ $labels.gpu }})"
description: "GPU使用率が {{ $value }}% に達しています。推論レイテンシが悪化する可能性があります。"
# GPU温度緊急アラート
- alert: NemoClawGPUCriticalTemperature
expr: DCGM_FI_DEV_GPU_TEMP > 83
for: 1m
labels:
severity: critical
annotations:
summary: "GPU温度が危険域(83℃超)"
description: "サーマルスロットリングが発動している可能性があります。現在 {{ $value }}℃。" Alertmanager のルーティング設定
# alertmanager.yml
global:
resolve_timeout: 5m
route:
group_by: ["alertname", "cluster"]
group_wait: 30s
group_interval: 5m
repeat_interval: 12h
receiver: default
routes:
# criticalアラートはSlackの緊急チャンネルへ即時通知
- match:
severity: critical
receiver: slack_critical
repeat_interval: 1h
# warningアラートは通常チャンネルへ
- match:
severity: warning
receiver: slack_warning
repeat_interval: 4h
receivers:
- name: default
slack_configs:
- api_url: ""
channel: "#nemoclaw-alerts"
- name: slack_critical
slack_configs:
- api_url: ""
channel: "#nemoclaw-critical"
title: "🚨 NemoClaw CRITICAL: {{ .GroupLabels.alertname }}"
text: "{{ range .Alerts }}{{ .Annotations.description }}{{ end }}"
- name: slack_warning
slack_configs:
- api_url: ""
channel: "#nemoclaw-alerts"
title: "⚠️ NemoClaw WARNING: {{ .GroupLabels.alertname }}"
Alertmanagerの repeat_interval を適切に設定することで、同じアラートが連続して通知される「アラート疲れ」を防ぐことができます。criticalは1時間、warningは4〜12時間が実運用での一般的な設定値です。
ツール選択ガイド:規模別の推奨構成
チームの規模とインフラ環境に応じた推奨構成をまとめます。構成はシンプルなものから始め、必要に応じて拡張するアプローチを推奨します。
| 規模・環境 | 推奨構成 | 月間コスト目安 |
|---|---|---|
| スモールチーム(〜3名) | DCGM + Prometheus + Grafana + Alertmanager(全OSS) | ほぼ0円(サーバーコストのみ) |
| 中規模(5〜20名) | 上記OSS構成 + OpenTelemetry + Grafana Tempo(トレース) | 〜$50/月(Grafana Cloudの有料プランなど) |
| エンタープライズ(20名超) | Datadog(インフラ + GPU + APM) + OpenTelemetry | $500〜$5,000+/月(ノード数・機能による) |
| AWSネイティブ環境 | DCGM + CloudWatch + CloudWatch Alarms + AWS SNS | $10〜$100/月(メトリクス数による) |
いずれの構成でもNVIDIA DCGMは必須コンポーネントです。GPUメトリクスなしでNemoClawの性能問題を診断することは困難です。まずDCGMとPrometheus + Grafanaのベースラインを構築してから、必要に応じてDatadogや有料サービスへの移行を検討してください。