このトピックでは、Container Service for Kubernetes (ACK) サーバーレスクラスターで Simple Log Service (SLS) のカスタムリソース定義 (CRD) を使用して、コンテナログ収集を構成および自動化する方法について説明します。
背景情報
Alibaba Cloud の Simple Log Service (SLS) は、ログデータのためのオールインワンサービスです。開発不要で、ログデータの収集、消費、配信、クエリ、分析が可能です。詳細については、「Simple Log Service とは」をご参照ください。
前提条件
Simple Log Service が有効化されていることを確認してください。Simple Log Service コンソールにログインしたときにサービスが有効化されていない場合は、プロンプトが表示されます。画面の指示に従ってサービスを有効化できます。
注意事項
SLS CRD によって有効化されたログ収集は、CRD の構成後に作成された Elastic Container Instance (ECI) Pod にのみ適用されます。既存の Pod からログを収集するには、ローリングデプロイを実行する必要があります。
ログ収集の構成
クラスターに alibaba-log-controller コンポーネントをデプロイした後、AliyunLogConfig CRD を使用してログ収集を構成できます。
alibaba-log-controller コンポーネントのデプロイ
上部のナビゲーションバーの左上で、リージョンを選択します。
[クラスター] ページで、対象の ACK サーバーレスクラスターの名前をクリックして、その管理ページを開きます。
クラスターに alibaba-log-controller コンポーネントをデプロイします。
左側のナビゲーションウィンドウで、[運用管理] > [アドオン] を選択します。
[ログとモニタリング] タブをクリックし、[alibaba-log-controller] カードを見つけて、[インストール] をクリックします。
表示されたダイアログボックスで、[確認] をクリックします。
インストールが完了すると、[alibaba-log-controller] カードの右上に [インストール済み] と表示されます。
Logtail 収集構成の作成
ACK サーバーレスクラスターに接続します。
ログ収集構成 CRD の YAML ファイルを作成できます。
重要AliyunLogConfig CRD を作成した後、生成された Logstore と Logtail 構成を Simple Log Service コンソールで表示できます。ただし、コンソールで行われた変更は CRD に同期されません。構成を更新するには、CRD リソースを直接変更する必要があります。構成の不整合を引き起こす可能性があるため、コンソールで構成を変更しないでください。
AliyunLogConfig CRD を作成します。
適切なコマンドを実行して AliyunLogConfig CRD を作成します。Logtail 構成が有効になると、Logtail は各コンテナから標準出力またはテキストログの収集を開始し、SLS に送信します。
kubectl apply -f log-file.yaml kubectl apply -f log-stdout.yaml重要ログが収集された後、Logstore でログをクエリおよび分析するには、インデックスを作成する必要があります。詳細については、「インデックスを作成する」をご参照ください。
ログ収集のテスト
AliyunLogConfig CRD を作成すると、SLS はその後に作成された Pod から自動的にログを収集します。次のアプリケーションを作成して、このログ収集機能をテストできます。
アプリケーションを作成します。
次の YAML ファイルは、Deployment を作成する方法の例です。この例では、コンテナが起動した後、標準出力とログファイルを継続的に出力するコマンドを実行します。
apiVersion: apps/v1 kind: Deployment metadata: name: eci-sls-demo labels: app: sls spec: replicas: 1 selector: matchLabels: app: sls template: metadata: name: sls-test labels: app: sls alibabacloud.com/eci: "true" spec: containers: - args: - -c - mkdir -p /log;while true; do echo hello world; date; echo hello sls >> /log/busy.log; sleep 1;done command: - /bin/sh image: registry-vpc.cn-beijing.aliyuncs.com/eci_open/busybox:1.30 imagePullPolicy: Always name: busybox上記 YAML の内容を test-sls-crd.yaml として保存し、次のコマンドを実行してアプリケーションを作成します。
kubectl create -f test-sls-crd.yamlアプリケーションのステータスを確認します。
kubectl get pod期待される出力:
NAME READY STATUS RESTARTS AGE eci-sls-demo-7bf8849b9f-cgpbn 1/1 Running 0 2m14sログを表示します。
Simple Log Service コンソールにログインします。
対象のプロジェクトの名前をクリックします。
対象の Logstore を見つけて、その名前をクリックしてログを表示します。
テキストログ

標準出力

ログ収集の無効化
AliyunLogConfig CRD を作成すると、システムは指定された条件を満たすすべての Pod から自動的にログを収集します。特定の Pod からのログ収集を防ぐには、Pod のメタデータに k8s.aliyun.com/eci-sls-enable: "false" アノテーションを追加します。この方法により、Logtail 構成の自動作成によるリソースの無駄を防ぐことができます。
アノテーションは、Pod の構成ファイルのメタデータに追加する必要があります。たとえば、Deployment を作成する場合、spec.template.metadata セクションにアノテーションを追加する必要があります。
ECI 関連のアノテーションは、Pod が作成されるときにのみ適用されます。既存の Pod にこれらのアノテーションを追加または変更しても効果はありません。
次のコードは、サンプル構成を示しています:
apiVersion: apps/v1
kind: Deployment
metadata:
name: eci-sls-demo2
labels:
app: sls
spec:
replicas: 1
selector:
matchLabels:
app: sls
template:
metadata:
name: sls-test
labels:
app: sls
alibabacloud.com/eci: "true"
annotations:
k8s.aliyun.com/eci-sls-enable: "false" # ログ収集を無効にします。
spec:
containers:
- args:
- -c
- mkdir -p /log;while true; do echo hello world; date; echo hello sls >> /log/busy.log; sleep 1;
done
command:
- /bin/sh
image: registry.cn-shanghai.aliyuncs.com/eci_open/busybox:1.30
imagePullPolicy: Always
name: busybox