Application Signals を使用したカスタムメトリクス - Amazon CloudWatch

Application Signals を使用したカスタムメトリクス

アプリケーションのパフォーマンスと可用性をモニタリングするために、Application Signals は有効化後に、検出されたアプリケーションから標準メトリクス (障害、エラー、レイテンシー) とランタイムメトリクスを収集します。

カスタムメトリクスは、アプリケーションのモニタリングに貴重なコンテキストを追加し、トラブルシューティングを迅速化します。カスタムメトリクスを使用すると、以下のことができます。

  • テレメトリデータの分析をカスタマイズする

  • 問題の根本原因を特定する

  • 正確なビジネスおよび運用上の意思決定を迅速に行う

Application Signals を使用すると、サービスから生成されたカスタムメトリクスを表示し、標準メトリクスおよびランタイムメトリクスと関連付けることができます。例えば、アプリケーションはリクエストサイズとキャッシュミス数のメトリクスを出力できます。これらのカスタムメトリクスにより、パフォーマンスの問題をより詳細に把握できるため、可用性の低下やレイテンシーの急増をより迅速に診断して解決できます。

Application Signals へのカスタムメトリクスの設定

OpenTelemetry メトリクススパンメトリクスの 2 つの方法を使用して、アプリケーションからカスタムメトリクスを生成できます。

OpenTelemetry メトリクス

Application Signals でカスタム OpenTelemetry メトリクスを使用するには、CloudWatch エージェントまたは OpenTelemetry Collector を使用する必要があります。カスタム OpenTelemetry メトリクスを使用すると、OpenTelemetry Metrics SDK を使用してアプリケーションコードから直接メトリクスを作成およびエクスポートできます。

  1. Application Signals にサービスをオンボードします。

  2. エージェントまたはコレクターを設定します。

    • CloudWatch エージェントを使用する場合は、otlpmetrics_collected設定する必要があります。例: cloudwatch-config.json

      { "traces": { "traces_collected": { "application_signals": {} } }, "logs": { "metrics_collected": { "application_signals": {}, "otlp": { "grpc_endpoint": "0.0.0.0:4317", "http_endpoint": "0.0.0.0:4318" } } } }
    • OpenTelemetry Collector を使用する場合は、メトリクスパイプラインを設定します。CloudWatch EMF Exporter for OpenTelemetry Collector を使用し、Resource Attributes to Metric Labels を有効にする必要があります。多くのメトリクス集約が発生しないように dimension_rollup_option: NoDimensionRollup を設定することをお勧めします。例: config.yaml:

      receivers: otlp: protocols: grpc: endpoint: 0.0.0.0:4317 http: endpoint: 0.0.0.0:4318 exporters: awsemf: region: $REGION namespace: $NAMESPACE log_group_name:$LOG_GROUP_NAME resource_to_telemetry_conversion: enabled: true dimension_rollup_option: "NoDimensionRollup" otlphttp/traces: compression: gzip traces_endpoint: https://xray.$REGION.amazonaws.com/v1/traces auth: authenticator: sigv4auth/traces extensions: sigv4auth/logs: region: "$REGION" service: "logs" sigv4auth/traces: region: "$REGION" service: "xray" processors: batch: service: telemetry: extensions: [sigv4auth/logs, sigv4auth/traces] pipelines: metrics: receivers: [otlp] processors: [batch] exporters: [awsemf] traces: receivers: [otlp] processors: [batch] exporters: [otlphttp/traces]
  3. 環境を設定します。同じサービス名を持つ複数のサービスがあり、Application Signals メトリクスを正しいサービス名に正確に関連付ける場合は、リソース属性 deployment.environment.name を設定することをお勧めします。このリソース属性の設定は、通常、環境変数を通じて行われます。

    OTEL_RESOURCE_ATTRIBUTES="service.name=$YOUR_SVC_NAME,deployment.environment.name=$YOUR_ENV_NAME"
  4. CloudWatch エージェントまたは OpenTelemetry Collector へのメトリクスのエクスポートを設定します。これを行うには、以下のいずれかのアプローチを使用できます。

    • (推奨) カスタムエクスポートパイプライン – アプリケーションコードで、設定されたエージェントまたはコレクターエンドポイントへの専用の MeterProvider エクスポートを作成します。例:

      Resource resource = Resource.getDefault().toBuilder() .put(AttributeKey.stringKey("service.name"), serviceName) .put(AttributeKey.stringKey("deployment.environment.name"), environment) .build(); MetricExporter metricExporter = OtlpHttpMetricExporter.builder() .setEndpoint("http://localhost:4318/v1/metrics") .build(); MetricReader metricReader = PeriodicMetricReader.builder(metricExporter) .setInterval(Duration.ofSeconds(10)) .build() SdkMeterProvider meterProvider = SdkMeterProvider.builder() .setResource(resource) .registerMetricReader() .build(); Meter meter = meterProvider.get("myMeter");
    • エージェントベースのエクスポート – エージェント環境変数 OTEL_METRICS_EXPORTEROTEL_EXPORTER_OTLP_METRICS_ENDPOINT を設定します。例:

      OTEL_METRICS_EXPORTER=otlp OTEL_EXPORTER_OTLP_METRICS_ENDPOINT=http://localhost:4318/v1/metrics

      アプリケーションコードでは、エージェントによって作成されたグローバル MeterProvider を使用します。例:

      Meter meter = GlobalOpenTelemetry.getMeter("myMeter");
  5. アプリケーションコードで OTEL Metrics SDK を使用して、OTEL メトリクスを追加します。例えば、Python で OTEL メトリクスを追加するには:

    counter = meter.counterBuilder("myCounter").build(); counter.add(value); counter.add(value, Attributes.of(AttributeKey.stringKey("Operation"), "myOperation"));

    Operation 属性を追加する必要はありませんが、Application Signals サービスオペレーションをカスタム OpenTelemetry メトリクスに関連付けるのに役立ちます。

