Container Compute Service (ACS) は Alibaba Cloud Simple Log Service (SLS) と統合されています。ACS クラスターの作成時にログサービスを有効にすることで、コンテナの標準出力 (stdout) やコンテナ内のテキストファイルなど、クラスターからのコンテナログを迅速に収集できます。このトピックでは、Pod の環境変数を使用して ACS クラスター内のアプリケーションログを収集する方法について説明します。
ステップ 1:Log Service アドオンの有効化
ACS クラスターの作成時に [ログサービスを有効にする] を選択すると、Log Service アドオンが自動的に有効になります。クラスター作成時にこのオプションを選択しなかった場合は、次の手順に従って既存のクラスターでアドオンを有効にできます。
-
ACS コンソールにログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
-
クラスターリスト ページで、対象クラスターの名前をクリックします。左側のナビゲーションウィンドウで、Add-ons をクリックします。
-
Logs and Monitoring セクションで、alibaba-log-controller を見つけます。Install をクリックします。Install ダイアログボックスで、OK をクリックします。
alibaba-log-controller の構成と環境変数をカスタマイズしている場合、アップグレードによってこれらのパラメーターが上書きされるため、再設定する必要があります。
ステップ 2:アプリケーション作成時のログ収集の設定
アプリケーションを作成する際に、コンソールまたは YAML ファイルを使用してコンテナログを収集するように設定できます。
コンソールウィザード
-
ACS コンソールにログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
-
クラスターリスト ページで、対象クラスターの名前をクリックします。左側のナビゲーションウィンドウで、Workloads > Deployments を選択します。
-
Deployments ページで、Namespace ドロップダウンリストから名前空間を選択します。次に、右上隅にある Create from Image をクリックします。
説明この例ではデプロイメントを使用しますが、StatefulSet などの他のワークロードタイプでも手順は同じです。
-
Basic Information タブで、Name:、Replicas:、Type を設定します。Next をクリックして Container ページに移動します。
説明このセクションでは、SLS に関連する設定のみを説明します。他のアプリケーション設定項目については、「ステートレスワークロード (デプロイメント) の作成」をご参照ください。
-
Log セクションで、ログ関連の情報を設定します。
-
Collection Configuration を設定します。
+ アイコンをクリックして、新しい収集設定を作成します。各設定は、Logstore と Log Path in Container (Can be set to stdout) で構成されます。
-
Logstore:収集したログを保存する Logstore の名前を指定します。Logstore が存在しない場合、ACS はクラスターに関連付けられた SLS プロジェクトに自動的に作成します。
説明デフォルトでは、新しく作成された Logstore 内のログは 90 日間保存されます。
-
コンテナ内のログパス:ログを収集するパスを指定します。たとえば、/usr/local/tomcat/logs/catalina.*.log を使用して、Tomcat からテキストログを収集します。
説明このパラメーターを stdout に設定すると、コンテナの stdout と stderr が収集されます。
各エントリは、指定された Logstore の収集設定を作成します。 デフォルトでは、ログはシンプルモード (1 行ずつ) で収集されます。
例:Logstore 名を access に、コンテナ内のログパスを
/usr/local/tomcat/logs/catalina.*.logに設定します。別の Logstore 名を catalina に、パスをstdoutに設定します。注:ログエージェントアドオンがクラスターにデプロイされていることを確認してください。
-
-
Custom Tag を設定します。
+ アイコンをクリックして、新しいカスタムタグを作成します。各カスタムタグは、収集されたログに追加されるキーと値のペアです。これらのタグを使用して、バージョン番号などのメタデータをコンテナログに追加します。
[タグ名] フィールドに
releaseを入力します。[タグ値] フィールドに1.0.0を入力します。
-
-
設定が完了したら、右上隅の Next をクリックします。
後続の操作については、「ステートレスワークロード (デプロイメント) の作成」をご参照ください。
YAML ファイル
-
ACS コンソールにログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
クラスターリスト ページで、クラスターの名前をクリックします。左側のナビゲーションウィンドウで、 をクリックします。
-
Deployments ページで、Namespace ドロップダウンリストから名前空間を選択します。次に、右上隅にある Create from YAML をクリックします。
説明この例ではデプロイメントを使用しますが、StatefulSet などの他のワークロードタイプでも手順は同じです。
-
YAML ファイルを設定します。
YAML ファイルの構文は Kubernetes の構文と同じです。コンテナの収集設定を指定するには、
envを使用して Collection Configuration と Custom Tag を追加する必要があります。次のコードは、単純な 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:高度なログ収集パラメーター」をご参照ください。
-
環境変数を使用して、Collection Configuration と Custom Tag を作成します。すべての設定関連の環境変数のプレフィックスは
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"]この例では、
aliyun_logs_{key}形式を使用して 2 つの収集設定が作成されます。対応する{key}の値はlog-stdoutとlog-varlogです。-
aliyun_logs_log-stdout:この変数は、コンテナのstdoutの収集設定を作成します。収集されたログは、Logstoreという名前のlog-stdoutに送信されます。対応する SLS の収集設定もlog-stdoutという名前で、log-stdoutLogstoreを使用します。 -
aliyun_logs_log-varlog:この環境変数は、Logstoreという名前のlog-varlogを作成し、ログ収集パスを /var/log/*.log に設定する構成を指定します。対応する SLS の収集設定の名前も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"]SLS は、このタグをコンテナから収集されたすべてのログにフィールドとして自動的に追加します。この例では、変数名の
mytag1の部分は、アンダースコア (_) を含まない任意の名前にすることができます。
-
-
stdout 以外の収集パスを指定する場合は、Pod 仕様に対応する
volumeMountsも定義する必要があります。この例では、収集設定に /var/log/*.log の収集が含まれています。したがって、/var/log の
volumeMountsが適宜追加されます。
-
-
YAML ファイルを作成した後、Create をクリックして設定を ACS クラスターに適用します。
ステップ 3:高度なログ収集パラメーター
さまざまな環境変数を使用して、特定のログ収集要件に対応する高度なパラメーターを設定できます。
|
パラメーター |
説明 |
例 |
注 |
|
aliyun_logs_{key} |
|
|
|
|
aliyun_logs_{key}_tags |
オプション。値は {tag-key}={tag-value} 形式である必要があり、ログの識別に役立ちます。 |
|
該当なし。 |
|
aliyun_logs_{key}_project |
オプション。SLS プロジェクト。この環境変数が設定されていない場合、デフォルトでアドオンのインストール時に選択されたプロジェクトになります。 |
|
プロジェクトは、Log Service アドオンが実行されているのと同じリージョンにある必要があります。 |
|
aliyun_logs_{key}_logstore |
オプション。SLS Logstore。この環境変数が設定されていない場合、Logstore 名はデフォルトで {key} の値になります。 |
|
該当なし。 |
|
aliyun_logs_{key}_shard |
オプション。Logstore 用に作成するシャード数。有効な値:1~10。この環境変数が設定されていない場合、デフォルト値は 2 です。 説明
このパラメーターは Logstore が作成されるときにのみ適用され、既存の Logstore には影響しません。 |
|
該当なし。 |
|
aliyun_logs_{key}_ttl |
オプション。ログの保存期間 (日数)。有効な値:1~3650。
説明
このパラメーターは Logstore が作成されるときにのみ適用され、既存の Logstore には影響しません。 |
|
該当なし。 |
|
aliyun_logs_{key}_machinegroup |
オプション。アプリケーションのマシングループ。この環境変数が設定されていない場合、デフォルトで Log Service アドオンのインストール時に選択されたマシングループになります。このパラメーターの使用方法の詳細については、「ユースケース 2:異なるアプリケーションからのログを異なるプロジェクトにルーティングする」をご参照ください。 |
|
該当なし。 |
|
aliyun_logs_{key}_logstoremode |
オプション。SLS Logstore のタイプ。このパラメーターを指定しない場合、デフォルト値は standard です。有効な値: 説明
このパラメーターは Logstore が作成されるときにのみ適用され、既存の Logstore には影響しません。
|
|
該当なし。 |
-
ユースケース 1:単一の Logstore への収集
複数のアプリケーションから同じ Logstore にデータを収集するには、 aliyun_logs_{key}_logstore パラメーターを設定します。たとえば、次の設定では、2 つのアプリケーションの stdout を収集し、
stdout-logstoreLogstore に送信します。この例では、アプリケーション 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:異なるプロジェクトへのログのルーティング
異なるアプリケーションからログを収集し、異なるプロジェクトにルーティングするには、次の手順に従います。
-
各プロジェクトで、
k8s-group-{cluster-id}という名前のカスタム識別子を持つマシングループを作成します。ここで、{cluster-id}はクラスター ID です。マシングループ名はカスタマイズできます。 -
各アプリケーションの環境変数で、プロジェクト、Logstore、およびマシングループの情報を設定します。マシングループ名は、前の手順で作成したものである必要があります。
次の例では、アプリケーション 1 の
{key}はapp1-stdoutで、アプリケーション 2 の{key}はapp2-stdoutです。両方のアプリケーションが同じ 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:SLS コンソールでのログの表示
この例では、コンソールウィザードで作成されたアプリケーションのログを表示する方法を示します。設定が完了すると、SLS は自動的にアプリケーションログを収集し、SLS コンソールで表示できます。
-
SLS コンソールにログインします。
-
プロジェクト一覧 セクションで、ACS クラスターに対応するプロジェクトを選択します。デフォルトでは、プロジェクト名は k8s-log-{ACS-Cluster-ID} です。次に、Logstores タブに移動します。
-
Logstore のリストで、収集設定で指定した Logstore を見つけます。Logstore 名にカーソルを合わせます。Logstore 名の右側にある
アイコンをクリックし、次に 検索と分析 をクリックします。ログクエリページで、アプリケーションの stdout ログとコンテナからのテキストログを表示できます。カスタムタグはログのフィールドとして表示されます。
関連情報
-
SLS を使用して Kubernetes コンテナログを収集した後、収集された Kubernetes コンテナログを SLS コンソールで表示できます。
-
トラブルシューティング情報については、「ログ収集の失敗に関するトラブルシューティング」をご参照ください。