AlbConfig で Xtrace を有効にすると、ALB イングレスでトレース ID を付与し、アクセスログを分散トレースと関連付けられます。サービスごとの計装は不要です。
前提条件
次の条件を満たしていることを確認してください:
クラスターに ALB Ingress Controller (バージョン 2.11.1 以降) がインストールされていること
[新規クラスター:] クラスター作成時の [コンポーネント構成] ページで、[Ingress] フィールドの [ALB イングレス] を選択します。詳細については、「ACK マネージドクラスターの作成」、「ACK 専用クラスターの作成」、または「ACK サーバーレスクラスターの作成」をご参照ください。
既存クラスター: 「コンポーネントの管理」でコンポーネントをインストールまたはアップグレードします。
(ACK 専用クラスターのみ) ALB Ingress Controller に必要なアクセス権限が付与されていること。詳細については、「ACK 専用クラスターに対する ALB Ingress Controller のアクセス権限の付与」をご参照ください。
Managed Service for OpenTelemetry が有効化されていること。必要に応じて有効化し、Managed Service for OpenTelemetry を利用可能にしてください。
仕組み
リクエストが ALB リスナーに到達すると、ALB は Zipkin のサンプリングアルゴリズムでトレース ID を生成し、リクエストヘッダーに挿入します。ALB はトレース ID を付与したままリクエストをバックエンドに転送します。トレース ID を含むアクセスログは、Simple Log Service (SLS) の Logstore に書き込まれます。Managed Service for OpenTelemetry がこれらのログを読み取り、トレースを再構築して OpenTelemetry コンソールに表示します。
AlbConfig のリスナーレベルで Xtrace を設定します。サンプリングレートは、そのリスナー上の全トラフィックに適用されます。
ALB イングレスの Xtrace の有効化
手順 1:クラスターでの Simple Log Service の有効化
クラスターで Simple Log Service を有効にして、SLS プロジェクトを自動作成します。詳細については、「ACK クラスターコンテナからのログ収集」をご参照ください。
手順 2:SLS プロジェクト ID の取得
ACK コンソールにログインし、[クラスター] をクリックします。
クラスター名をクリックし、[クラスター情報] をクリックします。
[基本情報] タブで、手順 3 で使用する [Simple Log Service プロジェクト] の値をコピーします。
手順 3:AlbConfig の作成
AlbConfig は、Simple Log Service のアクセスログを有効にし、リスナーで Xtrace を有効化した ALB インスタンスを作成します。
alb-test.yamlを作成します:Xtrace の設定は、ALB インスタンスで Simple Log Service のアクセスログを有効にした後にのみ変更してください。既存の ALB インスタンスを再利用する場合は、既存のプロパティを上書きするために、
spec.config配下でforceOverride: trueを設定します。詳細については、「既存の ALB インスタンスの再利用」をご参照ください。詳細については、「vSwitch の作成と管理」をご参照ください。
Xtrace パラメーター
パラメーター
説明
デフォルト
範囲
tracingEnabledリスナーで Xtrace を有効にします
falsetrue/falsetracingSampleサンプリングレート。10000 = 100%、5000 = 50%、1 = 0.01%
—
1–10000
tracingTypeサンプリングアルゴリズム
—
ZipkinapiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: alb-demo spec: config: name: alb-test addressType: Intranet zoneMappings: # vSwitch は、ALB がサポートするゾーンにあり、かつクラスターと同じ VPC に属している必要があります。高可用性のため、異なるゾーンにある少なくとも 2 つの vSwitch を選択してください。 - vSwitchId: vsw-2vc82nndnoo********** # vSwitch ID に置き換えてください。 - vSwitchId: vsw-2vc30f5mlhs********** accessLogConfig: logProject: "k8s-log-xz92lvykqj1siwvif****" # 手順 2 の SLS プロジェクト ID に置き換えてください。 logStore: alb_xz92lvykqj1siwvif**** # "alb_" で始まる必要があります。存在しない場合は自動的に作成されます。 listeners: - port: 80 protocol: HTTP logConfig: accessLogRecordCustomizedHeadersEnabled: false accessLogTracingConfig: tracingEnabled: true # true に設定して Xtrace を有効にします。デフォルト:false。 tracingSample: 9999 # サンプリングレート。範囲:1-10000。10000 = 100% です。例:9999 = 99.99%。 tracingType: Zipkin # サンプリングアルゴリズム。tracingEnabled が true の場合にのみ有効です。AlbConfig を適用します:
kubectl apply -f alb-test.yaml想定される出力:
albconfig.alibabacloud.com/alb-demo created
手順 4:IngressClass の作成
alb.yamlを作成します:apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: name: alb spec: controller: ingress.k8s.alibabacloud/alb parameters: apiGroup: alibabacloud.com kind: AlbConfig name: alb-demoIngressClass を適用します:
kubectl apply -f alb.yaml想定される出力:
ingressclass.networking.k8s.io/alb created
手順 5:サービスのデプロイと Ingress ルーティングの設定
cafe-service.yamlを作成して、coffeeDeployment とcoffee-svcService をデプロイします:apiVersion: apps/v1 kind: Deployment metadata: name: coffee spec: replicas: 2 selector: matchLabels: app: coffee template: metadata: labels: app: coffee spec: containers: - name: coffee image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: coffee-svc spec: ports: - port: 80 targetPort: 80 protocol: TCP selector: app: coffee type: NodePortサービスをデプロイします:
kubectl apply -f cafe-service.yaml想定される出力:
deployment.apps/coffee created service/coffee-svc createdIngress ルーティングルールを含む
cafe-ingress.yamlを作成します:apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: cafe-ingress spec: ingressClassName: alb rules: - host: demo.domain.ingress.top http: paths: - path: /coffee pathType: ImplementationSpecific backend: service: name: coffee-svc port: number: 80Ingress を適用します:
kubectl apply -f cafe-ingress.yaml想定される出力:
ingress.networking.k8s.io/cafe-ingress created
手順 6:ドメイン名前解決の設定
spec.rules.host でカスタムドメインを設定した場合は、ALB の DNS 名を参照する CNAME レコードを追加します。詳細については、「ALB イングレスの作成と使用による Service の外部トラフィックへの公開」をご参照ください。
手順 7:リクエスト送信によるトレースデータの生成
ALB アドレスを取得します:
kubectl get ing想定される出力:
NAME CLASS HOSTS ADDRESS PORTS AGE cafe-ingress alb demo.domain.ingress.top alb-u53i28ewt580*****.cn-<Region>.alb.aliyuncs.com 80 16mリクエストを送信します:
十分な数のリクエストがサンプリングされると、コンソールにトレースが表示されます。
tracingSample: 9999(99.99%) の場合は 1 回のリクエストで十分です。より低いレート (例:tracingSample: 100(1%)) の場合は、少なくとも 100 回リクエストを送信してください。curl -H Host:demo.domain.ingress.top http://alb-u53i28ewt580*****.cn-<Region>.alb.aliyuncs.com/coffeefor i in $(seq 1 100); do curl -s -o /dev/null -H Host:demo.domain.ingress.top http://alb-u53i28ewt580*****.cn-<Region>.alb.aliyuncs.com/coffee; doneNginx サーバーの情報を含む HTML ページが返されます。
トレーシングの検証
SLS アクセスログの確認
ACK コンソールにログインし、[クラスター] をクリックします。
クラスター名をクリックし、[クラスター情報] をクリックします。
[基本情報] タブで [Simple Log Service プロジェクト] リンクをクリックして SLS コンソールを開きます。名前が
alb_で始まる Logstore (例:alb_xz92lvykqj1siwvif****) を選択します。ログにslb_xtrace(トレース ID) とxtrace_type(値 zipkin) が含まれていれば、アクセスログにトレーシングデータが記録されていることを確認できます。
OpenTelemetry コンソールでのトレースの表示
[アプリケーション] ページでリージョンを選択し、アプリケーション名をクリックします。
[API コール] > [トレース] をクリックしてトレースデータを表示します。このタブには、所要時間が最も長いトレースが最大 100 件表示されます。詳細については、「Interface Calls」をご参照ください。
次のステップ
代わりに Nginx Ingress を使用して分散トレーシングを行う場合は、「Nginx Ingress Controller アドオン向けのトレーシング分析の実装」をご参照ください。
問題が発生した場合は、「ALB イングレスの問題のトラブルシューティング」および「ALB イングレスのよくある質問」をご参照ください。