Elastic Container Instance では、コンテナ環境変数を使用してカスタムログ設定を指定できます。このトピックでは、環境変数を使用してログ収集を設定し、コンテナログをログサービスに自動的に収集する方法について説明します。
Container Service for Kubernetes (ACK) Serverless クラスタの場合、ログサービスカスタムリソース定義 (CRD) を使用してログを収集することをお勧めします。詳細については、ログサービス CRD を使用したログの収集を参照してください。
ログサービス CRD と環境変数を同時に使用しないでください。ログ収集に失敗する可能性があります。
背景情報
ログサービスは、エンドツーエンドのデータロギングサービスです。ログサービスを使用すると、さらなる開発を行うことなく、ログデータの収集、消費、配信、クエリ、分析を行うことができます。詳細については、ログサービスとはを参照してください。
前提条件
ACK Serverless クラスタでログサービスが有効になっています。ログサービスコンソールにログオンします。クラスタでログサービスが有効になっていない場合は、画面の指示に従ってサービスを有効にするように求められます。
注記
環境変数を使用してログ収集を設定できるのは、エラスティックコンテナインスタンスを作成するときだけです。エラスティックコンテナインスタンスを更新するときに渡すログ関連の環境変数は有効になりません。
カスタムプロジェクトまたはLogtail設定を使用しなくなった場合は、不要なコストを避けるために、プロジェクトまたはLogtail設定をタイムリーに削除してください。
設定の説明
ログ環境変数の名前のプレフィックスは、aliyun_logs_{key}
形式です。次の表に、設定可能な環境変数を示します。
{key} は、ログサービスの Logtail 設定の名前を指定します。{key} の値には、小文字、数字、ハイフン (-) のみを含めることができます。{key} にカスタム値を指定できます。値が Kubernetes クラスタ内で一意であることを確認してください。
設定対象 | 必須 | 環境変数の名前 | 説明 |
Logtail 設定 | はい | aliyun_logs_{key} | この変数は Logtail 設定を作成します。有効な値:
|
プロジェクト | いいえ | aliyun_logs_{key}_project | この変数は、ログサービスのプロジェクトを指定します。 この変数を指定しない場合、k8s-log-<cluster-id> 形式の名前のデフォルトプロジェクトが使用されます。 |
ログストア | いいえ | aliyun_logs_{key}_logstore | この変数はログストアを指定します。 この変数を指定しない場合、 |
マシン グループ | いいえ | aliyun_logs_{key}_machinegroup | この変数はマシン グループを指定します。 この変数を指定しない場合、デフォルトのマシン グループが使用されます。 |
シャード | いいえ | aliyun_logs_{key}_shard | この変数は、ログストアのシャード数を指定します。
|
ログの保持期間 | いいえ | aliyun_logs_{key}_ttl | この変数はログの保持期間を指定します。単位:日。
|
タグ | いいえ | aliyun_logs_{key}_tags | この変数は、ログにバインドされるタグを指定します。変数の値は、 |
設定例
Kubernetes クラスタに接続します。
アプリケーションを作成します。
コンテナの環境変数にログ関連の設定を指定できます。次の YAML ファイルの例は、Deployment を作成する方法を示しています。この例では、コンテナの起動後に stdout とログファイルが継続的に表示されるように、関連するコマンドが実行されます。
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 という名前のログストアに収集します。収集パスは stdout です。 - name: aliyun_logs_test-stdout value: stdout # /log/*.log ディレクトリのログを test-file という名前のログストアに収集します。収集対象は、/log ディレクトリ内のすべての .log ファイルです。 - name: aliyun_logs_test-file value: /log/*.log # ログの保持期間を指定します。この設定は、test-stdout という名前のログストアに対してのみ有効です。 - name: aliyun_logs_test-stdout_ttl value: "7" # ログシャードの数を指定します。この設定は、test-stdout という名前のログストアに対してのみ有効です。 - name: aliyun_logs_test-stdout_shard value: "2" # emptyDir ボリュームをマウントします。環境変数 aliyun_logs_{key} の値がコンテナ内のディレクトリである場合は、emptyDir ボリュームをそのディレクトリにマウントします。 volumeMounts: - name: volume-sls mountPath: /log volumes: - name: volume-sls emptyDir: {}
test-sls-env.yaml という名前の YAML ファイルを作成し、上記のテンプレートを 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
ログを表示します。
ログサービスコンソールにログオンします。
プロジェクトの名前をクリックします。
コンテナのログが格納されているログストアを見つけます。ログストアの名前をクリックしてログを表示します。
stdout ログの収集
テキストログの収集