ポッドログの表示は、多くの場合、クラスターのワークロードの問題を診断するための最初のステップです。 Kubectlを使用してログを端末にライブストリーミングし、アプリケーションからの出力を検査できるようにする方法は次のとおりです。
Kubectlがインストールされ、クラスターに接続されていることを確認してください。 KUBECONFIG
を設定することにより、Kubeconfigファイルを指定できます。 シェルの環境変数:
export KUBECONFIG=~/.kube/my-cluster.yaml
次に、Kubectlを使用してポッドを一覧表示します:
kubectl get pods
-namespace
を追加することを忘れないでください ポッドがデフォルトの名前空間の外にある場合のフラグ:
kubectl --namespace my-namespace get pods
シェルに一時的なエイリアスを追加することは、この手順を短縮するための良い方法であり、同じ名前空間に対して複数のコマンドを実行するのに役立ちます。
alias k="kubectl --namespace my-namespace"
k get pods
kubectlログ
コマンドを使用すると、名前付きポッドによって生成されたログを検査できます:
kubectl logs pod-name
ポッドの既存のログが端末に送信されます。ポッドが複数のコンテナから形成されている場合は、検査するコンテナの名前も指定する必要があります。
kubectl logs pod-name container-name
または、-all-containers
を設定します ポッド内の任意のコンテナによって生成されたログ行を含めるフラグ。ビジーなポッドに対してこのフラグを使用すると、冗長で反復的な出力が表示される可能性があることに注意してください。
kubectl logs pod-name --all-containers
また、特定のラベルが付いたポッドのセットからログを取得することもできます。これにより、すべてのポッドが同じラベルを共有している場合、異なるポッドからのログを集約できます。
kubectl logs -l my-label=my-value --all-containers
プレーンなログ
コマンドは、現在保存されているポッドログを出力して終了します。 -f
を追加します (-フォローコード> )コマンドにフラグを立ててログを追跡し、端末にライブストリーミングします。
Ctrl + Cでコマンドを停止するまで、Kubectlは新しいログ行を端末に出力します。これは、 tail -f
を使用するのと同じです。 コンテナ化されていない環境でローカルログファイルを使用します。
kubectlログ
かつてポッドメンバーだったが、その後交換された古いコンテナによって生成されたログ行は含まれません。これらのログにアクセスするには、 -p
を追加します (-前へ
)フラグ。
その後、Kubectlは、ポッドの保存されたログ全体を表示します。これには、その後終了したコンテナによって発行された行も含まれます。
ログストリーム全体を表示する必要がない場合もあります。 Kubectlは--since
をサポートしています 一定時間後に放出されたログラインを表示するフラグ:
kubectl logs pod-name --since=2h
このコマンドは、 pod-name
からのログ出力を表示します 過去2時間以内に作成されました。もう1つのバリエーション、-since-time
、上記の相対時間式の代わりに、RFC3339準拠のタイムスタンプ文字列をサポートします。
-tail
フラグは、ログを凝縮するためのもう1つのオプションです。これにより、表示される行数が制限され、ごく最近の出力のみを表示する必要がある場合に端末がいっぱいになるのを回避できます。
# Shows the last 10 lines of the log
kubectl logs pod-name --tail=10
多くのアプリケーションがすでにログ出力にラインタイムスタンプを含めているため、Kubectlはデフォルトでラインタイムスタンプを表示しません。 -timestamps
を追加します ワークロードでタイムスタンプが提供されない場合に、Kubectlが行頭にタイムスタンプを追加するようにフラグを立てます。
検査したポッドとコンテナの名前をログ行に追加することもできます。この機能は、-prefix
でアクティブ化されます 国旗。 -timestamps
と組み合わせることができます 各行が作成された時刻とその元のソースを表示します。
kubectlログ
ポッドに加えて、展開およびジョブリソースと連携します:
kubectl logs job/my-job
kubectl logs deployment/my-deployment
ジョブまたはデプロイメント内の最初のコンテナからログを取得します。 -all-containers
を使用します 一致するコンテナのいずれかによって作成されたログを表示するためのフラグ。ポッド、デプロイメント、ジョブのいずれを表示していても、上記のすべてのフラグを使用できます。
Kubectlには、ログをフィルタリング、検索、または変換する方法は含まれていません。 kubectlログ
をパイプするのが最善です awk
などの確立されたターミナルツールに出力します 、 grep
またはsed
この目的のために。
kubectl logs my-pod | grep search-expression
同様に、シェルの既存のリダイレクト機能を使用して、ログをファイルに保存します。
kubectl logs my-pod > my-pod-logs.txt
Kubectlを使用すると、コンテナーごとまたは集合的に、リソースからログにアクセスできます。現在収集されているログのスナップショットを表示したり、端末に新しい回線を継続的にストリーミングしたり、終了したコンテナによって放出された履歴回線にアクセスしたりできます。
このコマンドには、行数リミッターや単純な日付フィルタリングなど、いくつかの制限されたカスタマイズオプションが付属しています。より要求の厳しい解析が必要な場合は、出力をUnixターミナルコマンドにパイプして、ログを迅速に分析し、アプリケーションのエラーの原因を見つけます。
Kubectlは、コンテナの標準出力およびエラーストリームからログを収集します。 kubectl logs
を実行すると、コンテナの設定が誤っていると出力が空になるため、これらのストリームに出力を正しく書き込むことが重要です。 。