サーバーに 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 イメージをプルする
ECS コンソール にログインし、ECS インスタンスを見つけ、[接続] をクリックします。「アクション」列にあります。ECS インスタンスが接続された後、
docker -v
コマンドを実行して Docker のバージョンを表示します。次のコードと同様の情報が返された場合、Docker は ECS インスタンスにインストールされています。Logtail イメージをプルします。サポートされているリージョンについては、「Linux サーバーに Logtail をインストールする」をご参照ください。
cn-hangzhou
を実際の値に置き換えます。ECS インスタンスが Virtual Private Cloud (VPC) に存在する場合は、registry
をregistry-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 コンテナーをデプロイする場合、次のサンプルコードを使用してコンテナーを起動します。
次の表は、コードのパラメーターについて説明しています。
パラメーター | 説明 |
|
|
| プロジェクトが存在するリージョンの ID と、プロジェクトで使用されるネットワークタイプ。サポートされているリージョンについては、「Linux サーバーに Logtail をインストールする」をご参照ください。ネットワークタイプの詳細については、「ネットワークタイプを選択する」をご参照ください。
|
| Simple Log Service がアクティブ化されている Alibaba Cloud アカウントの ID。詳細については、「Simple Log Service が有効になっている Alibaba Cloud アカウント ID を取得する」をご参照ください。 |
| マシングループのカスタム識別子。識別子は、プロジェクトが存在するリージョン内で一意であることを確認してください。例: |
Logtail コンテナーの起動パラメーターのカスタム設定は、次の条件が満たされている場合にのみ構成できます。
次の環境変数が構成されている:
ALIYUN_LOGTAIL_USER_DEFINED_ID
、ALIYUN_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 構成を作成する
Simple Log Service コンソールにログインします。表示されるページの右側にある [クイックデータインポート] カードをクリックします。表示されるダイアログボックスで、[セルフマネージドオープンソース/商用ソフトウェア] タブをクリックします。次に、[docker Stdout And Stderr - Container] をクリックします。
データのインポートウィザードの Logstore の選択ステップで、プロジェクトと Logstore を選択します。次に、[次へ] をクリックします。
データのインポートウィザードのマシングループの作成ステップで、[マシングループの作成] をクリックします。表示されるパネルで、「マシングループ識別子」パラメーターを [カスタム識別子] に設定し、「カスタム識別子」フィールドに
log-docker-demo
と入力します。次に、[OK] をクリックします。「カスタム識別子」フィールドに入力するカスタム識別子は、ステップ 1.2 の${your_machine_group_user_defined_id}
パラメーターに指定したカスタム識別子と同じである必要があります。データのインポートウィザードの Logtail 構成ステップで、グローバル構成、入力構成、およびプロセッサ構成セクションの設定を構成し、[次へ] をクリックします。パラメーターの詳細については、「サーバーからテキストログを収集する」をご参照ください。
データのインポートウィザードのクエリと分析の構成ステップで、インデックスを作成します。詳細については、「インデックスを作成する」をご参照ください。その後、システムは作成された Logtail 構成に基づいてデータを収集します。
3. 収集されたデータを表示する
3.1 アプリケーションコンテナーの stdout および stderr を表示する
docker logs ${container_ID}
コマンドを実行して、アプリケーションコンテナーの stdout および stderr を表示します。この例では、aliweb
アプリケーションコンテナーを使用します。
ログファイルでアプリケーションコンテナーの stdout および stderr を表示することもできます。デフォルトでは、Docker はアプリケーションコンテナーの stdout および stderr を、アプリケーションコンテナーが実行されているホストの /var/lib/docker/containers
ディレクトリに保存します。各アプリケーションコンテナーは、コンテナー ID の名前が付けられたフォルダーに対応し、コンテナーログはこのフォルダーに保存されます。フォルダー内のファイルの名前は ${container_id}-json.log
です。
3.2 Simple Log Service コンソールでデータを表示する
Logtail は増分ログのみを収集します。Logtail 構成が配信されて適用された後、サーバー上のログファイルが更新されない場合、Logtail はそのファイルから既存のログを収集しません。詳細については、「ログの読み取り」をご参照ください。
デフォルトでは、収集された各 stdout または stderr には、次のフィールドが含まれています。
フィールド | 説明 |
__source__ | Logtail コンテナーの IP アドレス。 |
__tag__:__hostname__ | ホストの名前。 |
__tag__:__receive_time__ | Simple Log Service がログを受信した時間。 |
_time_ | ログが Simple Log Service にアップロードされた時間。例: |
_source_ | ソースのタイプ。有効な値:stdout および stderr。 |
_image_name_ | イメージの名前。 |
_container_name_ | アプリケーションコンテナーの名前。 |
_container_ip_ | アプリケーションコンテナーの IP アドレス。 |
関連情報
Logtail のステータスの詳細については、「Logtail のステータスを表示する」をご参照ください。
Docker の使用方法の詳細については、「Docker をインストールする」をご参照ください。
Docker コンテナーからテキストログを収集する方法の詳細については、「Docker コンテナーからテキストログを収集する」をご参照ください。
アプリケーションコンテナーが実行されているホストからテキストログを収集する方法の詳細については、「サーバーからテキストログを収集する」をご参照ください。デフォルトでは、ホストのルートディレクトリは Logtail コンテナーの
/logtail_host
ディレクトリにマウントされます。ログが Logstore に収集された後、ログのインデックスを作成できます。詳細については、「インデックスを作成する」をご参照ください。その後、収集されたログをクエリおよび分析できます。詳細については、「ログクエリと分析のガイド」をご参照ください。
Logtail を使用して Docker コンテナーログを収集するときに発生するエラーのトラブルシューティング方法の詳細については、「コンテナーからログを収集するときにエラーが発生した場合はどうすればよいですか?」をご参照ください。