OpenTelemetry
このタスクを完了すると、アプリケーションの構築に使用する言語、フレームワーク、プラットフォームに関係なく、アプリケーションをOpenTelemetryを使用したトレーシングに参加させる方法を理解できます。
このタスクでは、サンプルアプリケーションとしてBookinfoサンプルを使用し、トレースのレシーバーとしてOpenTelemetry Collectorを使用します。
Istioがトレーシングをどのように処理するかを学ぶには、このタスクの概要をご覧ください。
OpenTelemetry Collectorのデプロイ
OpenTelemetry CollectorのNamespaceを作成する
$ kubectl create namespace observability
OpenTelemetry Collector をデプロイします。この設定例を起点として使用できます:
otel.yaml
$ kubectl apply -f @samples/open-telemetry/otel.yaml@ -n observability
インストール
すべてのトレースオプションは、MeshConfig
を介してグローバルに構成できます。設定を簡素化するために、istioctl install -f
コマンドに渡すことができる単一の YAML ファイルを作成することをお勧めします。
エクスポーターの選択
Istio は、gRPC または HTTP を介して OpenTelemetry Protocol (OTLP) トレースをエクスポートするように構成できます。一度に構成できるエクスポーターは 1 つだけです (gRPC または HTTP のいずれか)。
gRPC経由のエクスポート
この例では、トレースは OTLP/gRPC を介して OpenTelemetry Collector にエクスポートされます。この例では、環境リソース検出機能も有効にしています。環境検出機能は、環境変数 OTEL_RESOURCE_ATTRIBUTES
から属性をエクスポートされた OpenTelemetry リソースに追加します。
$ cat <<EOF | istioctl install -y -f -
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
meshConfig:
enableTracing: true
extensionProviders:
- name: otel-tracing
opentelemetry:
port: 4317
service: opentelemetry-collector.observability.svc.cluster.local
resource_detectors:
environment: {}
EOF
HTTP経由のエクスポート
この例では、トレースは OTLP/HTTP を介して OpenTelemetry Collector にエクスポートされます。この例では、環境リソース検出機能も有効にしています。環境検出機能は、環境変数 OTEL_RESOURCE_ATTRIBUTES
から属性をエクスポートされた OpenTelemetry リソースに追加します。
$ cat <<EOF | istioctl install -y -f -
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
meshConfig:
enableTracing: true
extensionProviders:
- name: otel-tracing
opentelemetry:
port: 4318
service: opentelemetry-collector.observability.svc.cluster.local
http:
path: "/v1/traces"
timeout: 5s
headers:
- name: "custom-header"
value: "custom value"
resource_detectors:
environment: {}
EOF
テレメトリーAPI経由でのメッシュのトレーシングの有効化
次の構成を適用して、トレースを有効にします。
$ kubectl apply -f - <<EOF
apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
name: otel-demo
spec:
tracing:
- providers:
- name: otel-tracing
randomSamplingPercentage: 100
customTags:
"my-attribute":
literal:
value: "default-value"
EOF
Bookinfoアプリケーションのデプロイ
Bookinfo サンプルアプリケーションをデプロイします。
Bookinfoサンプルを使用したトレースの生成
Bookinfo アプリケーションが起動して実行されたら、トレース情報を生成するために、
http://$GATEWAY_URL/productpage
に 1 回以上アクセスします。トレースデータを確認するには、サービスにリクエストを送信する必要があります。リクエストの数は Istio のサンプリングレートに依存し、Telemetry API を使用して構成できます。デフォルトのサンプリングレートである 1% では、最初のトレースが表示されるまでに少なくとも 100 回のリクエストを送信する必要があります。
productpage
サービスに 100 回のリクエストを送信するには、次のコマンドを使用します。$ for i in $(seq 1 100); do curl -s -o /dev/null "http://$GATEWAY_URL/productpage"; done
この例で使用されている OpenTelemetry Collector は、トレースをコンソールに出力するように構成されています。例の Collector 設定を使用した場合は、Collector のログを確認してトレースが到着していることを確認できます。次のような内容が含まれているはずです。
Resource SchemaURL: Resource labels: -> service.name: STRING(productpage.default) ScopeSpans #0 ScopeSpans SchemaURL: InstrumentationScope Span #0 Trace ID : 79fb7b59c1c3a518750a5d6dad7cd2d1 Parent ID : 0cf792b061f0ad51 ID : 2dff26f3b4d6d20f Name : egress reviews:9080 Kind : SPAN_KIND_CLIENT Start time : 2024-01-30 15:57:58.588041 +0000 UTC End time : 2024-01-30 15:57:59.451116 +0000 UTC Status code : STATUS_CODE_UNSET Status message : Attributes: -> node_id: STRING(sidecar~10.244.0.8~productpage-v1-564d4686f-t6s4m.default~default.svc.cluster.local) -> zone: STRING() -> guid:x-request-id: STRING(da543297-0dd6-998b-bd29-fdb184134c8c) -> http.url: STRING(http://reviews:9080/reviews/0) -> http.method: STRING(GET) -> downstream_cluster: STRING(-) -> user_agent: STRING(curl/7.74.0) -> http.protocol: STRING(HTTP/1.1) -> peer.address: STRING(10.244.0.8) -> request_size: STRING(0) -> response_size: STRING(441) -> component: STRING(proxy) -> upstream_cluster: STRING(outbound|9080||reviews.default.svc.cluster.local) -> upstream_cluster.name: STRING(outbound|9080||reviews.default.svc.cluster.local) -> http.status_code: STRING(200) -> response_flags: STRING(-) -> istio.namespace: STRING(default) -> istio.canonical_service: STRING(productpage) -> istio.mesh_id: STRING(cluster.local) -> istio.canonical_revision: STRING(v1) -> istio.cluster_id: STRING(Kubernetes) -> my-attribute: STRING(default-value)
クリーンアップ
Telemetry リソースを削除します。
$ kubectl delete telemetry otel-demo
control-C を使用するか、次のコマンドを使用して、まだ実行中の
istioctl
プロセスを削除します。$ killall istioctl
OpenTelemetry Collector をアンインストールします。
$ kubectl delete -f @samples/open-telemetry/otel.yaml@ -n observability $ kubectl delete namespace observability
後続のタスクを実行する予定がない場合は、アプリケーションをシャットダウンするための Bookinfo クリーンアップの手順を参照してください。