

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# カスタム SageMaker HyperPod クラスターメトリクスの作成
<a name="hyperpod-observability-addon-custom-metrics"></a>

Amazon SageMaker HyperPod (SageMaker HyperPod) オブザーバビリティアドオンは、すぐに使用できる、数百のヘルス、パフォーマンス、効率メトリクスを提供します。これらのメトリクスに加えて、モデル固有のパフォーマンス指標、データ処理統計、アプリケーション固有の測定値など、デフォルトのメトリクスではキャプチャされないアプリケーションやビジネスニーズに固有のカスタムメトリクスをモニタリングする必要がある場合があります。このニーズに対応するために、Python コードスニペットをアプリケーションに統合することで、OpenTelemetry を使用してカスタムメトリクスコレクションを実装できます。

カスタムメトリクスを作成するには、まず次のシェルコマンドを実行して、オブザーバビリティのために Python アプリケーションの計測に必要なコア OpenTelemetry コンポーネントをインストールします。このインストールにより、SageMaker HyperPod クラスターで実行される Python アプリケーションがカスタムテレメトリデータを出力できるようになります。このデータは OpenTelemetry コレクターが収集し、オブザーバビリティインフラストラクチャに転送されます。

```
pip install opentelemetry-api opentelemetry-sdk opentelemetry-exporter-otlp-proto-grpc
```

次のスクリプト例では、メトリクスにポッドとノードの情報を自動的にタグ付けし、クラスター内の適切な属性を確保して、これらのメトリクスを毎秒 SageMaker HyperPod 組み込みオブザーバビリティスタックに送信する、OpenTelemetry メトリクスパイプラインを設定します。このスクリプトは、SageMaker HyperPod メトリクスコレクターへの接続を確立して、識別に適切なリソース属性を設定し、さまざまなタイプのメトリクス (カウンター、ゲージ、ヒストグラム) を作成してアプリケーションのパフォーマンスのあらゆる側面を追跡できる課金インターフェイスを提供します。カスタムメトリクスは、システムメトリクスとともに SageMaker HyperPod モニタリングダッシュボードと統合されます。この統合により、単一のインターフェイスで包括的なオブザーバビリティが実現し、カスタムアラート、可視化、レポートを作成して、ワークロードの完全なパフォーマンスプロファイルをモニタリングできます。

```
import os
from opentelemetry import metrics
from opentelemetry.exporter.otlp.proto.grpc.metric_exporter import OTLPMetricExporter
from opentelemetry.sdk.metrics import MeterProvider
from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader
from opentelemetry.sdk.resources import Resource

# Get hostname/pod name
hostname = os.uname()[1]
node_name = os.getenv('NODE_NAME', 'unknown')

collector_endpoint = "hyperpod-otel-collector.hyperpod-observability:4317"

# Configure the OTLP exporter
exporter = OTLPMetricExporter(
    endpoint=collector_endpoint,
    insecure=True,
    timeout=5000  # 5 seconds timeout
)

reader = PeriodicExportingMetricReader(
    exporter,
    export_interval_millis=1000
)

resource = Resource.create({
    "service.name": "metric-test",
    "pod.name": hostname,
    "node.name": node_name
})

meter_provider = MeterProvider(
    metric_readers=[reader],
    resource=resource
)
metrics.set_meter_provider(meter_provider)

# Create a meter
meter = metrics.get_meter("test-meter")

# Create a counter
counter = meter.create_counter(
    name="test.counter",
    description="A test counter"
)

counter.add(1, {"pod": hostname, "node": node_name})
```