Logtail を使用して標準コンテナまたは Kubernetes コンテナからログを収集する際に問題が発生した場合は、このトピックを参考に、問題のトラブルシューティング、実行ステータスの確認、およびその他のメンテナンス操作を行ってください。
マシングループのハートビートの確認
マシングループのハートビートを確認して、Logtail がコンテナに正しくインストールされていることを確認します。
-
マシングループのハートビートステータスを確認します。
Log Serviceコンソールにログインします。
[プロジェクト] セクションで、管理するプロジェクトをクリックします。
-
左側メニューで、 を選択します。
-
マシングループのリストで、対象のマシングループをクリックします。
-
サーバグループ設定 ページで、マシングループのステータスを表示し、ハートビートステータスが OK のノード数を確認します。
-
コンテナクラスター内のワーカーノードの数を確認します。
-
次のコマンドを実行して、クラスター内のワーカーノードの数を表示します。
kubectl get node | grep -v master次のような出力が表示されます。
NAME STATUS ROLES AGE VERSION cn-hangzhou.i-bp17enxc2us3624wexh2 Ready <none> 238d v1.10.4 cn-hangzhou.i-bp1ad2b02jtqd1shi2ut Ready <none> 220d v1.10.4
-
ハートビートステータスが OK のノード数と、コンテナクラスター内のワーカーノードの数を比較します。結果に基づいて問題をトラブルシューティングします。
-
マシングループ内のすべてのノードのハートビートステータスが「失敗」です。
-
標準 Docker コンテナからログを収集する場合は、「Dockerコンテナからのログ収集 (標準出力およびファイル)」を参照して、
${your_region_name}、${your_aliyun_user_id}、および${your_machine_group_user_defined_id}パラメーターが正しいことを確認します。 -
自己管理 Kubernetes クラスターを使用している場合は、「サイドカーを使用したKubernetesコンテナからのテキストログ収集」を参照して、
{regionId}、{aliuid}、{access-key-id}、および{access-key-secret}パラメーターが正しいことを確認します。パラメーターが正しくない場合は、
helm del --purge alibaba-log-controllerコマンドを実行してインストールパッケージを削除し、再インストールします。
-
-
ハートビートステータスが OK のノード数が、クラスター内のワーカーノードの数より少ないです。
-
DaemonSet が YAML ファイルを使用して手動でデプロイされたかどうかを確認します。
-
次のコマンドを実行します。結果が返された場合、DaemonSet が YAML ファイルを使用して手動でデプロイされたことを示します。
kubectl get po -n kube-system -l k8s-app=logtail -
${your_region_name}、${your_aliyun_user_id}、${your_machine_group_name} などのパラメーターを実際の値に設定します。
-
次のコマンドを実行して、更新されたファイルを適用します。
kubectl apply -f ./logtail-daemonset.yaml
-
-
-
FAQ:Docker/LoongCollector をデプロイした後、ハートビートがないのはなぜですか?
Docker デプロイ後、LoongCollector または Logtail がハートビートを示さない、またはマシングループへの登録に失敗する場合、主な原因は通常、ユーザー識別子 (AliUID) が設定されていないことです。
解決策:
-
ホストマシンで
/etc/ilogtail/users/ディレクトリを作成してください。mkdir -p /etc/ilogtail/users/ -
/etc/ilogtail/users/ディレクトリに、Alibaba Cloud アカウント ID を名前にした空のファイルを作成してください。touch /etc/ilogtail/users/<your-alibaba-cloud-account-id> -
LoongCollector または Logtail コンテナを起動する際に、次のフラグを追加してディレクトリを読み取り専用としてマウントしてください。
-v /etc/ilogtail/users:/etc/ilogtail/users:ro -
LoongCollector または Logtail コンテナを再起動してください。
検証: SLS コンソールにログインし、リソース > マシングループ に移動し、対象のマシングループを開きます。サーバグループ設定 ページで、マシングループのハートビートステータスが OK に変わったことを確認します。
FAQ:複数の Docker Swarm サーバーが同じ IP を報告しているのに、マシングループに1つのサーバーしか表示されないのはなぜですか?
原因: Docker Swarm クラスターでは、複数のサーバーがコンテナネットワークを介して同じ内部 IP アドレスを報告することがあります。これらのサーバーが同じ ALIYUN_LOGTAIL_USER_DEFINED_ID 環境変数の値を共有している場合、システムはそれらを区別できず、マシングループ には1つのエントリしか表示されません。
解決策1: 各サーバーの Logtail コンテナに一意の ALIYUN_LOGTAIL_USER_DEFINED_ID 環境変数を設定してください。
各サーバーで異なる値を設定し、その値が対応するマシングループの設定と一致することを確認します。例:
-e ALIYUN_LOGTAIL_USER_DEFINED_ID=<unique-id-for-this-server>
解決策2: ALIYUN_LOGTAIL_WORKING_IP 環境変数を設定して、各サーバーに一意の IP アドレスを手動で指定してください。
ホストのパブリック IP アドレスや、すべてのサーバー間で一意の内部ネットワーク IP アドレスなど、各ホストを一意に識別する値を使用します。
-e ALIYUN_LOGTAIL_WORKING_IP=<unique-ip-for-this-server>
コンテナログ収集のトラブルシューティング
SLS コンソールの プレビュー ページまたは Logstore のクエリページでログが見つからない場合、SLS がコンテナログを収集していない可能性があります。コンテナのステータスを確認してから、以下の点を確認してください。
-
マシングループのハートビートに問題がないか確認します。詳細については、「マシングループのハートビートの確認」をご参照ください。
-
Logtail の設定が正しいか確認します。
Logtail 設定の IncludeLabel、ExcludeLabel、IncludeEnv、および ExcludeEnv の設定が、ログ収集の要件を満たしているか確認します。
説明-
ここで指定するラベルは、Kubernetes のラベルではなく、
docker inspectの出力にあるコンテナのラベルです。 -
IncludeLabel、ExcludeLabel、IncludeEnv、および ExcludeEnv の設定を一時的に削除して、ログが収集できるか確認できます。ログが収集された場合、パラメーターの設定が間違っています。
説明自己管理の Docker ノード (非 Kubernetes) でレガシーの Logtail 設定を使用している場合は、以下に注意してください。
-
_container_name_フィールドは、複数の値に対する正規表現マッチングをサポートしていません。単一の正規表現を使用して複数の特定のコンテナ名をフィルタリングすることはできません。 -
複数の特定のコンテナ (例:
aとbという名前のコンテナ) からログを収集する必要がある場合は、それぞれに許可リストを持つ個別の Logtail 設定を2つ作成し、両方を同じマシングループにバインドします。 -
単一の Logtail 設定内で重複するラベル名は認識されません。同じラベル名に対して異なる値にマッチさせる必要がある場合は、正規表現を使用するか、複数の独立した Logtail 設定を作成します。
-
マシングループがすべてのコンテナノードをカバーしていない
症状: マシングループのハートビートは正常ですが、一部のコンテナからのログ収集が停止しました。
この問題は、コンテナがマシングループに含まれていないサーバーで実行されている場合に発生する可能性があります。
トラブルシューティングの手順:
-
関連するすべてのサーバーで、次のコマンドを実行して、コンテナが実際にどのノードで実行されているかを特定してください。
docker ps -a | grep <container-name> -
コンテナがマシングループに追加されていないサーバーで実行されている場合は、そのサーバーの IP アドレスを SLS コンソールのマシングループに追加してください。
FAQ:コンテナメタデータのプレビューで Pod が見つからない、または emptyDir からログを収集できないのはなぜですか?
原因: DaemonSet モードで実行されている Logtail は、コンテナ内の emptyDir 一時ストレージに直接アクセスできません。このため、Logtail はログファイルの読み取りやコンテナメタデータの抽出ができなくなり、コンテナメタデータのプレビューで Pod が見つからなくなります。
解決策1 (推奨): アプリケーションのログ出力を標準出力 (stdout/stderr) にリダイレクトします。
-
アプリケーションを変更して、ログをファイルではなく stdout または stderr に書き込むようにしてください。
-
SLS コンソールで、収集パスを標準の Kubernetes ログパスを使用するように設定します。
/logtail_host/var/log/pods/<namespace>_<pod-name>_<uid>/<container-name>/*.log
解決策2: アプリケーションがログをファイルに書き込む必要がある場合は、ログボリュームのマウントを emptyDir から hostPath または PVC に変更します。
-
Pod の仕様で、
emptyDirボリュームをhostPathまたは PVC の定義に置き換えて、ログがホストからアクセス可能なパスに永続化されるようにします。 -
SLS の収集パスを、ホスト上の実際のマウントパスを指すように調整します。例:
/logtail_host/var/log/your-app/*.log
FAQ:コンテナログを収集する際のファイル作成の失敗や権限エラーにはどう対処すればよいですか?
症状: Logtail がコンテナ内に特定の空ファイルを作成しようとして失敗した、または権限エラーが報告されたことを示すエラーメッセージが表示されます。
解決策:
-
エラーメッセージで指定された空ファイルをコンテナ内に手動で作成してください。
-
ファイルの権限を
-rw-r--r--(644) に設定してください。chmod 644 <file-path> -
コンテナを再起動してください。
代替案: 上記の手順を実行しても問題が解決しない場合は、コンテナのログディレクトリをホストマシンにマウントし、対応するホストパスからログを収集するように SLS を設定します。このアプローチは、コンテナ内でのファイル収集よりも安定しています。
FAQ:エラー「parse cri docker line error: invalid CRI log, timestamp not found」への対処方法
原因: ログのパースに失敗しました。このエラーは、通常、誤った複数行ログの設定が原因で発生します。
解決策:
-
行頭の正規表現を確認・調整するか、複数行モードを無効にしてください。
-
YAML 設定の場合:
multiline設定セクションをコメントアウトします。 -
SLS コンソールの場合: Logtail 設定を開き、複数行モードを無効にします。
-
-
K8s Namespace Regex およびその他のフォーマットフィールドが正しいことを確認してください。複数の名前空間を指定する必要がある場合は、正しい区切り文字で区切られていることを確認してください。
-
YAML 設定を変更した後、再度適用して変更を有効にしてください。
kubectl apply -f <your-config-file>.yaml
その他のメンテナンス操作
Logtail コンテナへのログイン
-
標準 Docker
-
ホストで次のコマンドを実行して Logtail コンテナを見つけます。
docker ps | grep logtail次のような出力が表示されます。
223****6e registry.cn-hangzhou.aliyuncs.com/log-service/logtail "/usr/local/ilogta..." 8 days ago Up 8 days logtail-iba -
次のコマンドを実行して、Logtail コンテナで bash シェルを起動します。
docker exec -it 223****6e bash223****6eを実際のコンテナ ID に置き換えます。
-
-
Kubernetes
-
次のコマンドを実行して、Logtail Pod を見つけます。
kubectl get po -n kube-system | grep logtail次のような出力が表示されます。
logtail-ds-****d 1/1 Running 0 8d logtail-ds-****8 1/1 Running 0 8d -
次のコマンドを実行して、Pod にログインします。
kubectl exec -it -n kube-system logtail-ds-****d -- bashlogtail-ds-****dを実際の Pod ID に置き換えます。
-
Logtail ランタイムログの表示
Logtail は、そのログを Logtail コンテナの /usr/local/ilogtail/ ディレクトリに保存します。ログファイルは ilogtail.LOG と logtail_plugin.LOG です。
-
Logtail コンテナにログインします。詳細については、「Logtail コンテナへのログイン」をご参照ください。
-
/usr/local/ilogtail/ ディレクトリに移動します。
cd /usr/local/ilogtail -
ilogtail.LOG ファイルと logtail_plugin.LOG ファイルを表示します。
cat ilogtail.LOG cat logtail_plugin.LOG
Logtail コンテナの標準出力 (stdout)
Logtail コンテナの標準出力は、トラブルシューティングに役立つ情報を提供しません。以下の内容は無視してかまいません。
start umount useless mount points, /shm$|/merged$|/mqueue$
umount: /logtail_host/var/lib/docker/overlay2/3fd0043af174cb0273c3c7869500fbe2bdb95d13b1e110172ef57fe840c82155/merged: must be superuser to unmount
umount: /logtail_host/var/lib/docker/overlay2/d5b10aa19399992755de1f85d25009528daa749c1bf8c16edff44beab6e69718/merged: must be superuser to unmount
umount: /logtail_host/var/lib/docker/overlay2/5c3125daddacedec29df72ad0c52fac800cd56c6e880dc4e8a640b1e16c22dbe/merged: must be superuser to unmount
......
xargs: umount: exited with status 255; aborting
umount done
start logtail
ilogtail is running
logtail status:
ilogtail is running
Kubernetes コンポーネントのステータスの確認
次のコマンドを実行して、SLS デプロイメントのステータスと情報を表示します。
kubectl get deploy -n kube-system | grep -E 'alibaba-log-controller|loongcollector-operator'
次の出力が返されます。
NAME READY UP-TO-DATE AVAILABLE AGE
alibaba-log-controller 1/1 1 1 11d
次のコマンドを実行して、DaemonSet リソースのステータス情報を表示します。
kubectl get ds -n kube-system | grep -E 'logtail-ds|loongcollector-ds'
次の出力が返されます。
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
logtail-ds 2 2 2 2 2 **ux 11d
Logtail のバージョン、IP アドレス、および起動時間
-
ホストで、次のコマンドを実行して Logtail のバージョン、IP アドレス、および起動時間を表示します。
情報は Logtail コンテナの
/usr/local/ilogtail/app_info.jsonファイルに保存されます。kubectl exec logtail-ds-****k -n kube-system cat /usr/local/ilogtail/app_info.json次のような出力が表示されます。
{ "UUID" : "", "hostname" : "logtail-****k", "instance_id" : "0EB****_172.20.4.2_1517810940", "ip" : "172.20.4.2", "logtail_version" : "0.16.2", "os" : "Linux; 3.10.0-693.2.2.el7.x86_64; #1 SMP Tue Sep 12 22:26:13 UTC 2017; x86_64", "update_time" : "2018-02-05 06:09:01" }
ACK クラスター内の Pod ログのトラブルシューティング情報の取得
ACK クラスター内の Pod のログ収集が異常な場合、以下の手順で、自己トラブルシューティングまたはテクニカルサポートへの提供に必要な基本情報を取得できます。
ステップ1: Logtail または LoongCollector の Pod 名を検索します。
kubectl get pods -n kube-system | grep -E 'logtail|loongcollector'
ステップ2: app_info.json ファイルから Logtail または LoongCollector インスタンスの IP アドレスを取得します。
kubectl exec <pod-name> -n kube-system cat /usr/local/ilogtail/app_info.json
返された JSON 出力の ip フィールドが Logtail インスタンスの IP アドレスです。
テクニカルサポートに問い合わせる際は、トラブルシューティングに役立てるため、以下の情報を提供してください。
SLS プロジェクト名
Logtail 収集設定名
対象の Pod 名
対象のコンテナ名
誤って削除された CRD Logstore の対処法
カスタムリソース定義 (CRD) によって自動的に作成された Logstore を削除すると、収集されたデータは復旧できなくなり、その Logstore の CRD 設定は無効になります。ログ収集の問題を防ぐために、以下のいずれかの解決策を選択してください。
-
CRD 設定で、削除した Logstore の代わりに別の Logstore を使用してください。
-
alibaba-log-controller Pod を再起動してください。
次のコマンドを実行して、Pod を見つけます。
kubectl get po -n kube-system | grep alibaba-log-controller