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 の比較

観点DatadogPrometheus + 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や有料サービスへの移行を検討してください。