Container Compute Service (ACS) は Simple Log Service (SLS) と統合されています。クラスターの作成時に SLS を有効にすると、コンテナの stdout やテキストファイルを含む、ACS クラスターからのコンテナログを迅速に収集できます。このトピックでは、AliyunLogConfig カスタムリソースを使用して ACS クラスター内のアプリケーションログを収集する方法について説明します。
ステップ 1:Log Service アドオンの有効化
ACS クラスターの作成時に [Enable Log Service] を選択すると、Log Service アドオンが自動的に有効になります。クラスター作成時にこのオプションを選択しなかった場合は、次の手順に従って既存のクラスターでアドオンを有効にできます。
-
ACS コンソールにログインします。左側のナビゲーションペインで、クラスターリスト をクリックします。
-
クラスターリスト ページで、対象クラスターの名前をクリックします。左側のナビゲーションペインで、アドオン管理 をクリックします。
-
[Logs and Monitoring] セクションで [alibaba-log-controller] を見つけます。インストール をクリックします。[Install] ダイアログボックスで OK をクリックします。
alibaba-log-controller の設定や環境変数をカスタマイズしている場合、アップグレードによってこれらのパラメーターが上書きされるため、再設定する必要があります。
ステップ 2:AliyunLogConfig カスタムリソースの作成
AliyunLogConfig カスタムリソースを使用して、特定のアプリケーションの stdout とファイルログを収集できます。カスタムリソースを作成するには、左側のナビゲーションペインで カスタムリソース > CRD > YAML のリソースの作成 の順に選択します。次の表に、AliyunLogConfig カスタムリソースの主要なパラメーターを示します。
|
パラメーター |
説明 |
例 |
|
|
ログ収集設定リソースの名前。この名前は ACS クラスター内で一意である必要があります。 |
test-stdout |
|
|
任意。プロジェクトの名前。 |
k8s-log-c326bc86**** |
|
|
必須。Logstore の名前。Logstore が存在しない場合、Simple Log Service が自動的に作成します。 |
test-stdout |
|
|
データソースタイプです。 |
plugin |
|
|
Logtail 設定の名前。これは |
test-stdout |
|
|
Logtail の詳細設定です。これには、stdout ログとファイルログを収集するための設定が含まれます。 |
これはコンテナの標準出力 ( |
|
|
Logtail の拡張設定です。
|
Logtail は、次のすべての条件が満たされた場合にのみコンテナログを収集します:
|
設定パラメーターの詳細については、「Logtail 設定 (レガシー)」をご参照ください。
例 1:特定の stdout ログの収集
stdout ログ (stderr を含む) を収集し、特定の Pod やコンテナでフィルタリングするには、inputDetail 設定内のプラグインの detail セクションにマッチングルールを追加します。次の設定を ACS クラスターに適用します。
apiVersion: log.alibabacloud.com/v1alpha1
kind: AliyunLogConfig
metadata:
name: test-stdout
spec:
project: k8s-log-c326bc86**** # これを実際のプロジェクト名に置き換えてください。
logstore: test-stdout
shardCount: 2
lifeCycle: 90
logtailConfig:
inputType: plugin
configName: test-stdout
inputDetail:
plugin:
inputs:
- type: service_docker_stdout
detail:
Stdout: true
Stderr: true
K8sNamespaceRegex: ^(default)$
K8sContainerRegex: ^(busybox)$
K8sPodRegex: ^backend.+$
IncludeK8sLabel:
app: backend
application: prod
例 2:特定のファイルログの収集
特定の Pod またはコンテナからファイルログを収集するには、inputDetail 設定内の advanced ブロックにマッチングルールを追加します。次の設定を ACS クラスターに適用します。
apiVersion: log.alibabacloud.com/v1alpha1
kind: AliyunLogConfig
metadata:
name: test-file
spec:
project: k8s-log-c326bc86**** # これを実際のプロジェクト名に置き換えてください。
logstore: test-file
logtailConfig:
inputType: file
configName: test-file
inputDetail:
logType: common_reg_log
logPath: /log/
filePattern: "*.log"
dockerFile: true
advanced:
k8s:
K8sNamespaceRegex: ^(default)$
K8sContainerRegex: ^(busybox)$
K8sPodRegex: ^backend.+$
IncludeK8sLabel:
app: backend
application: prod
[test-stdout] と [test-file] の AliyunLogConfig カスタムリソースを作成した後、「ステップ 4:SLS コンソールでのログの表示」の指示に従って、対応する Logstore が作成されているか確認してください。作成されていない場合は、「Logtail 設定 (レガシー)」に基づいて設定を確認し、変更してください。
ステップ 3:サンプルアプリケーションの作成
AliyunLogConfig カスタムリソースを作成すると、Simple Log Service (SLS) は設定に一致する新しい Pod からログを自動的に収集します。次のサンプルアプリケーションを作成して、ログ収集をテストできます。
-
次の例は、Deployment としてデプロイされるサンプルアプリケーションを示しています。コンテナが起動すると、コマンドを実行して stdout とログファイルに継続的にログを出力します。
apiVersion: apps/v1 kind: Deployment metadata: name: backend-busybox labels: app: backend application: prod spec: replicas: 1 selector: matchLabels: app: backend application: prod template: metadata: name: backend-busybox labels: app: backend application: prod spec: containers: - args: - -c - mkdir -p /log; while true; do echo hello world; date; echo hello sls >> /log/busybox.log; sleep 1; done command: - /bin/sh image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/busybox:1.28 imagePullPolicy: Always name: busybox
ステップ 4:SLS コンソールでのログの表示
設定を適用すると、Simple Log Service (SLS) はサンプルアプリケーションからログを収集して保存します。SLS コンソールでコンテナログを表示できます。
-
SLS コンソールにログインします。
-
プロジェクト一覧 セクションで、ACS クラスターのプロジェクト (デフォルト:k8s-log-{ACS_cluster_ID}) をクリックして、Logstores リストを開きます。
-
リストで、ログ収集設定で指定した Logstore の名前をクリックして、新しいタブでログを表示します。
この例では、ログクエリページで stdout ログ (test-stdout Logstore 内) とコンテナファイルログ (test-file Logstore 内) を表示できます。
[test-stdout] Logstore のクエリページでは、SLS が 582 件のログを収集したことがわかります。生ログには、
_container_name_、_image_name_、_namespace_、_pod_name_、_source_(値はstdout)、contentなどのフィールドが含まれています。これにより、busybox コンテナからの stdout ログが正常に収集されたことが確認できます。test-file Logstore のクエリ結果から、busybox コンテナからのファイルログが正常に収集されたことがわかります。ソースパスは
/log/busybox.logで、ログ内容はcontent: hello slsです。
詳細情報
トラブルシューティングのガイダンスについては、「Logtail ログ収集の失敗に関するトラブルシューティング」をご参照ください。