以降のセクションでは、問題のトラブルシューティングや Google サポートへの連絡のために、さまざまな Anthos Service Mesh ログを収集する方法について説明します。
バグ報告ツールを使用してログを収集する
Anthos Service Mesh には、関連する診断ログを収集し、収集したログを Google サポート チケットに関連付けことができる、自動化されたバグ報告ツールが用意されています。
開始する前に、kubeconfig コンテキストがターゲット クラスタに設定されていることを確認します。
次のコマンドを使用してコンテキストを確認します。
kubectl config current-context
バグ報告ツールをダウンロードして使用する手順は、使用している 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.* | スタンドアロン |
バグ報告ツールのスタンドアロン バージョンをダウンロードする手順は次のとおりです。
使用している 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
curl
を使用して、選択したディストリビューションをダウンロードします。次に例を示します。curl -LO https://storage.googleapis.com/gke-release/asm/bug-report_darwin_amd64-v1
バグ報告ツールのバイナリに権限を設定して、実行を許可します。次に例を示します。
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 サポートから収集を依頼される場合があります。依頼された場合は、次の手順でログを収集してください。
IstioOperator
構成に次のコードを追加して、メッシュ内のすべてのプロキシのコアダンプを有効にします。spec: values: global: proxy: enableCoreDumps: true
次のコマンドを使用して再インストールします。
istioctl install -f myOperatorFile.yaml
ターゲット Pod を削除して、プロキシ コアダンプを有効にして再作成します。
このプロセスの実行中に問題が発生した場合は、
istio-proxy
コンテナで次のコマンドを実行して、コアダンプをトリガーします。kubectl exec -it POD_NAME -c istio-proxy
Envoy コンテナの PID を見つけます。
ps aux | grep -i envoy
PID を使用して、コアダンプを生成している Envoy プロセスを停止します。
kill -3 PID
コンテナが再起動するまで待ちます(または、
kill
コマンドを使用します)。次のコマンドを実行して、現在のディレクトリにコアダンプを抽出します。
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