すべてのプロダクト
Search
ドキュメントセンター

Simple Log Service:Dockerコンテナからstdoutとstderrを収集する

最終更新日:Sep 23, 2024

Dockerがサーバーにデプロイされた後、クエリと分析のログを収集できます。 Dockerログは、標準出力 (stdoutとstderr) とファイルログの2種類に分類されます。 ファイルログは、サーバー上の指定されたディレクトリに書き込まれたコンテナー内で生成されたログを参照します。標準出力は、コンテナーのリアルタイム出力ストリームを示します。 このトピックでは、Logtailを使用してコンテナーの標準出力をLogstoreに収集する方法について説明します。

概要

このトピックでは、Linuxオペレーティングシステムを実行するElastic Compute Service (ECS) インスタンスを使用します。 ECSインスタンスにDockerをインストールした後、Logtailを使用して、ECSインスタンスにデプロイされたアプリケーションコンテナから指定されたLogstoreにstdoutとstderrを収集できます。

image

前提条件

  • プロジェクトと Logstore が作成済みである必要があります。 詳細については、「プロジェクトの管理」および「Logstoreの管理」をご参照ください。

  • ECSインスタンスが作成され、Dockerがインスタンスにインストールされ、インスタンスが実行中の状態です。 詳細については、「LinuxインスタンスへのDockerのインストールと使用」をご参照ください。

  • ログを収集するコンテナーは、継続的にログを生成します。

    重要

    Logtailは増分ログのみを収集します。 適用されたLogtail設定がサーバーに配信された後にサーバー上のログファイルが更新されない場合、Logtailはファイルからログを収集しません。 詳細については、「ログファイルの読み取り」をご参照ください。

1. Logtail コンテナーのデプロイ

1.1 Logtailイメージをプルする

  1. ECSコンソールにログインし、ECSインスタンスを見つけ、[操作] 列の [接続] をクリックします。 ECSインスタンスが接続されたら、docker -vコマンドを実行してDockerバージョンを表示します。 次のコードに似た情報が返された場合、DockerがECSインスタンスにインストールされます。

    image

  2. Logtailイメージをプルします。 サポートされているリージョンの詳細については、「付録: Logtailインストールのリージョン名」をご参照ください。 cn-hangzhouを実際の値に置き換えます。 ECSインスタンスが仮想プライベートクラウド (VPC) にある場合、registryregistry-vpcに置き換える必要があります。

    docker pull registry.cn-hangzhou.aliyuncs.com/log-service/logtail

1.2 Logtailコンテナのデプロイと開始

次のコマンドを実行し、${your_region_name}${your_aliyun_user_id} 、および ${your_machine_group_user_defined_id} パラメーターを実際の値に置き換えます。

docker run -d \
    -v /:/logtail_host:ro \
    -v /var/run/docker.sock:/var/run/docker.sock \
    --env ALIYUN_LOGTAIL_CONFIG=/etc/ilogtail/conf/${your_region_name}/ilogtail_config.json \
    --env ALIYUN_LOGTAIL_USER_ID=${your_aliyun_user_id} \
    --env ALIYUN_LOGTAIL_USER_DEFINED_ID=${your_machine_group_user_defined_id} \
    registry.${your_region_name}.aliyuncs.com/log-service/logtail

コマンドが成功すると、コンテナIDが生成されます。 たとえば、カスタム識別子がdocker-log-demoであるマシングループ内のサーバーにLogtailコンテナをデプロイする場合は、次のサンプルコードを使用してコンテナを起動します。

image

次の表に、コード内のパラメーターを示します。

パラメーター

説明

-- 特権

-- privilegedパラメーターを設定する必要があります。 そうしないと、他のコンテナを削除するときにコンテナテキストファイルbusyエラーが発生することがあります。 詳細については、「バグ1468249」、「バグ1441737」、および「課題34538」をご参照ください。 CentOS 7.4以降 (CentOS 8.0を除く) では、-- privilegedパラメーターを削除し、次のコマンドを実行してfs.may_detach_mountsパラメーターを1に設定できます。

echo fs.may_detach_mounts=1 | sudo tee /etc/sysctl.d/may_detach_mounts.conf
sudo sysctl -p /etc/sysctl.d/may_detach_mounts.conf
sysctl fs.may_detach_mounts

${your_region_name}

プロジェクトが存在するリージョンのIDと、プロジェクトで使用されるネットワークタイプ。 サポートされているリージョンの詳細については、「付録: Logtailインストールのリージョン名」をご参照ください。 ネットワークタイプの詳細については、「ネットワークタイプの選択」をご参照ください。

  • プロジェクトがインターネットを使用している場合は、region-Internet形式で値を指定します。 たとえば、プロジェクトが中国 (杭州) リージョンにある場合、パラメーターをcn-Hangzhou-internetに設定します。

  • プロジェクトがAlibaba Cloud内部ネットワークを使用している場合は、region形式で値を指定します。 たとえば、プロジェクトが中国 (杭州) リージョンにある場合、パラメーターをcn-Hangzhouに設定します。

