ECI では、環境変数を使ってカスタムログ設定をコンテナに渡すことができます。このトピックでは、環境変数を使用してログ収集を設定し、コンテナログを Simple Log Service (SLS) に自動的に送信する方法について説明します。
-
ACK Serverless クラスターの場合は、SLS CRD を使用してログを収集します。詳細については、「SLS CRD を使用したログ収集」をご参照ください。
-
SLS CRD と環境変数を同時に使用しないでください。ログ収集が失敗する可能性があります。
背景情報
SLS は、ログデータを一元管理するサービスです。コードを記述することなく、ログデータの収集、消費、転送、クエリ、分析を迅速に行うことができます。詳細については、「Simple Log Service とは」をご参照ください。
前提条件
SLS が有効になっていることを確認してください。サービスが有効になっていない場合、SLS コンソールにログインすると、サービスの有効化を促されます。画面の指示に従って有効化してください。
注意事項
-
ログ関連の環境変数は、インスタンス作成時にのみ有効です。インスタンス更新時に設定された変数は無視されます。
-
使用していないカスタムプロジェクトと Logtail 設定を削除して、課金を回避してください。
-
環境変数の名前を変更しても、元の設定は削除されません。課金を回避するために、手動で削除してください。
設定
ログ関連の環境変数には、aliyun_logs_{key} というプレフィックスを付ける必要があります。次の表に、使用可能な環境変数を示します。
{key} は Logtail 設定の名前を指定します。小文字、数字、ハイフン (-) のみを含めることができます。{key} はカスタマイズできますが、Kubernetes クラスター内で一意である必要があります。
|
設定対象 |
必須 |
環境変数 |
説明 |
|
Logtail 設定 |
はい |
aliyun_logs_{key} |
Logtail 設定を作成します。値はログソースを指定します。
|
|
プロジェクト |
いいえ |
aliyun_logs_{key}_project |
Log Service プロジェクトを指定します。 この変数が設定されていない場合、ログはデフォルトのプロジェクトに送信されます。デフォルトのプロジェクト名は |
|
Logstore |
いいえ |
aliyun_logs_{key}_logstore |
Logstore を指定します。 この変数が設定されていない場合、 |
|
マシン グループ |
いいえ |
aliyun_logs_{key}_machinegroup |
マシン グループを指定します。 この変数が設定されていない場合、デフォルトのマシン グループが使用されます。 |
|
シャード |
いいえ |
aliyun_logs_{key}_shard |
Logstore のシャード数を指定します。
|
|
ログ保持期間 |
いいえ |
aliyun_logs_{key}_ttl |
ログ保持期間を日数で指定します。
|
|
タグ |
いいえ |
aliyun_logs_{key}_tags |
|
設定例
-
クラスターに接続します。
-
アプリケーションを作成します。
コンテナの環境変数としてログ設定を指定します。次の YAML ファイルは、Deployment の例を示しています。
apiVersion: apps/v1 kind: Deployment metadata: labels: app: sls name: eci-sls-demo spec: replicas: 1 selector: matchLabels: app: sls template: metadata: labels: app: sls alibabacloud.com/eci: "true" spec: containers: - image: registry-vpc.cn-beijing.aliyuncs.com/eci_open/alpine:3.5 imagePullPolicy: Always args: - -c - mkdir -p /log;while true; do echo hello world; date; echo hello sls >> /log/alpine.log; sleep 1;done command: - /bin/sh name: alpine env: # プロジェクトを指定します。省略すると、デフォルトのプロジェクトが使用されます。 - name: aliyun_logs_test-stdout_project value: k8s-log-c21492 - name: aliyun_logs_test-file_project value: k8s-log-c21492 # マシン グループを指定します。省略すると、デフォルトのマシン グループが使用されます。 - name: aliyun_logs_test-stdout_machinegroup value: k8s-group-app-alpine - name: aliyun_logs_test-file_machinegroup value: k8s-group-app-alpine # stdout ログを test-stdout という名前の Logstore に収集します。 - name: aliyun_logs_test-stdout value: stdout # /log/*.log ファイルからログを test-file という名前の Logstore に収集します。 - name: aliyun_logs_test-file value: /log/*.log # ログ保持期間を設定します。この設定は test-stdout Logstore にのみ適用されます。 - name: aliyun_logs_test-stdout_ttl value: "7" # シャード数を設定します。この設定は test-stdout Logstore にのみ適用されます。 - name: aliyun_logs_test-stdout_shard value: "2" # emptyDir ボリュームをマウントします。カスタムファイルパスからログを収集するために必要です。 volumeMounts: - name: volume-sls mountPath: /log volumes: - name: volume-sls emptyDir: {}上記の YAML コンテンツを test-sls-env.yaml という名前のファイルに保存し、次のコマンドを実行してアプリケーションを作成します。
kubectl create -f test-sls-env.yaml -
アプリケーションのステータスを確認します。
kubectl get pod想定される出力:
NAME READY STATUS RESTARTS AGE eci-sls-demo-b97bbd7d6-z9twz 1/1 Running 0 2m45s -
ログを表示します。
-
Log Service コンソールにログインします。
-
対象のプロジェクト名をクリックします。
-
対象の Logstore を見つけて、その名前をクリックしてログを表示します。
-
stdout ログ
[test-stdout] Logstore では、収集された stdout ログを表示できます。ログフィールドには、
_container_name_: alpine、_image_name_: registry-vpc.cn-beijing.aliyuncs.com/eci_open/alpine:3.5、_namespace_: default、_source_: stdoutが含まれます。ログコンテンツの例はhello worldです。 -
ファイル ログ
Log Service コンソールで、左側のメニューから [test-file] Logstore を選択します。次に、[test-file] タブをクリックし、ツールバーの [生ログ] をクリックして生ログを表示します。クエリ結果には、収集されたコンテナログが表示されます。各ログエントリには、
__tag__:__container_name__:alpine、__tag__:__namespace__:default、__tag__:__container_ip__、__tag__:__pod_name__、__tag__:__pod_uid__、__tag__:__eci_id__などのメタデータタグフィールドと、ログコンテンツcontent:hello slsが含まれます。
-
-