Anthos Service Mesh ログの収集

以降のセクションでは、問題のトラブルシューティングや Google サポートへの連絡のために、さまざまな Anthos Service Mesh ログを収集する方法について説明します。

バグ報告ツールを使用してログを収集する

Anthos Service Mesh には、関連する診断ログを収集し、収集したログを Google サポート チケットに関連付けことができる、自動化されたバグ報告ツールが用意されています。

開始する前に、kubeconfig コンテキストがターゲット クラスタに設定されていることを確認します。

  1. 次のコマンドを使用してコンテキストを確認します。

    kubectl config current-context
  2. バグ報告ツールをダウンロードして使用する手順は、使用している Anthos Service Mesh のバージョンによって異なります。現在のバージョンの istioctl で十分か、スタンドアロンのツールをダウンロードする必要があるかを判断するには、次の表をご覧ください。

Anthos Service Mesh と Istio のバージョン バグ報告ツール
Anthos Service Mesh 1.7.* 以降 istioctl bug-report
Anthos Service Mesh 1.6.* スタンドアロン
Anthos Service Mesh 1.5.* スタンドアロン
Istio 1.7.* スタンドアロン
Istio 1.6.* スタンドアロン
Istio 1.5.* スタンドアロン

バグ報告ツールのスタンドアロン バージョンをダウンロードする手順は次のとおりです。

  1. 使用している OS 環境に一致するディストリビューションをリストから選択します。

    • https://storage.googleapis.com/gke-release/asm/bug-report_darwin_amd64-v2
    • https://storage.googleapis.com/gke-release/asm/bug-report_linux_386-v2
    • https://storage.googleapis.com/gke-release/asm/bug-report_linux_amd64-v2
    • https://storage.googleapis.com/gke-release/asm/bug-report_linux_arm-v2
  2. curl を使用して、選択したディストリビューションをダウンロードします。次に例を示します。

    curl -LO https://storage.googleapis.com/gke-release/asm/bug-report_darwin_amd64-v1
  3. バグ報告ツールのバイナリに権限を設定して、実行を許可します。次に例を示します。

    chmod +x bug-report_darwin_amd64-v1

ログの収集を開始する

ログ収集を開始するには、バグ報告ツールを実行し、構成ファイルをパラメータとして渡します。必要に応じて構成を上書きするための追加のランタイム オプションを使用できます。これは --help オプションを使用して表示できます。

Anthos Service Mesh のバージョンの istioctl にバグ報告ツールがすでに含まれている場合は、次のコマンドを使用します。

istioctl bug-report

スタンドアロンのバグ報告ツールが必要な場合は、ツールの名前を変更して実行します。次のコマンドでは、Darwin ディストリビューションを使用しています。

mv ./bug-report_darwin_amd64-v1 ./bug-report
./bug-report

デバッグ アーカイブをアップロードする

デバッグ ログ アーカイブをバグ報告ツールの作業ディレクトリに配置します。アーカイブを展開し、トラブルシューティング ガイドに沿ってトラブルシューティングを行うことができます。ただし、サポート パッケージをお持ちの場合は、Google Cloud サポートにお問い合わせください。ログアーカイブを安全にアップロードするための手順をお知らせします。

Anthos Service Mesh ログを手動で収集する

このセクションでは、Anthos Service Mesh バグ報告ツールを使用する代わりに、関連するすべてのログを手動で収集する方法について説明します。

Envoy アクセスログ

Envoy プロキシ アクセスログには、トラブルシューティングに役立つ詳細情報が含まれています。ただし、これらのログを有効にして、適切な詳細レベルを設定する必要があります。

ログの内容を解釈する方法については、Envoy ログを解釈するをご覧ください。

Envoy ログを有効または無効にする

Envoy プロキシのアクセスログを有効にするには、次の例のように istioctl install を使用します。

istioctl install --set profile=PROFILE_NAME \
    --set meshConfig.accessLogFile="/dev/stdout" \
    --set meshConfig.accessLogEncoding="JSON"

istioctl install コマンドには、ログを構成する次のオプションが用意されています。

