Container Compute Service (ACS) は Simple Log Service (SLS) と統合されています。ACS クラスターを作成する際に、SLS を有効にして、標準出力やコンテナーからのテキストファイルを含むコンテナーログを収集できます。このトピックでは、Pod の環境変数を使用して ACS クラスター内のアプリケーションログを収集する方法について説明します。
ステップ 1: Simple Log Service コンポーネントを有効にする
ACS クラスターを作成する際に、[Use Log Service] を選択して Simple Log Service コンポーネントを自動的に有効にできます。クラスター作成時にこのオプションを選択しなかった場合は、次の手順に従って既存のクラスターでコンポーネントを有効にできます。
ACS コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、対象のクラスターを見つけてその ID をクリックします。左側のナビゲーションウィンドウで、[操作] > [アドオン] を選択します。
[ログとモニタリング] タブで [alibaba-log-controller] を見つけ、[インストール] をクリックします。表示される [コンポーネントのインストール] ダイアログボックスで、[OK] をクリックします。
以前のバージョンの alibaba-log-controller コンポーネントがインストールされている場合は、アップグレードできます。アップグレード後、クラスターはコンポーネントのパラメーターをリセットします。alibaba-log-controller の構成と環境変数をカスタマイズした場合、パラメーターは上書きされます。必要に応じて再構成する必要があります。
ステップ 2: アプリケーション作成時に Simple Log Service を構成する
アプリケーションを作成する際に、Simple Log Service を構成してコンテナーログを収集できます。構成は、コンソールまたは YAML ファイルを使用して実行できます。
ACS コンソールのウィザードを使用してアプリケーションを作成し、Simple Log Service を構成する
ACS コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけてその ID をクリックします。クラスター詳細ページの左側のナビゲーションウィンドウで、 を選択します。
[デプロイメント] ページで、[名前空間] ドロップダウンリストから名前空間を選択します。次に、ページの右上隅にある [イメージから作成] をクリックします。
説明この例では、ステートレスアプリケーションを使用します。構成方法は、ステートフルワークロードなど、他のタイプのワークロードでも同じです。
[基本情報] ウィザードページで、[名前]、[レプリカ]、[タイプ] を指定します。次に、[次へ] をクリックして [コンテナー] ウィザードページに移動します。
説明次のセクションでは、Simple Log Service に関連するパラメーターのみを説明します。他のアプリケーションパラメーターの詳細については、「Deployment を使用してステートレスアプリケーションを作成する」をご参照ください。
[ログ] セクションで、ログ収集パラメーターを構成します。
[コレクション構成] を構成します。
プラス記号 ([+]) をクリックして構成エントリを追加します。各構成エントリは、[Logstore] と [コンテナー内のログパス (stdout に設定可能)] で構成されます。
Logstore: Logstore の名前を指定します。このパラメーターは、収集されたログが保存される Logstore を指定します。Logstore が存在しない場合、ACS はクラスターに関連付けられている Simple Log Service プロジェクトに Logstore を自動的に作成します。
説明Logstore のデフォルトのログ保持期間は 180 日です。
コンテナー内のログパス (stdout に設定可能): ログデータを収集するパス。/usr/local/tomcat/logs/catalina.*.log の値は、Tomcat アプリケーションのログファイルが収集されることを示します。
説明値を stdout に設定すると、stdout と stderr が収集されます。
各コレクション構成は、対応する Logstore に対して自動的に作成されます。デフォルトでは、ログは 1 行ずつ収集されます。

[カスタムタグ] を設定します。
[+] アイコンをクリックしてカスタムタグを追加します。各カスタムタグは、収集されたログに追加されるキーと値のペアです。カスタムタグを使用して、コンテナーのログデータにバージョン番号などのマークを付けることができます。

