

# Classic メトリクスから OTel メトリクスへの移行
<a name="metrics-otel-migrate"></a>

現在 PutMetricData または EMF を介してカスタムメトリクスを発行しているお客様は、OTel パスに増分移行できます。フラグデーはありません。移行はワークロードごとにご自身のペース進めていただけます。

## 移行アプローチ
<a name="metrics-otel-migrate-approach"></a>

移行には次の 4 つのフェーズがあります。

1. **デュアル書き込み** – Classic パスと OTel パスの両方の経由で、メトリクスを同時に発行します。

1. **検証** – PromQL を使用して、OTel メトリクスが Query Studio に表示されることを確認します。

1. **コンシューマーの再作成** – PromQL および OTel メトリクス名を使用するようにアラームとダッシュボードを更新します。

1. **カットオーバー** – OTel コンシューマーを検証した後に Classic の公開を停止します。

## ステップ 1: OTel SDK を使用して計測する (デュアル書き込み)
<a name="metrics-otel-migrate-step1"></a>

既存の PutMetricData 呼び出しを残したまま OTel SDK を追加します。両方のパスを同時に発行できるため、データが失われることはありません。

```
# Existing Classic publishing (keep running during migration)
cloudwatch.put_metric_data(
    Namespace='MyApp',
    MetricData=[{'MetricName': 'RequestLatency', 'Value': 42.5, 'Unit': 'Milliseconds'}]
)

# New OTel publishing (add this)
from opentelemetry import metrics
meter = metrics.get_meter("my-app")
histogram = meter.create_histogram("http_request_duration_seconds")
histogram.record(0.0425, {"method": "GET", "path": "/api/users"})
```

## ステップ 2: Query Studio で検証する
<a name="metrics-otel-migrate-step2"></a>

OTel メトリクスが到着していることを確認するには、CloudWatch コンソールを開き、Query Studio に移動します。メトリクスを検索します。

```
http_request_duration_seconds
```

データが、期待するラベルが付いた状態で表示されることを確認します。

## ステップ 3: OTel メトリクスでアラームを再作成する
<a name="metrics-otel-migrate-step3"></a>

PromQL 式を使用して、OTel メトリクスにクエリを実行する新しいアラームを作成します。次の例は、Classic アラームとそれに対応する OTel アラームを示しています。

**Classic アラーム:**

```
aws cloudwatch put-metric-alarm \
  --alarm-name "high-latency" \
  --namespace "MyApp" \
  --metric-name "RequestLatency" \
  --statistic Average --threshold 100 ...
```

**OTel 相当機能 (PromQL アラーム):**

```
aws cloudwatch put-metric-alarm \
  --alarm-name "high-latency-otel" \
  --metrics '[{"Id":"q1","Expression":"avg(http_request_duration_seconds{path=\"/api/users\"}) * 1000","Period":300,"ReturnData":true}]' \
  --threshold 100 ...
```

OTel バージョンが正しく作動することを確認できるまで、両方のアラームを並行して実行してください。

## ステップ 4: Classic の公開を停止する
<a name="metrics-otel-migrate-step4"></a>

OTel アラームとダッシュボードを検証したら、アプリケーションコードから PutMetricData 呼び出しを削除します。Classic メトリクスに対する課金は直ちに停止されます。

## メトリクス名のマッピング
<a name="metrics-otel-migrate-name-mapping"></a>

次の表は、一般的な Classic メトリクス名と、それに対応する推奨される OTel メトリクス名を示しています。


| Classic 名 | 推奨される OTel 名 | 注意事項 | 
| --- | --- | --- | 
| RequestLatency (ミリ秒) | http\_request\_duration\_seconds | 秒に変換 (OTel 規則) | 
| RequestCount | http\_requests\_total | カウンターに `_total` サフィックスを使用する | 
| ErrorCount | http\_server\_errors\_total | `_total` サフィックスを使用する | 
| QueueDepth | queue\_depth | ゲージ – サフィックスは必要ありません | 

## AWS 提供のメトリクスについてはどうですか?
<a name="metrics-otel-migrate-vended-metrics"></a>

AWS 提供のメトリクス (Amazon EC2 CPU、Amazon RDS 接続など) を手動で移行する必要はありません。OTel Vended Metric Enrichment を有効にすると、PromQL を介してそれらのメトリクスを自動的にクエリできるようになります。詳細については、「[OpenTelemetry 形式の AWS 提供のメトリクス](CloudWatch-OTelEnrichment.md)」を参照してください。