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

Simple Log Service:Dockerコンテナからログを収集する

最終更新日:Sep 23, 2024

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

概要

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

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 File - Container] をクリックします。

    image

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

    image

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

    image

  4. データのインポートウィザードのLogtail設定ステップで、[設定名] および [ファイルパス] パラメーターを設定します。 File Pathパラメーターは、アプリケーションコンテナーのログディレクトリ (/var/www/test.logなど) に設定できます。 [次へ] をクリックします。 パラメーターの詳細については、「DaemonSetモードでのKubernetesコンテナーからのテキストログの収集」をご参照ください。

    image

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

3. データのクエリと分析

3.1 アプリケーションコンテナのログを表示する

docker exec -it ${container_ID} /bin/bashコマンドを実行して、アプリケーションコンテナの継続的に生成されたログを表示します。 この例では、aliwebアプリケーションコンテナーが使用されます。

image

3.2 収集したログをSimple Log Serviceコンソールで表示する

image

デフォルトでは、収集された各ログに特定のフィールドが含まれます。 次の表では、フィールドについて説明します。

項目

説明

__source__

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

_container_ip_

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

__タグ __:__ ホスト名__

ホスト名を示します。

__tag __:__ path__

ログ収集のパス。

__タグ __:__ receive_time__

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

__タグ __:__ user_defined_id__

マシングループのカスタム識別子。

関連する API 操作

Logtailのステータスの表示

docker exec ${logtail_container_id} /etc/init.d/ilogtaild statusコマンドを実行して、Logtailのステータスを表示できます。

Logtailのバージョン番号、IPアドレス、および起動時間の表示

docker exec ${logtail_container_id} cat /usr/local/ilogtail/app_info.jsonコマンドを実行して、Logtailに関する情報を表示できます。

Logtailの操作ログの表示

Logtailの操作ログは、/usr/local/ilogtail/ ディレクトリのilogtail.LOGファイルに保存されます。 ログファイルがローテーションされると、生成されたファイルは圧縮され、ilogtail.LOG.x.gzとして保存されます。 例:

[sudo@iZb****exh2Z ilogtail]# docker exec a287de895e40 tail -n 5 /usr/local/ilogtail/ilogtail.LOG
[2018-02-06 08:13:35.721864]    [INFO]    [8]    [build/release64/sls/ilogtail/LogtailPlugin.cpp:104]    logtail plugin Resume:start
[2018-02-06 08:13:35.722135]    [INFO]    [8]    [build/release64/sls/ilogtail/LogtailPlugin.cpp:106]    logtail plugin Resume:success
[2018-02-06 08:13:35.722149]    [INFO]    [8]    [build/release64/sls/ilogtail/EventDispatcher.cpp:369]    start add existed check point events, size:0
[2018-02-06 08:13:35.722155]    [INFO]    [8]    [build/release64/sls/ilogtail/EventDispatcher.cpp:511]    add existed check point events, size:0    cache size:0    event size:0    success count:0
[2018-02-06 08:13:39.725417]    [INFO]    [8]    [build/release64/sls/ilogtail/ConfigManager.cpp:3776]    check container path update flag:0    size:1

コンテナのstdoutとstderrはサンプルシナリオには適用されません。 次のstdoutとstderrを無視します。


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

Logtailの再起動

Logtailを再起動するには、次のサンプルコードを使用します。

[sudo@iZb****xh2Z ilogtail]# docker exec a287de895e40 /etc/init.d/ilogtaild stop
kill process Name: ilogtail pid: 7
kill process Name: ilogtail pid: 8
stop success
[sudo@iZb****xh2Z ilogtail]# docker exec a287de895e40 /etc/init.d/ilogtaild start
ilogtail is running

関連ドキュメント