スパンメトリクス

カスタムスパンメトリクスは現在、トランザクション検索でのみ機能します。カスタムスパンメトリクスを使用すると、以下のことができます。

  • メトリクスフィルターを使用してメトリクスを作成する

  • アプリケーションコードに追加されたスパン属性を処理する

  • 実装に OpenTelemetry Traces SDK を使用する

  1. トランザクション検索で Application Signals モニタリングを有効にします。詳細については、「Transaction Search」を参照してください。

    100% のメトリクスサンプリングを確実に行うために、スパンの 100% をエンドポイントに送信することをお勧めします。

  2. OTEL Traces SDK を使用してスパン属性を追加します。以下の 2 つの方法があります。

    • [推奨] 自動的に生成されたスパンに属性を追加します。例:

      Span.current().setAttribute("myattribute", value);
    • 手動で生成されたスパンに属性を追加します。例:

      Span span = tracer.spanBuilder("myspan").startSpan(); try (Scope scope = span.makeCurrent()) { span.setAttribute("myattribute", value); }
  3. 以下の値を使用してメトリクスフィルターを作成します。メトリクスフィルターを作成する方法については、「Create a metric filter for a log group」を参照してください。

    • ロググループ – aws/spans

    • フィルターパターン – { $.attributes.['myattribute'] = * }

    • メトリクス名 – myattribute (値は完全に一致する必要があります。一致しない場合、スパン相関は機能しません

    • メトリクス値 – $.attributes.['myattribute']

    • ディメンション – フィールド名: Service、フィールド値: $.attributes.['aws.local.service']、フィールド名: Environment、フィールド値: $.attributes.['aws.local.environment']、フィールド名: Operation、フィールド値: $.attributes.['aws.local.operation']

      注記

      手動で生成されたスパンに属性を追加する場合、aws.local.operation はスパンデータに存在しないため、Operation を設定できません。

Application Signals でのカスタムメトリクスの表示

Application Signals コンソールでサービスとオペレーションのカスタムメトリクスを表示できるようになりました。

  • [サービス] リストからサービスを選択すると、新しい [関連メトリクス] タブが表示されます

  • 選択したサービスの標準メトリクス、ランタイムメトリクス、および関連メトリクスを表示する

  • リストから複数のメトリクスをフィルタリングして選択する

  • 選択したメトリクスをグラフ化して、問題の相関関係と根本原因を特定する

関連メトリクスの詳細については、「関連メトリクスを表示する」を参照してください。

よくある質問 (FAQ)

カスタムメトリクスの環境設定を追加しない場合、どのような影響がありますか?

Application Signals は、アプリケーションの曖昧さを解消するために deployment.environment.name リソース属性を設定します。Application Signals は、同じ名前の 2 つの異なるサービスから生成されたカスタムメトリクスを、曖昧さを解消することなく正しいサービスに関連付けることはできません。

アプリケーションに環境設定を追加するには、「OpenTelemetry メトリクス」を参照してください。

メトリクスフィルターには制限がありますか?

CloudWatch Logs ロググループごとに作成できるメトリクスフィルターは最大 100 個です。定義される各メトリクスには、最大 3 つのディメンションを設定できます。メトリクスフィルターの制限は、「OpenTelemetry メトリクス」で確認できます。

メトリクステーブルにメトリクスグラフが表示されないのはなぜですか?

ソリューションは、メトリクスタイプによって異なります。