4.4. Jaeger UI の Monitor タブの設定
リクエストのレート、エラー、および期間 (RED) メトリクスをトレースから抽出して、OpenShift Container Platform Web コンソールの Monitor タブの Jaeger コンソールで視覚化できます。メトリクスは、Prometheus によってコレクターからスクレイピングされた OpenTelemetry コレクター内のスパンから導出されます。Prometheus は、ユーザーワークロードモニタリングスタックにデプロイできます。Jaeger UI は、Prometheus エンドポイントからこれらのメトリクスをクエリーし、可視化します。
前提条件
- Distributed Tracing Platform の権限とテナントを設定した。詳細は、「権限とテナントの設定」を参照してください。
手順
OpenTelemetry Collector の
OpenTelemetryCollector
カスタムリソースで、Spanmetrics コネクター (spanmetrics
) を有効にします。このコネクターは、トレースからメトリクスを導出し、そのメトリクスを Prometheus 形式でエクスポートします。スパン RED 用の
OpenTelemetryCollector
カスタムリソースの例apiVersion: opentelemetry.io/v1beta1 kind: OpenTelemetryCollector metadata: name: otel spec: mode: deployment observability: metrics: enableMetrics: true config: | connectors: spanmetrics: metrics_flush_interval: 15s receivers: otlp: protocols: grpc: http: exporters: prometheus: endpoint: 0.0.0.0:8889 add_metric_suffixes: false resource_to_telemetry_conversion: enabled: true otlp: auth: authenticator: bearertokenauth endpoint: tempo-redmetrics-gateway.mynamespace.svc.cluster.local:8090 headers: X-Scope-OrgID: dev tls: ca_file: /var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt insecure: false extensions: bearertokenauth: filename: /var/run/secrets/kubernetes.io/serviceaccount/token service: extensions: - bearertokenauth pipelines: traces: receivers: [otlp] exporters: [otlp, spanmetrics] metrics: receivers: [spanmetrics] exporters: [prometheus] # ...
apiVersion: opentelemetry.io/v1beta1 kind: OpenTelemetryCollector metadata: name: otel spec: mode: deployment observability: metrics: enableMetrics: true
1 config: | connectors: spanmetrics:
2 metrics_flush_interval: 15s receivers: otlp:
3 protocols: grpc: http: exporters: prometheus:
4 endpoint: 0.0.0.0:8889 add_metric_suffixes: false resource_to_telemetry_conversion: enabled: true
5 otlp: auth: authenticator: bearertokenauth endpoint: tempo-redmetrics-gateway.mynamespace.svc.cluster.local:8090 headers: X-Scope-OrgID: dev tls: ca_file: /var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt insecure: false extensions: bearertokenauth: filename: /var/run/secrets/kubernetes.io/serviceaccount/token service: extensions: - bearertokenauth pipelines: traces: receivers: [otlp] exporters: [otlp, spanmetrics]
6 metrics: receivers: [spanmetrics]
7 exporters: [prometheus] # ...
Copy to Clipboard Copied! - 1
ServiceMonitor
カスタムリソースを作成して、Prometheus エクスポーターの収集を有効にします。- 2
- Spanmetrics コネクターはトレースを受信し、メトリクスをエクスポートします。
- 3
- OpenTelemetry プロトコルのスパンを受信する OTLP レシーバー。
- 4
- Prometheus エクスポーターは、Prometheus 形式でメトリクスをエクスポートするために使用されます。
- 5
- リソース属性はデフォルトでドロップされます。
- 6
- Spanmetrics コネクターは、トレースパイプラインのエクスポーターとして設定されています。
- 7
- Spanmetrics コネクターは、メトリクスパイプラインのレシーバーとして設定されています。
TempoStack
カスタムリソースで、Monitor タブを有効にし、ユーザー定義のモニタリングスタックからデータを照会するように、Prometheus エンドポイントを Thanos Querier サービスに設定します。Monitor タブが有効な
TempoStack
カスタムリソースの例apiVersion: tempo.grafana.com/v1alpha1 kind: TempoStack metadata: name: redmetrics spec: storage: secret: name: minio-test type: s3 storageSize: 1Gi tenants: mode: openshift authentication: - tenantName: dev tenantId: "1610b0c3-c509-4592-a256-a1871353dbfa" template: gateway: enabled: true queryFrontend: jaegerQuery: monitorTab: enabled: true prometheusEndpoint: https://thanos-querier.openshift-monitoring.svc.cluster.local:9092 redMetricsNamespace: "" # ...
apiVersion: tempo.grafana.com/v1alpha1 kind: TempoStack metadata: name: redmetrics spec: storage: secret: name: minio-test type: s3 storageSize: 1Gi tenants: mode: openshift authentication: - tenantName: dev tenantId: "1610b0c3-c509-4592-a256-a1871353dbfa" template: gateway: enabled: true queryFrontend: jaegerQuery: monitorTab: enabled: true
1 prometheusEndpoint: https://thanos-querier.openshift-monitoring.svc.cluster.local:9092
2 redMetricsNamespace: ""
3 # ...
Copy to Clipboard Copied! オプション:
spanmetrics
コネクターによって生成されるスパン RED メトリクスを、アラートルールで使用します。たとえば、このコネクターは、サービスの速度低下に関するアラートの場合や、サービスレベル目標 (SLO) を定義する場合のために、duration_bucket
ヒストグラムとcalls
カウンターメトリクスを作成します。これらのメトリクスには、サービス、API 名、操作タイプ、その他の属性を識別するラベルが付いています。表4.4 spanmetrics コネクターで作成されるメトリクスのラベル ラベル 説明 値 service_name
otel_service_name
環境変数によって設定されるサービス名。frontend
span_name
操作の名前。
-
/
-
/customer
span_kind
サーバー、クライアント、メッセージング、または内部操作を識別します。
-
SPAN_KIND_SERVER
-
SPAN_KIND_CLIENT
-
SPAN_KIND_PRODUCER
-
SPAN_KIND_CONSUMER
-
SPAN_KIND_INTERNAL
フロントエンドサービスで 2000 ミリ秒以内に 95% の要求が処理されない場合の SLO のアラートルールを定義する
PrometheusRule
カスタムリソースの例apiVersion: monitoring.coreos.com/v1 kind: PrometheusRule metadata: name: span-red spec: groups: - name: server-side-latency rules: - alert: SpanREDFrontendAPIRequestLatency expr: histogram_quantile(0.95, sum(rate(duration_bucket{service_name="frontend", span_kind="SPAN_KIND_SERVER"}[5m])) by (le, service_name, span_name)) > 2000 labels: severity: Warning annotations: summary: "High request latency on {{$labels.service_name}} and {{$labels.span_name}}" description: "{{$labels.instance}} has 95th request latency above 2s (current value: {{$value}}s)"
apiVersion: monitoring.coreos.com/v1 kind: PrometheusRule metadata: name: span-red spec: groups: - name: server-side-latency rules: - alert: SpanREDFrontendAPIRequestLatency expr: histogram_quantile(0.95, sum(rate(duration_bucket{service_name="frontend", span_kind="SPAN_KIND_SERVER"}[5m])) by (le, service_name, span_name)) > 2000
1 labels: severity: Warning annotations: summary: "High request latency on {{$labels.service_name}} and {{$labels.span_name}}" description: "{{$labels.instance}} has 95th request latency above 2s (current value: {{$value}}s)"
Copy to Clipboard Copied! - 1
- 95% のフロントエンドサーバーの応答時間値が 2000 ミリ秒未満であるかどうかを確認する式。時間範囲 (
[5m]
) が収集間隔の 4 倍以上で、メトリクスの変化に対応できる十分な長さである必要があります。
-