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

Simple Log Service:Docker コンテナーから stdout および stderr を収集する

最終更新日:Feb 25, 2025

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

概要

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

前提条件

  • プロジェクトと Logstore が作成されていること。詳細については、「プロジェクトを管理する」および「ログストアを管理する」をご参照ください。

  • ECS インスタンスが作成され、インスタンスに Docker がインストールされており、インスタンスが [実行中] 状態であること。詳細については、「Docker をインストールする」をご参照ください。

  • ログを収集するコンテナーが継続的にログを生成していること。

    重要

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

1. Logtail コンテナーをデプロイする

1.1 Logtail イメージをプルする

  1. ECS コンソール にログインし、ECS インスタンスを見つけ、[接続] をクリックします。「アクション」列にあります。ECS インスタンスが接続された後、docker -v コマンドを実行して Docker のバージョンを表示します。次のコードと同様の情報が返された場合、Docker は ECS インスタンスにインストールされています。

    image

  2. Logtail イメージをプルします。サポートされているリージョンについては、「Linux サーバーに Logtail をインストールする」をご参照ください。cn-hangzhou を実際の値に置き換えます。ECS インスタンスが Virtual Private Cloud (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

--privileged パラメーターを設定する必要があります。そうしないと、他のコンテナーを削除するときに container text file busy エラーが発生する可能性があります。詳細については、Bug 1468249Bug 1441737、および issue 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 と、プロジェクトで使用されるネットワークタイプ。サポートされているリージョンについては、「Linux サーバーに 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 ディレクトリにマウントされている。

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

2. Logtail 構成を作成する

  1. Simple Log Service コンソールにログインします。表示されるページの右側にある [クイックデータインポート] カードをクリックします。表示されるダイアログボックスで、[セルフマネージドオープンソース/商用ソフトウェア] タブをクリックします。次に、[docker Stdout And 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 コンソールでデータを表示する

重要

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

image

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

フィールド

説明

__source__

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

__tag__:__hostname__

ホストの名前。

__tag__:__receive_time__

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

_time_

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

_source_

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

_image_name_

イメージの名前。

_container_name_

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

_container_ip_

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

関連情報