OpenTelemetry 向けマネージドサービスは、マイクロサービス間を流れるリクエストのエンドツーエンド可視性を提供します。AlbConfig で Xtrace を有効化すると、ALB はイングレスレイヤーで各リクエストにトレース ID をアタッチします。これにより、個々のサービスにトレース機能を手動で導入することなく、アクセスログと分散トレースを関連付けることができます。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
クラスターに ALB Ingress Controller(バージョン 2.11.1 以降)がインストールされていること
ACK コンソールACK コンソール新規クラスターの場合: クラスター作成時の コンポーネント設定 ページで、Ingress フィールドから ALB Ingress を選択します。詳細については、「ACK マネージドクラスターの作成」「ACK 専用クラスターの作成(新規クラスター作成は終了済み)」または「ACK サーバーレスクラスターの作成」をご参照ください。
既存のクラスターの場合: 「コンポーネントの管理」を参照し、コンポーネントをインストールまたはアップグレードします。
(条件付き)ACK 専用クラスターを使用する場合:ALB Ingress Controller に必要なアクセス権限が付与済みであること。「ACK 専用クラスターに対する ALB Ingress Controller のアクセス権限の付与」をご参照ください。
OpenTelemetry 向けマネージドサービスが有効化されていること。有効化Managed Service for OpenTelemetry します。
仕組み
リクエストが ALB リスナーに到達すると、ALB は Zipkin サンプリングアルゴリズムを用いてトレース ID を生成し、リクエストヘッダーに挿入します。トレース ID を含むリクエストはバックエンドサービスに転送されます。各リクエストのアクセスログ(トレース ID を含む)は Simple Log Service (SLS) の Logstore に書き込まれます。OpenTelemetry 向けマネージドサービスはこれらのログを読み取り、完全なトレースを再構築します。再構築されたトレースは OpenTelemetry コンソールで確認できます。
Xtrace は AlbConfig のリスナーレベルで設定されます。サンプリング率は、そのリスナー上のすべてのトラフィックに一様に適用されます。
ALB Ingress への Xtrace の有効化
ステップ 1:クラスター向け Simple Log Service の有効化
クラスター向けに Simple Log Service を有効化します。有効化後、クラスターは自動的に SLS プロジェクトを作成します。手順については、「ACK クラスターのコンテナからログを収集する」をご参照ください。
ステップ 2:SLS プロジェクト ID の取得
ACK コンソール にログインし、左側ナビゲーションウィンドウで クラスター をクリックします。
ご利用のクラスター名をクリックし、左側ナビゲーションウィンドウで クラスター情報 をクリックします。
基本情報 タブで、Simple Log Service プロジェクト フィールドの値をコピーします。次のステップでこの ID を使用します。
ステップ 3:AlbConfig の作成
AlbConfig は、Simple Log Service のアクセスログが有効化された ALB インスタンスを作成し、リスナー上で Xtrace を設定します。
以下の内容で
alb-test.yamlを作成します。ALB インスタンスで Simple Log Service アクセスログが有効化された後のみ、Xtrace 設定を変更できます。既存の ALB インスタンスを再利用する場合は、
forceOverride: trueをspec.configの下に設定して、既存のプロパティを上書きします。「既存の ALB インスタンスの再利用」をご参照ください。vSwitch の作成方法については、「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 # Xtrace を有効化するには true を設定します。デフォルト値: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-svcサービスをデプロイします。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: NodePortDeployment およびサービスをデプロイします。
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 Ingress を使用してサービスを外部トラフィックに公開する」をご参照ください。
ステップ 7:トレースデータを生成するためのリクエスト送信
ALB インスタンスのアドレスを取得します。
kubectl get ing期待される出力:
NAME CLASS HOSTS ADDRESS PORTS AGE cafe-ingress alb demo.domain.ingress.top alb-u53i28ewt580*****.cn-<リージョン>.alb.aliyuncs.com 80 16mサービスにリクエストを送信します。
コンソールにトレースが表示されるまでに必要なリクエスト数は、サンプリング率によって異なります。
tracingSample: 9999(99.99 %)の場合は、1 回のリクエストで十分です。一方、tracingSample: 100(1 %)などの低い率では、トレースが確実にキャプチャされるよう、少なくとも 100 回のリクエストを送信してください:bash for i in $(seq 1 100); do curl -s -o /dev/null -H Host:demo.domain.ingress.top http://alb-u53i28ewt580*****.cn-<リージョン>.alb.aliyuncs.com/coffee; donecurl -H Host:demo.domain.ingress.top http://alb-u53i28ewt580*****.cn-<リージョン>.alb.aliyuncs.com/coffee応答は、タイトルが Hello World の HTML ページです。
トレーシングの検証
SLS アクセスログの確認
ACK コンソール にログインし、左側ナビゲーションウィンドウで クラスター をクリックします。
ご利用のクラスター名をクリックし、クラスター情報 をクリックします。
基本情報 タブで、Simple Log Service プロジェクト フィールドのリンクをクリックして SLS コンソールを開きます。左側ナビゲーションウィンドウで、
alb_で始まる名前の Logstore(例:alb_xz92lvykqj1siwvif****)を選択します。xtraceを検索し、リクエストに Xtrace データが含まれていることを確認します。
OpenTelemetry コンソールでのトレースの表示
OpenTelemetry 向けマネージドサービス コンソール にログインします。
アプリケーション ページで、上部ナビゲーションバーからリージョンを選択し、ご利用のアプリケーション名をクリックします。
左側ナビゲーションウィンドウで API 呼び出し をクリックし、トレース タブをクリックしてトレースデータを表示します。このタブには、持続時間が最も長い上位 100 件のトレースが表示されます。詳細については、「インターフェイス呼び出し」をご参照ください。
次のステップ
Nginx Ingress を使用した分散トレーシングを実装する場合は、「Nginx Ingress Controller コンポーネント向けトレーシング分析の実装」をご参照ください。
問題が発生した場合は、「ALB Ingress のトラブルシューティング」および「ALB Ingress のよくある質問」をご参照ください。