自社構築のK8SクラスタにLogListenerをインストールしてデプロイが完了した後、LogConfigを作成するか、コンソールから収集設定を行うことで、ログ収集を開始できます。
ログ収集に異常が発生した場合は、まず以下の手順に従って自己点検してください。
1. logconfigの状態を確認する
クラスタ内のすべての収集設定を表示するには:kubectl get logconfig
特定の収集設定を表示するには:kubectl get logconfig xxx -o yaml
logconfigの同期状態を確認します。statusがSynced以外の状態はすべて異常であり、異常情報はreasonに記載されます。正常な場合はすべてsuccessの状態です。
上記のようにlogconfigの状態同期が成功している場合、収集異常の原因は他の側面にあります。以下の図に示す通りです:
同期エラーの原因をさらに詳しく知りたい場合は、cls-provisionerのログを確認してください。 2. cls-provisionerのログを確認する
cls-provisionerのPodを特定するには:kubectl get pods -n kube-system -o wide |grep cls-provisioner
ログを確認するには:kubectl logs cls-provisioner-xxx -n kube-system
以下の図に示す通りです:
cls-provisionerのログを確認して、同期エラーの具体的な原因を調べます。 注意:
cls-provisionerコンポーネントの役割は、CLSサーバーと通信し、logconfigの収集設定を変換してCLSサーバーに同期することです。これにより、コレクターはサーバーから収集設定を取得し、正常なログ収集を行うことができます。
3. 収集エンドのログを確認する
収集設定の同期が正常であるにもかかわらず、ログ収集に異常がある場合は、収集側の関連ログを具体的に確認してください。
シンボリックリンクが正常に作成されたかどうかを確認します。
標準出力の収集を例に説明します:
/var/log/tke-log-agent/<収集設定名(logconfig名)>/stdout-docker-json の配下に、収集対象のPodの標準出力ログのシンボリックリンクが作成され、作成後に正常な収集が可能になります。
ここではDockerを例にしています。runtimeがcontainerdの場合、パスは /var/log/tke-log-agent/<収集設定名(logconfig名)>/stdout-containerd になります。
コンテナファイル収集のシンボリックリンクの作成方法は以下の通りです:
/var/log/tke-log-agent/<収集設定名(logconfig名)>/
以下の図に示す通りです:
上記の例に従ってシンボリックリンクが正常に作成されているかどうかを確認します。作成されていない場合は異常があります。正常に作成されている場合は、引き続きコレクターloglistenerのログを確認してください。 コレクターloglistenerのログを確認します。
kubectl get pods -n kube-system -o wide |grep tke-log-agent
まず、ログ収集に異常があるPodに対応するホスト上のtke-log-agentのPodを特定し、次にloglistenerのログを確認します。
kubectl logs tke-log-agent-xxx -n kube-system -c loglistener
上図に示すような readFile logs send succ!|topicid の文字列があるかどうかを確認します。ある場合は、ログが対応するtopicに正常に収集されたことを示します。上記の文字列がない場合は、収集に問題があることを示しており、関連する開発担当者に連絡してください。
すでにtopicに収集されているにもかかわらず検索できない場合は、まずtopicの全文インデックスが有効になっているかどうかを確認してください。