説明
accessLogFile プロキシ アクセスログのファイル名を定義します(例: /dev/stdout)。空の値を指定すると、アクセス ロギングが無効になります。
accessLogFormat プロキシ アクセスログの形式を定義します。空の値を指定すると、プロキシのデフォルトの形式でアクセスログが設定されます。
accessLogEncoding プロキシ アクセスログのエンコード(TEXT または JSON)。デフォルトは TEXT です。

ログを無効にするには、accessLogFile を空の文字列に設定します。

istioctl install --set profile=PROFILE_NAME \
    --set meshConfig.accessLogFile="" \
    --set meshConfig.accessLogEncoding="TEXT"

より詳細にロギングを行う

ログの詳細レベルを一時的に引き上げるには、次のコマンドを使用します。この設定は、Pod を再作成すると取り消されます。

kubectl -n NAMESPACE exec POD_NAME -c istio-proxy -- curl -X POST http://localhost:15000/logging?level=info

Envoy ログをフォルダに書き込む

Envoy プロキシのアクセスログを収集し、フォルダに保存するには、次のコマンドを使用します。

kubectl logs -l app=APPLICATION_NAME -c istio-proxy > /FILE_PATH

詳細については、Envoy のアクセスログを取得するをご覧ください。

Kubernetes ログ

Kubernetes は、Istiod、Ingress Gateway、プロキシなどの Istio コンポーネントの動作に関する情報を含むログを生成します。これらのログでエラーを確認することにより、問題の原因を絞り込むことができます。

Istiod のログをキャプチャするには、次のコマンドを使用します。

kubectl -n istio-system logs $(kubectl -n istio-system get pods -lapp=istiod -oname) > ./LOGS_FOLDER/istiod.log

Istio Ingress Gateway のログをキャプチャするには、次のコマンドを使用します。

kubectl -n istio-system logs $(kubectl -n istio-system get pods -lapp=istio-ingressgateway -oname) > /FILE_PATH

Istio プロキシのログをキャプチャするには、次のコマンドを使用します。

kubectl -n WORKLOAD_NAMESPACE logs POD_NAME -c istio-proxy > ./LOGS_FOLDER/proxy.log

Kubernetes 構成ダンプ

この情報により、クラスタに直接アクセスすることなく、さまざまなリソースの状態を確認し、構成上の問題を特定できます。次のコマンドは、Kubernetes 構成を YAML ファイルに書き込みます。

for namespace in "istio-system" "ns1" "ns2"; do kubectl get -oyaml deploy,statefulset,job,ingress,endpoints,configmap,event,secret,service,istio-io > ./LOGS_FOLDER/kubernetes.log; done

Envoy コアダンプ

通常、Envoy のコアダンプはエンドユーザーにとって有用なものではありませんが、トラブルシューティング プロセスの中で Google サポートから収集を依頼される場合があります。依頼された場合は、次の手順でログを収集してください。

  1. IstioOperator 構成に次のコードを追加して、メッシュ内のすべてのプロキシのコアダンプを有効にします。

    spec:
    values:
    global:
      proxy:
        enableCoreDumps: true
  2. 次のコマンドを使用して再インストールします。

    istioctl install -f myOperatorFile.yaml
  3. ターゲット Pod を削除して、プロキシ コアダンプを有効にして再作成します。

  4. このプロセスの実行中に問題が発生した場合は、istio-proxy コンテナで次のコマンドを実行して、コアダンプをトリガーします。

    kubectl exec -it POD_NAME -c istio-proxy
  5. Envoy コンテナの PID を見つけます。

    ps aux | grep -i envoy
  6. PID を使用して、コアダンプを生成している Envoy プロセスを停止します。

    kill -3 PID
  7. コンテナが再起動するまで待ちます(または、kill コマンドを使用します)。

  8. 次のコマンドを実行して、現在のディレクトリにコアダンプを抽出します。

    kubectl cp PID:/var/lib/istio/data/core.proxy -c istio-proxy ./core.proxy

Envoy プロキシの構成

Envoy の詳細なプロキシ構成には、トラブルシューティングに役立つ追加情報が含まれています。この情報は、次のコマンドで収集できます。この例では、ENDPOINT は次のいずれかになります(重要度が高い順): * /certs * /clusters * /listeners * /config_dump * /memory * /server_info * /stats/prometheus * /runtime

kubectl exec -i POD_NAME -c istio-proxy curl 127.0.0.1:15000/ENDPOINT > out.log