このトピックでは、Log ServiceコンソールでLogtail設定を作成し、Logtail設定を使用してDaemonSetモードでコンテナテキストログを収集する方法について説明します。
始める前に
- Logtailコンポーネントがインストールされています。 詳細については、「KubernetesクラスターへのLogtailコンポーネントのインストール」をご参照ください。
- Logtailコンポーネントのインストールに使用するプロジェクトにLogstoreが作成されます。 詳細については、「Logstore の作成」をご参照ください。
- ログを収集するコンテナーは、継続的にログを生成します。 重要 Logtailは増分ログのみを収集します。 適用されたLogtail設定がサーバーに配信された後にサーバー上のログファイルが更新されない場合、Logtailはファイルからログを収集しません。 詳細については、「ログファイルの読み取り」をご参照ください。
機能
- テキストログを収集するときに、コンテナー内のログファイルパスを指定できます。 ログファイルのパスをホスト上のパスに手動でマップする必要はありません。
- コンテナーラベルのホワイトリストを使用して、ログを収集するコンテナーを指定します。
- コンテナーラベルブラックリストを使用して、ログが収集されないコンテナーを指定します。
- 環境変数ホワイトリストを使用して、ログを収集するコンテナーを指定します。
- 環境変数ブラックリストを使用して、ログが収集されないコンテナを指定します。
- 複数行のログを収集します。 たとえば、LogtailはJavaスタックログを収集できます。
- 収集したコンテナログと一緒にアップロードする必要があるコンテナメタデータを自動的に関連付けます。 メタデータには、コンテナ名、イメージ名、ポッド名、名前空間、環境変数が含まれます。
- コンテナーがKubernetesクラスターで実行される場合、Logtailは次の機能もサポートします。
- Kubernetes名前空間、ポッド名、およびコンテナー名を使用して、ログを収集するコンテナーを指定します。
- Kubernetesラベルホワイトリストを使用して、ログを収集するコンテナーを指定します。
- Kubernetesラベルブラックリストを使用して、ログが収集されないコンテナーを指定します。
- 収集したコンテナログと一緒にアップロードする必要があるKubernetesラベルを自動的に関連付けます。
制限事項
- Logtailが停止したコンテナで
die
イベントを検出した場合、Logtailはコンテナからテキストログを収集しなくなります。 収集待ち時間が存在する場合、コンテナが停止する前に収集された一部のテキストログが失われる可能性があります。 - For Docker容器、のみオーバーレイとoverlay2収納ドライバサポートされている。 If他収納ドライバ使用されている、必要がありマウントボリュームにディレクトリのログ。 そして、一時ディレクトリが生成される。
PersistentVolumeClaim (PVC) を使用してApsara File Storage NAS (NAS) ファイルシステムがログのディレクトリにマウントされている場合、DaemonSetモードではログを収集できません。 この場合、Sidecarモードでログを収集することを推奨します。 詳細については、「SidecarモードでCRDを使用してコンテナテキストログを収集する」および「Log Serviceコンソールを使用してSidecarモードでコンテナテキストログを収集する」をご参照ください。
- Logtailはコンテナのシンボリックリンクにアクセスできません。 収集ディレクトリとして実際のパスを指定する必要があります。
- ボリュームがコンテナのデータディレクトリにマウントされている場合、Logtailはデータディレクトリの親ディレクトリからデータを収集できません。 データディレクトリの完全なパスをコレクションディレクトリとして指定する必要があります。
たとえば、ボリュームが /var/log/serviceディレクトリにマウントされ、収集ディレクトリを /var/logに設定した場合、Logtailは /var/logディレクトリからログを収集できません。 収集ディレクトリとして /var/log/serviceを指定する必要があります。
- デフォルトでは、Kubernetesはホストのルートディレクトリをlogtailコンテナの
/Logtail_host
ディレクトリにマウントします。 ホストからテキストログを収集する場合は、ログファイルパスのプレフィックスとして/logtail_host
を指定する必要があります。たとえば、ホストの
/home/logs/app_log/
ディレクトリからログを収集する場合は、ログファイルパスとして/logtail_host/home/logs/app_log/
を指定する必要があります。 - Logtailは、Dockerエンジンまたはcontainerdエンジンを使用するコンテナーからデータを収集します。
- Docker: Logtailは、/run /Docker. sockディレクトリのdockerエンジンにアクセスします。 ディレクトリが存在し、Logtailにディレクトリにアクセスする権限があることを確認します。
- containerd: Logtailアクセスcontainerdエンジンに /実行 /containerd/containerd。靴下ディレクトリ。 Makeことを確認ディレクトリ存在とLogtailは権限ディレクトリにアクセスする。
Logtail構成の作成
- Log Service コンソールにログインします。
- [データのインポート] セクションで、[Kubernetes - Object] をクリックします。
- プロジェクトとLogstoreを選択します。 [次へ] をクリックします。 この例では、Logtailコンポーネントのインストールに使用するプロジェクトと、作成するLogstoreを選択します。
- [既存のマシングループを使用] をクリックします。 Logtailコンポーネントをインストールすると、Log Serviceは自動的に
k8s-group-${your_k8s_cluster_id}
という名前のマシングループを作成します。 このマシングループを選択できます。 - [ソースサーバーグループ] から
k8s-group-${your_k8s_cluster_id}
マシングループを選択し、マシングループを [応用サーバーグループ] に移動します。 [次へ] をクリックします。重要 マシングループのハートビートステータスがFAILの場合、[自動再試行] をクリックします。 問題が解決しない場合は、「Logtailマシングループにハートビートがない場合の対処方法」をご参照ください。 - Logtail設定のパラメーターを設定し、[次へ] をクリックします。
- データをプレビューし、インデックスを設定し、[次へ] をクリックします。 デフォルトでは、Log Serviceでフルテキストインデックスが有効になっています。 手動モードまたは自動モードで収集したログに基づいてフィールドインデックスを設定することもできます。 自動モードでフィールドインデックスを設定するには、[自動インデックス生成] をクリックします。 これにより、Log Serviceは自動的にフィールドインデックスを作成します。 詳細については、「インデックスの作成」をご参照ください。重要 ログをクエリおよび分析する場合は、フルテキストインデックス作成またはフィールドインデックス作成を有効にする必要があります。 フルテキストインデックスとフィールドインデックスの両方を有効にすると、フィールドインデックスのみが使用されます。
- [ログクエリ] をクリックします。 Logstoreのクエリと分析ページにリダイレクトされます。 インデックスが有効になるまで約1分待つ必要があります。 そして、収集したログを Raw Logsタブで確認することができます。 詳細については、「データのクエリと分析」をご参照ください。
設定例
環境変数ホワイトリストと環境変数ブラックリストに基づいてコンテナをフィルタリングする
環境変数設定にNGINX_SERVICE_PORT=80
が含まれ、POD_NAMESPACE=kube-system
が含まれないコンテナからテキストログを収集します。 ログファイルパスは /var/log/nginx/access.log
です。 ログはシンプルモードで収集されます。
- 環境変数を取得します。
コンテナの環境変数を表示するには、コンテナが存在するホストにログインします。 詳細については、「環境変数の取得」をご参照ください。
- Logtail設定を作成します。 次の図は、Logtail設定の例を示しています。 シンプルモードでログを収集するために使用されるLogtail設定を作成する方法の詳細については、「シンプルモードでログを収集する」をご参照ください。
コンテナラベルのホワイトリストとコンテナラベルのブラックリストに基づいてコンテナをフィルタリングする
コンテナラベルがio.kubernetes.container.name=nginx
であるコンテナからテキストログを収集します。 ログファイルパスは /var/log/nginx/access.log
です。 ログはシンプルモードで収集されます。
- コンテナーラベルを取得します。
コンテナのコンテナラベルを表示するには、コンテナが存在するホストにログインします。 詳細については、「コンテナラベルの取得」をご参照ください。
- Logtail設定を作成します。 次の図は、Logtail設定の例を示しています。 シンプルモードでログを収集するために使用されるLogtail設定を作成する方法の詳細については、「シンプルモードでログを収集する」をご参照ください。
Kubernetes名前空間、ポッド名、およびコンテナー名を使用したコンテナーのフィルタリング
デフォルトの名前空間で名前がnginx-log-demoで始まるポッドのnginx-log-demo-0コンテナからテキストログを収集します。
- さまざまなレベルのKubernetes情報を取得します。
- ポッドに関する情報を取得します。
- 名前空間に関する情報を取得します。
- Logtail設定を作成します。
次の図は、Logtail設定の例を示しています。 シンプルモードでログを収集するために使用されるLogtail設定を作成する方法の詳細については、「シンプルモードでログを収集する」をご参照ください。
Kubernetesラベルを使用したコンテナーのフィルタリング
Kubernetesラベルにジョブ名キーと特定の値が含まれているコンテナーからテキストログを収集します。 値はnginx-log-demoで始まります。
- Kubernetesラベルを取得します。
- Logtail設定を作成します。 次の図は、Logtail設定の例を示しています。 シンプルモードでログを収集するために使用されるLogtail設定を作成する方法の詳細については、「シンプルモードでログを収集する」をご参照ください。
複数行のログを収集する
Kubernetesラベルにジョブ名キーと特定の値が含まれているコンテナーから複数行のテキストログを収集します。 値はnginx-log-demoで始まります。 ModeパラメーターをSimple Mode - Multi-lineに設定します。
- Kubernetesラベルを取得します。
- Logtail設定を作成します。 次の図は、Logtail設定の例を示しています。 シンプルモードで複数行ログを収集する方法の詳細については、「シンプルモードでログを収集する」をご参照ください。
デフォルトフィールド
ログフィールド | 説明 |
---|---|
_image_name_ | The name of the image. |
_container_name_ | コンテナーの名前。The name of the container. |
_pod_name_ | ポッドの名前。 |
_namespace_ | ポッドの名前空間。 |
_pod_uid_ | pod の一意の識別子。 |
_container_ip_ | ポッドのIPアドレス。 |
トラブルシューティング
Logtailを使用して標準コンテナやKubernetesコンテナなどのコンテナからログを収集するときに例外が発生した場合、次のトピックに基づいて問題のトラブルシューティングを行うことができます。