Cloud Service Mesh ログを収集する
以降のセクションでは、問題のトラブルシューティングや Google サポートへの連絡のために、さまざまな Cloud Service Mesh ログを収集する方法について説明します。
バグ報告ツールを使用してログを収集する
Cloud Service Mesh には、関連する診断ログを収集し、収集したログを Google サポート チケットに関連付けことができる、自動化されたバグ報告ツールが用意されています。
開始する前に、kubeconfig コンテキストがターゲット クラスタに設定されていることを確認します。
次のコマンドを使用してコンテキストを確認します。
kubectl config current-context
ログの収集を開始する
ログの収集を開始するには、次のコマンドを使用してバグ報告ツールを実行します。
istioctl bug-report
デバッグ アーカイブをアップロードする
このツールは、メッシュのログと構成のアーカイブを作業ディレクトリに作成します。アーカイブを展開し、トラブルシューティング ガイドに沿ってトラブルシューティングを行うことができます。ただし、サポート パッケージをお持ちの場合は、Google Cloud サポートにお問い合わせください。ログアーカイブを安全にアップロードするための手順をお知らせします。
Cloud Service Mesh ログを手動で収集する
このセクションでは、Cloud Service Mesh バグ報告ツールを使用する代わりに、関連するすべてのログを手動で収集する方法について説明します。
Envoy アクセスログ
Envoy プロキシ アクセスログには、トラブルシューティングに役立つ詳細情報が含まれています。ただし、これらのログを有効にして、適切な詳細レベルを設定する必要があります。
ログの内容を解釈する方法については、Envoy ログを解釈するをご覧ください。
Envoy ログを有効または無効にする
Envoy プロキシ アクセスログを有効にするには、クラスタ内 Cloud Service Mesh にオーバーレイ ファイルを構成するか、マネージド Cloud Service Mesh に ConfigMap を構成します。
より詳細にロギングを行う
ログの詳細レベルを一時的に引き上げるには、次のコマンドを使用します。この設定は、Pod を再作成すると取り消されます。
kubectl -n NAMESPACE exec POD_NAME -c istio-proxy -- curl -X POST http://localhost:15000/logging?level=debug
ログの詳細レベルをデフォルトに戻すには、次のコマンドを使用します。
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 ns in `kubectl get namespaces -o=jsonpath='{.items[*].metadata.name}'` ; do echo "===NAMESPACE===" $ns >> ./LOGS_FOLDER/kubernetes.yaml ;kubectl get -oyaml -n $ns deploy,statefulset,job,ingress,endpoints,configmap,event,secret,service,istio-io >> ./LOGS_FOLDER/kubernetes.yaml; done
Envoy コアダンプ
通常、Envoy のコアダンプはエンドユーザーにとって有用なものではありませんが、トラブルシューティング プロセスの中で Google サポートから収集を依頼される場合があります。依頼された場合は、次の手順でログを収集してください。
Envoy コアダンプを書き込み可能なディレクトリに作成するようにカーネルを構成するには:
sidecar.istio.io/enableCoreDump=true
ラベルを Pod に追加します。Pod を再起動して Envoy コアダンプを有効にします。
Pod からコアダンプをコピーします。
Envoy プロキシを構成する
Envoy の詳細なプロキシ構成には、トラブルシューティングに役立つ追加情報が含まれています。この情報は、次のコマンドで収集できます。この例では、ENDPOINT は次のいずれかです(重要度が高い順に示します)。
- /certs
- /clusters
- /listeners
- /config_dump
- /memory
- /server_info
- /stats/prometheus
- /runtime
kubectl exec -i POD_NAME -c istio-proxy -n NAMESPACE curl 127.0.0.1:15000/ENDPOINT > out.log