${your_aliyun_user_id}

Simple Log Serviceが有効化されているAlibaba CloudアカウントのID。 詳細については、「Simple Log Serviceが有効化されているAlibaba CloudアカウントのIDの取得」をご参照ください。

${your_machine_group_user_defined_id}

マシングループのカスタム識別子。 プロジェクトが存在するリージョンで識別子が一意であることを確認してください。 例: docker-log-demo

重要

次の条件が満たされている場合にのみ、Logtailコンテナのスタートアップパラメーターのカスタム設定を構成できます。

  • ALIYUN_LOGTAIL_USER_DEFINED_IDALIYUN_LOGTAIL_USER_ID、およびALIYUN_LOGTAIL_CONFIGが設定されています。

  • Logtailコンテナが実行されるホストの /var/runディレクトリは、Logtailコンテナの /var/runディレクトリにマウントされます。

  • ホストのルートディレクトリは、logtailコンテナの /Logtail_hostディレクトリにマウントされます。

  • /usr/local/ilogtail/ilogtail.LOGログファイルにパラメーターが無効: uuid=noneエラーが表示された場合、ホスト上にproduct_uuidという名前のファイルを作成する必要があります。 次に、作成したファイル (169E98C9-ABC0-4A92-B1D2-AA6239C0D261など) に有効なUUIDを入力し、Logtailコンテナの /sys/class/dmi/id/product_uuidディレクトリにファイルをマウントします。

2. Logtail構成の作成

  1. Simple Log Serviceコンソールにログインします。 表示されるページの右側にあるクイックデータインポートカードをクリックします。 表示されるダイアログボックスで、[自己管理オープンソース /商用ソフトウェア] タブをクリックします。 次に、[Docker StdoutおよびStderr - Container] をクリックします。

    image

  2. データのインポートウィザードのLogstoreの選択ステップで、プロジェクトとLogstoreを選択します。 [次へ] をクリックします。

    image

  3. データのインポートウィザードのマシングループの作成ステップで、マシングループの作成をクリックします。 表示されるパネルで、マシングループ識別子パラメーターを [カスタム識別子] に設定し、[カスタム識別子] フィールドにlog-docker-demoと入力します。 [OK] をクリックします。 [カスタム識別子] フィールドに入力するカスタム識別子は、ステップ1.2の ${your_machine_group_user_defined_id} パラメーターに指定したカスタム識別子と同じである必要があります。

    image

  4. [データのインポート] ウィザードの [Logtail設定] ステップで、[グローバル設定] 、[入力設定] 、[プロセッサ設定] セクションで設定を行い、[次へ] をクリックします。 パラメーターの詳細については、「サーバーからのテキストログの収集」をご参照ください。

    image

  5. データのインポートウィザードの [クエリと分析の構成] ステップで、インデックスを作成します。 詳細については、「インデックスの作成」をご参照ください。 次に、システムは作成されたLogtail設定に基づいてデータを収集します。

3. 収集されたデータの表示

3.1 アプリケーションコンテナのstdoutとstderrを表示する

docker logs ${container_ID} コマンドを実行して、アプリケーションコンテナのstdoutとstderrを表示します。 この例では、aliwebアプリケーションコンテナーが使用されます。

image

アプリケーションコンテナのstdoutとstderrをログファイルで表示することもできます。 デフォルトでは、Dockerはアプリケーションコンテナのstdoutとstderrを、アプリケーションコンテナが実行されているホストの /var/lib/docker/containersディレクトリに保存します。 各アプリケーションコンテナは、コンテナIDにちなんで名付けられたフォルダに対応し、コンテナログはこのフォルダに格納されます。 フォルダ内のファイル名は ${container_id}-json.logです。

3.2 Simple Log Serviceコンソールでのデータの表示

image

デフォルトでは、収集された各stdoutまたはstderrには次のフィールドが含まれます。

項目

説明

__source__

LogtailコンテナのIPアドレス。

__タグ __:__ ホスト名__

ホスト名を示します。

__タグ __:__ receive_time__

Simple Log Serviceがログを受信した時刻。

_time_

ログがSimple log Serviceにアップロードされた時刻。 例: 2024-02-02T02:18:41.979147844Z

_source_

ソースのタイプ。 有効な値: stdoutおよびstderr。

_image_name_

The name of the image.

_container_name_

アプリケーションコンテナの名前。

_container_ip_

アプリケーションコンテナのIPアドレス。

関連ドキュメント