私はDocker Imageを使用して構築されたコンテナとしてOpenShiftをオンにしているスプリングブートアプリケーションを持っています。アプリケーションのログインを有効にして、すべてのログを印刷しました。これで、私の要求が失敗しているため、PODのログファイルを検討してエラーを確認します。コマンドラインオプションoc logs -f <podname>
をCMDプロンプトに印刷するだけでなく、ログ全体をサーバーからローカルファイルにコピーする必要があります。特定の行やエラーがあることがわかります。も可能ですか?
rsync コマンドを使用して、ポッド内外のファイルをコピーできます。
または、logs
コマンドを使用して、ファイルにリダイレクトするだけで、ローカルで編集できるようにしてください。
oc logs <podname> &> /path/to/file
_
上記のようにoc rsync
を試してみてください。
oc rsync <pod>:/path/to/file localfilename
しかし私の場合私は得た:
WARNING: cannot use rsync: rsync not available in container <pod>
だから私はoc cp
を試してみました、そしてそれはうまくいった:
oc cp <namespace>/<pod>:/path/to/file local_filename
名前空間を指定せずにCOPYコマンドは機能しません(エラーメッセージなし)、PODがどのプロジェクトに属していました。
<pod>
はポッド名です<namespace>
は実際には<pod>
が属するプロジェクトです。oc project
を使用して現在のプロジェクトを一覧表示するoc projects
すべてのプロジェクトをリストしますoc get pods --all-namespaces | egrep <pod>
# !!!Important Note!!!
# Requires that the 'tar' binary is present in your container
# image. If 'tar' is not present, 'kubectl cp' will fail.
# about my environment
# oc version
# oc 3.6, openshift 3.7, kubernetes 1.7
oCログpod_name -n project_name> filename.log
これは私にとって機能します
ログファイルは現在のディレクトリに生成されます。
oC CLIツールからログインしてから、プロジェクトに切り替え、実行:
oc logs <podname> >> <podname>.log
_
ログをCMDプロンプトに印刷するだけでなく、ログ全体をサーバーからローカルファイルにコピーする必要があります。特定の行やエラーがあることがわかります。も可能ですか?
PODが実行されているノードで_/var/log/containers
_の確認はどうですか?シンボリックリンクであるすべてのコンテナログが_<pod name>_<namespace>_<container name>-<hash>
_形式です。基本的に、_oc logs
_はそこに同じコンテナログも参照します。
例えば。>
_node ~# ls -1 /var/log/containers
alertmanager-main-0_openshift-monitoring_alertmanager-123...789.log
alertmanager-main-0_openshift-monitoring_alertmanager-456...123.log
alertmanager-main-0_openshift-monitoring_alertmanager-proxy-789...456.log
...
_
OC CLIツールから実行します。
oc logs pod_name -n project_name > filename.log
_
ファブリックポッドからローカルマシンにファイルをダウンロードするには
oCログインURL - トークン=&lttoken >>
oC rsh&ltpodname>
それがポッドに接続しているかどうかを確認し、いくつかのls -lhを実行します(応答を与えるはずです)
oC RSYNC&LTPODNAME&GT:&LTPATH> /logs.txt localFileName