他のパラメーターを設定した後、[次へ] をクリックして詳細設定を行います。
後続のステップの詳細については、「Deployment を使用してステートレスアプリケーションを作成する」をご参照ください。
YAML ファイルを使用して作成
ACS コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、管理するクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
[デプロイメント] ページで、[名前空間] ドロップダウンリストから名前空間を選択します。次に、ページの右上隅にある [YAML から作成] をクリックします。
説明この例では、ステートレスアプリケーションを使用します。構成方法は、ステートフルワークロードなど、他のタイプのワークロードでも同じです。
YAML テンプレートを構成します。
YAML ファイルの構文は Kubernetes の構文と同じです。ただし、コンテナーのコレクション構成を指定するには、
envを使用して、コンテナーに [コレクション構成] と [カスタムタグ] を追加する必要があります。次のコードは、単純な Pod の例です。apiVersion: v1 kind: Pod metadata: name: my-demo spec: containers: - name: my-demo-app image: 'registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest' env: # 環境変数を構成します - name: aliyun_logs_log-stdout value: stdout - name: aliyun_logs_log-varlog value: /var/log/*.log - name: aliyun_logs_mytag1_tags value: tag1=v1 command: ["sh", "-c"] args: ["echo 'Starting my demo app'; sleep 3600"]必要に応じて、次の順序で設定を構成します。
説明高度なログ収集要件がある場合は、「ステップ 3: ログ収集の高度なパラメーター」をご参照ください。
環境変数を使用して [コレクション構成] と [カスタムタグ] を作成します。構成に関連するすべての環境変数は、プレフィックスとして
aliyun_logs_を使用します。次のフォーマットでログ収集構成を追加します。
apiVersion: v1 kind: Pod metadata: name: my-demo spec: containers: - name: my-demo-app image: 'registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest' env: - name: aliyun_logs_log-stdout value: stdout - name: aliyun_logs_log-varlog value: /var/log/*.log command: ["sh", "-c"] args: ["echo 'Starting my demo app'; sleep 3600"]この例では、2 つのコレクション構成が
aliyun_logs_{key}フォーマットで作成されます。{key}の値はlog-stdoutとlog-varlogです。aliyun_logs_log-stdout: この環境変数は、Logstoreという名前のlog-stdoutの構成を作成し、ログ収集パスをstdoutに設定します。対応する Simple Log Service のコレクション構成もlog-stdoutという名前になります。この構成は、コンテナーの標準出力を収集し、log-stdoutLogstoreに保存します。aliyun_logs_log-varlog: この環境変数は、Logstoreという名前のlog-varlogの構成を作成し、ログ収集パスを /var/log/*.log に設定します。対応する Simple Log Service のコレクション構成もlog-varlogという名前になります。この構成は、コンテナーから /var/log/*.log ファイルの内容を収集し、log-varlogLogstoreに保存します。
次のフォーマットで [カスタムタグ] を追加します。
apiVersion: v1 kind: Pod metadata: name: my-demo spec: containers: - name: my-demo-app image: 'registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest' env: - name: aliyun_logs_mytag1_tags value: tag1=v1 command: ["sh", "-c"] args: ["echo 'Starting my demo app'; sleep 3600"]タグを構成すると、対応するフィールドがコンテナーから収集されたログに自動的に追加されます。この例では、
mytag1はアンダースコア (_) を含まない任意の名前にすることができます。
コレクション構成で `stdout` 以外の収集パスを指定する場合は、このセクションで対応する
volumeMountsを作成する必要があります。この例では、/var/log/*.log からログを収集するためのコレクション構成が追加されています。したがって、/var/log の
volumeMountsも追加されます。
YAML テンプレートを変更した後、[作成] をクリックして構成を ACS クラスターに送信します。
ステップ 3: ログ収集の高度なパラメーター
コンテナーの環境変数を使用して、さまざまな収集パラメーターを構成できます。特別なログ収集要件を満たすために、高度なパラメーターを設定できます。
環境変数名 | 説明 | 例 | 注意 |
aliyun_logs_{key} |
|
|
|
aliyun_logs_{key}_tags | 任意。この変数は、ログデータにタグを追加するために使用されます。値は {tag-key}={tag-value} のフォーマットである必要があります。 | | N/A |
aliyun_logs_{key}_project | 任意。値は指定された Simple Log Service プロジェクトです。この環境変数が存在しない場合、インストール時に選択されたプロジェクトが使用されます。 | | プロジェクトは Simple Log Service コンポーネントと同じリージョンにある必要があります。 |
aliyun_logs_{key}_logstore | 任意。この変数は Simple Log Service の Logstore を指定します。デフォルトでは、Logstore の名前は {key} です。 | | N/A |
aliyun_logs_{key}_shard | 任意。値は、Logstore が作成されるときのシャードの数です。値の範囲は 1 から 10 です。この環境変数が存在しない場合、値は 2 です。 説明 Logstore が既に存在する場合、このパラメーターは効果がありません。 | | N/A |
aliyun_logs_{key}_ttl | 任意。値は指定されたログの保持期間です。値の範囲は 1 から 3650 です。
説明 指定した Logstore が既に存在する場合、この変数は効果がありません。 | | N/A |
aliyun_logs_{key}_machinegroup | 任意。この変数は、アプリケーションがデプロイされているノードグループを指定します。デフォルトのノードグループは、alibaba-log-controller コンポーネントがデプロイされているグループです。変数の使用方法の詳細については、「特殊なシナリオ 2: 異なるアプリケーションから異なるプロジェクトにデータを収集する」をご参照ください。 | | N/A |
aliyun_logs_{key}_logstoremode | 任意。この変数は Logstore のタイプを指定します。デフォルト値: standard。有効な値: 説明 指定した Logstore が既に存在する場合、この変数は効果がありません。
|
| N/A |
特殊なシナリオ 1: 複数のアプリケーションから同じ Logstore にデータを収集する
複数のアプリケーションからデータを収集し、同じ Logstore にデータを保存するには、 aliyun_logs_{key}_logstore パラメーターを設定します。たとえば、次の構成では、2 つのアプリケーションから `stdout` を収集し、
stdout-logstoreに保存します。この例では、アプリケーション 1 の
{key}はapp1-stdoutで、アプリケーション 2 の{key}はapp2-stdoutです。アプリケーション 1 に次の環境変数を構成します。
apiVersion: v1 kind: Pod metadata: name: my-demo-1 spec: containers: - name: my-demo-app image: 'registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest' env: # 環境変数を構成します - name: aliyun_logs_app1-stdout value: stdout - name: aliyun_logs_app1-stdout_logstore value: stdout-logstore command: ["sh", "-c"] args: ["echo 'Starting my demo app'; sleep 3600"]アプリケーション 2 に次の環境変数を構成します。
apiVersion: v1 kind: Pod metadata: name: my-demo-2 spec: containers: - name: my-demo-app image: 'registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest' env: # 環境変数を構成します - name: aliyun_logs_app2-stdout value: stdout - name: aliyun_logs_app2-stdout_logstore value: stdout-logstore command: ["sh", "-c"] args: ["echo 'Starting my demo app'; sleep 3600"]特殊なシナリオ 2: 異なるアプリケーションから異なるプロジェクトにデータを収集する
異なるアプリケーションからデータを収集し、異なるプロジェクトにデータを保存するには、次の手順を実行します。
各プロジェクトで、マシングループを作成します。[カスタム ID] を選択し、ID を
k8s-group-{cluster-id}に設定します。ここで、{cluster-id}はクラスター ID です。カスタムのマシングループ名を設定することもできます。各アプリケーションの環境変数で、プロジェクト、Logstore、およびマシングループの情報を構成します。マシングループ名は、前のステップで作成したマシングループの名前である必要があります。
次の例では、アプリケーション 1 の
{key}はapp1-stdoutで、アプリケーション 2 の{key}はapp2-stdoutです。2 つのアプリケーションが同じ Kubernetes クラスターにある場合は、同じマシングループを使用できます。アプリケーション 1 に次の環境変数を構成します。
apiVersion: v1 kind: Pod metadata: name: my-demo-1 spec: containers: - name: my-demo-app image: 'registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest' env: # 環境変数を構成します - name: aliyun_logs_app1-stdout value: stdout - name: aliyun_logs_app1-stdout_project value: app1-project - name: aliyun_logs_app1-stdout_logstore value: app1-logstore - name: aliyun_logs_app1-stdout_machinegroup value: app1-machine-group command: ["sh", "-c"] args: ["echo 'Starting my demo app'; sleep 3600"]アプリケーション 2 に次の環境変数を構成します。
apiVersion: v1 kind: Pod metadata: name: my-demo-2 spec: containers: - name: my-demo-app image: 'registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest' env: # アプリケーション 2 の環境変数を構成します - name: aliyun_logs_app2-stdout value: stdout - name: aliyun_logs_app2-stdout_project value: app2-project - name: aliyun_logs_app2-stdout_logstore value: app2-logstore - name: aliyun_logs_app2-stdout_machinegroup value: app1-machine-group command: ["sh", "-c"] args: ["echo 'Starting my demo app'; sleep 3600"]
ステップ 4: Simple Log Service コンソールを使用してログを表示する
この例では、コンソールウィザードを使用して作成されたアプリケーションのログを表示する方法について説明します。構成が完了すると、アプリケーションログが収集され、Simple Log Service に保存されます。その後、Simple Log Service コンソールでコンテナーログを表示できます。
Simple Log Service コンソールにログインします。
[プロジェクト] セクションで、ACS クラスターに対応するプロジェクト (デフォルト: k8s-log-{ACS クラスター ID}) を選択し、クリックして [Logstore] タブに移動します。
Logstore リストで、ログ収集を構成するときに指定した Logstore を見つけます。ポインターを Logstore 名の上に移動し、
アイコンをクリックします。次に、[検索と分析] をクリックします。この例では、ログクエリページでアプリケーションのコンテナー内の標準出力ログとテキストログを表示でき、ログフィールドに追加されたカスタムタグを見つけることができます。
詳細情報
Simple Log Service を使用して Kubernetes コンテナーログを収集した後、Simple Log Service コンソールで Container Service for Kubernetes (ACS) のすべてのログ情報を表示できます。
ログ収集エラーのトラブルシューティングの詳細については、「Logtail を使用してログを収集するときにエラーが発生した場合はどうすればよいですか?」をご参照ください。