This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.5.6.3. アプリケーションの障害を調査するためのアプリケーション診断データの収集
アプリケーションの障害は実行中のアプリケーション Pod 内で発生する可能性があります。このような状態では、以下のストラテジーを使用して診断情報を取得できます。
- アプリケーション Pod に関連するイベントを確認します。
- アプリケーション Pod からログを確認します。これには、OpenShift Container Platform のロギングフレームワークによって収集されないアプリケーション固有のログファイルが含まれます。
- アプリケーション機能を対話的にテストし、アプリケーションコンテナーで診断ツールを実行します。
前提条件
-
cluster-admin
ロールを持つユーザーとしてクラスターにアクセスできる。 -
OpenShift CLI (
oc
) がインストールされている。
手順
特定のアプリケーション Pod に関連するイベントを一覧表示します。以下の例では、
my-app-1-akdlg
という名前のアプリケーション Pod のイベントを取得します。oc describe pod/my-app-1-akdlg
$ oc describe pod/my-app-1-akdlg
Copy to Clipboard Copied! Toggle word wrap Toggle overflow アプリケーション Pod からのログを確認します。
oc logs -f pod/my-app-1-akdlg
$ oc logs -f pod/my-app-1-akdlg
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 実行中のアプリケーション Pod 内で特定のログをクエリーします。標準出力 (stdout) に送信されるログは OpenShift Container Platform のロギングフレームワークによって収集され、これは前述のコマンドの出力に含まれます。以下のクエリーは、標準出力 (stdout) に送信されないログにのみ必要です。
Pod 内で root 権限なしにアプリケーションログにアクセスできる場合は、以下のようにログファイルを連結します。
oc exec my-app-1-akdlg -- cat /var/log/my-application.log
$ oc exec my-app-1-akdlg -- cat /var/log/my-application.log
Copy to Clipboard Copied! Toggle word wrap Toggle overflow アプリケーションログの表示に root アクセスが必要な場合は、root 権限でデバッグコンテナーを起動し、コンテナー内でログファイルを表示できます。プロジェクトの
DeploymentConfig
オブジェクトからデバッグコンテナーを起動します。通常、Pod ユーザーは root 以外の権限で実行しますが、問題を調査するために一時的な root 権限で Pod のトラブルシューティングを実行することは役に立ちます。oc debug dc/my-deployment-configuration --as-root -- cat /var/log/my-application.log
$ oc debug dc/my-deployment-configuration --as-root -- cat /var/log/my-application.log
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記oc debug dc/<deployment_configuration> --as-root
を-- <command>
を追加せずに実行する場合、デバッグ Pod 内で root アクセスでインタラクティブなシェルにアクセスできます。
インタラクティブなシェルでアプリケーション機能を対話的にテストし、アプリケーションコンテナーで診断ツールを実行します。
アプリケーションコンテナーでインタラクティブなシェルを起動します。
oc exec -it my-app-1-akdlg /bin/bash
$ oc exec -it my-app-1-akdlg /bin/bash
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - シェルからアプリケーションの機能を対話的にテストします。たとえば、コンテナーのエントリーポイントコマンドを実行して、結果を確認することができます。次に、ソースコードを更新し、S2I プロセスでアプリケーションコンテナーを再ビルドする前に、コマンドラインから直接に変更をテストします。
コンテナー内で利用可能な診断バイナリーを実行します。
注記一部の診断バイナリーを実行するには、root 権限が必要です。このような状況では、
oc debug dc/<deployment_configuration> --as-root
を実行して、問題のある Pod のDeploymentConfig
オブジェクトに基づいて、root 権限でデバッグ Pod を起動できます。次に、デバッグ Pod 内から診断バイナリーを root として実行できます。
診断バイナリーがコンテナー内で利用できない場合は、
nsenter
を使用して、コンテナーの namespace 内でホストの診断バイナリーを実行できます。以下の例では、ホストのip
バイナリーを使用して、コンテナーの namespace 内でip ad
を実行します。ターゲットノードのデバッグセッションに入ります。この手順は、
<node_name>-debug
というデバッグ Pod をインスタンス化します。oc debug node/my-cluster-node
$ oc debug node/my-cluster-node
Copy to Clipboard Copied! Toggle word wrap Toggle overflow /host
をデバッグシェル内の root ディレクトリーとして設定します。デバッグ Pod は、Pod 内の/host
にホストの root ファイルシステムをマウントします。root ディレクトリーを/host
に変更すると、ホストの実行パスに含まれるバイナリーを実行できます。chroot /host
# chroot /host
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記Red Hat Enterprise Linux CoreOS (RHCOS) を実行する OpenShift Container Platform 4.5 クラスターノードは変更できず、Operator を使用してクラスターの変更を適用します。SSH を使用したクラスターノードへのアクセスは推奨されず、ノードは accessed のテイントのマークが付けられます。ただし、OpenShift Container Platform API が利用できない場合や、kubelet がターゲットノードで適切に機能しない場合、
oc
操作がその影響を受けます。この場合は、代わりにssh core@<node>.<cluster_name>.<base_domain>
を使用してノードにアクセスできます。ターゲットコンテナー ID を判別します。
crictl ps
# crictl ps
Copy to Clipboard Copied! Toggle word wrap Toggle overflow コンテナーのプロセス ID を確認します。この例では、ターゲットコンテナー ID は
a7fe32346b120
です。crictl inspect a7fe32346b120 --output yaml | grep 'pid:' | awk '{print $2}'
# crictl inspect a7fe32346b120 --output yaml | grep 'pid:' | awk '{print $2}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ホストの
ip
バイナリーを使用して、コンテナーの namespace 内でip ad
を実行します。この例では、31150
をコンテナーのプロセス ID として使用します。nsenter
コマンドは、ターゲットプロセスの namespace を入力し、その namespace でコマンドを実行します。この例のターゲットプロセスはコンテナーのプロセス ID であるため、ip ad
コマンドは、ホストからコンテナーの namespace で実行されます。nsenter -n -t 31150 -- ip ad
# nsenter -n -t 31150 -- ip ad
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記デバッグノードなどの特権付きコンテナーを使用している場合のみ、コンテナーの namespace 内でホストの診断バイナリーを実行できます。