使用上の注意
Simple log Service CRDを使用して有効になるログ収集機能は、CRDの作成後に作成されるElastic Container Instanceポッドに対してのみ有効です。 既存のポッドのログを収集する場合は、既存のポッドに対してローリングリリースを実行する必要があります。
ログ収集の設定
alibaba-log-controllerコンポーネントをクラスターにデプロイした後、AliyunLogConfig CRD (CRD for log collection configurations) を使用してログ収集を設定できます。
alibaba-log-controllerコンポーネントをクラスターにデプロイします。
ACKコンソールにログインします。
[クラスター] ページで、管理するクラスターを見つけ、クラスター名をクリックします。 クラスターの詳細ページが表示されます。
alibaba-log-controllerコンポーネントをクラスターにデプロイします。
詳細ページの左側のナビゲーションウィンドウで、[操作]> [アドオン] を選択します。
[ログとモニタリング] タブをクリックし、Alibaba-log-controllerコンポーネントのカードを見つけて、[インストール] をクリックします。
表示されたメッセージボックスで、[OK] をクリックします。
alibaba-log-controllerをインストールすると、alibaba-log-controllerのカードの右上隅に「installed」という文字が表示されます。
AliyunLogConfig CRDの作成
ACKサーバーレスクラスターに接続します。
AliyunLogConfig CRDのYAML設定ファイルをコンパイルします。
重要 AliyunLogConfig CRDを作成した後、生成されたLogstoreとLogtailの設定をSimple Log Serviceコンソールで確認できます。 CRDを使用してLogtail設定を作成し、Simple Log Serviceコンソールで設定を変更した場合、変更はCRDと同期されません。 Logtail設定を更新する場合は、AliyunLogConfig CRDリソースを変更します。 設定の不整合を防ぐため、Simple Log Serviceコンソールで操作を実行しないでください。
AliyunLogConfig CRD YAMLテンプレート
apiVersion: log.alibabacloud.com/v1alpha1
kind: AliyunLogConfig
metadata:
name: simple-stdout-example
spec:
project: k8s-my-project
logstore: k8s-stdout
logstoreMode: standard
shardCount: 2
lifeCycle: 90
logtailConfig:
inputType: plugin
configName: simple-stdout-example
inputDetail:
...
基本パラメータ
パラメーター | 型 | 必須 / 任意 | 説明 |
project | String | 非対象 | プロジェクトの名前。 デフォルト値は、Logtailコンポーネントのインストールに使用するプロジェクトの名前です。 プロジェクトを作成する場合は、プロジェクトの名前を指定します。 プロジェクトが存在しない場合、システムは自動的にプロジェクトを作成します。 |
logstore | String | 対象 | ログストアの名前 指定されたLogstoreが存在しない場合、システムは自動的にLogstoreを作成します。 |
logstoreMode | String | 非対象 | Logstoreのタイプ。 このパラメーターは、Logstoreを作成した場合にのみ有効になります。 有効な値: query: クエリ用のLogstore 標準: 標準Logstore
詳細については、「Logstore の管理」をご参照ください。 |
shardCount | int | 非対象 | シャードの数。 有効な値: 1 ~ 10。 デフォルト値:2 |
lifeCycle | int | 非対象 | Logstore内のデータの保持期間。 有効な値: 1 ~ 3650 デフォルト値: 90。 単位:日 値3650は、データがLogstoreに永続的に格納されることを指定します。 このパラメーターは、Logstoreを作成した場合にのみ有効になります。 |
machineGroups | array | 非対象 | マシングループ。 Logtailコンポーネントをインストールすると、Simple Log Serviceはk8s-group-${your_k8s_cluster_id} という名前のマシングループを自動的に作成します。 |
logtailConfig | object | 対象 | Logtail設定。 設定には以下のパラメータが含まれます。 configName: Logtail設定の名前。 名前は、n metadata.nameで指定された名前と同じである必要があります。 inputType: ログ入力のタイプ。 有効な値: inputDetail: ログ入力の設定。 outputType: ログ出力のタイプ。 値をLogServiceに設定します。 ログはSimple Log Serviceにのみアップロードできます。 outputDetail: ログ出力の設定。 logSample: サンプルログ。
パラメーター設定の詳細については、「Logtail設定」をご参照ください。 |
コンテナフィルタリング
v1.0.34より前のLogtailを使用する場合は、環境変数とコンテナラベルを使用してのみコンテナをフィルタリングできます。
Kubernetesクラスターの名前空間とKubernetesクラスター内のコンテナーの名前は、コンテナーラベルにマップできます。 名前空間のLabel Nameパラメーターの値はio.kubernetes.pod.nameスペースです。 コンテナー名のLabel Nameパラメーターの値がio.kubernetes.container.nameです。 2つのコンテナラベルを使用してコンテナをフィルタリングすることを推奨します。 コンテナラベルがビジネス要件を満たしていない場合は、環境変数ホワイトリストまたは環境変数ブラックリストを使用してコンテナをフィルタリングできます。
Logtail 1.0.34以降のバージョンを使用する場合、ポッド名、名前空間、コンテナ名、コンテナラベルなどのKubernetesレベルの情報に基づいてコンテナをフィルタリングできます。
コンテナフィルタリングパラメータは、logtailConfig.inputDetail.advanced.k8sフィールドで設定する必要があります。 サポートされるパラメータ:
IncludeK8sLabel: データを収集するコンテナーを指定するKubernetesラベルホワイトリスト。
ExcludeK8sLabel: データを収集しないコンテナーを指定するKubernetesラベルブラックリスト。
K8sNamespaceRegex: 名前空間。
K8sPodRegex: ポッドの名前。
K8sContainerRegex: コンテナ名。
詳細については、「DaemonSetモードでKubernetesコンテナーからテキストログを収集する」および「DaemonSetモードでKubernetesコンテナーからstdoutとstderrを収集する (旧バージョン) 」をご参照ください。
AliyunLogConfig CRDのサンプルYAML設定ファイル
テキストログの収集に使用されるCRDのサンプルYAML構成ファイル
log-file.yamlという名前のファイルを作成し、次のテンプレートをファイルにコピーします。
apiVersion: log.alibabacloud.com/v1alpha1 # Use the default value. You do not need to modify this parameter.
kind: AliyunLogConfig # Use the default value. You do not need to modify this parameter.
metadata:
name: test-file # The resource name, which is unique in the current Kubernetes cluster.
spec:
project: k8s-log-c326bc86**** # Optional. The project name. If the project does not exist, the system automatically creates the project.
logstore: test-file # Required. The Logstore name. If the Logstore does not exist, the system automatically creates a Logstore.
logtailConfig: # The Logtail configuration.
inputType: file # The type of the data source. The value file specifies text logs, and the value plugin specifies stdout logs.
configName: test-file # The name of the Logtail configuration. The name must be the same as the resource name that is specified in metadata.name.
inputDetail: # The details of the Logtail configuration.
logType: common_reg_log # Collect text logs in simple mode.
logPath: /log/ # The path of the log file.
filePattern: "*.log" # The name of the log file. The name can contain asterisks (*) and question marks (?). Example: log_*.log.
dockerFile: true # Specify whether to collect logs from docker containers.
advanced: # Configure filter conditions for containers.
k8s:
K8sNamespaceRegex: ^(default)$
K8sPodRegex: '^(eci-sls-demo.*)$'
stdoutログの収集に使用されるCRDのサンプルYAML設定ファイル
log-stdout.yamlという名前のファイルを作成し、次のテンプレートをファイルにコピーします。
apiVersion: log.alibabacloud.com/v1alpha1 # Use the default value. You do not need to modify this parameter.
kind: AliyunLogConfig # Use the default value. You do not need to modify this parameter.
metadata:
name: test-stdout # The resource name. The name must be unique in the current Kubernetes cluster.
spec:
project: k8s-log-c326bc86**** # Optional. The project name. If the project does not exist, the system automatically creates the project.
logstore: test-stdout # Required. The Logstore name. If the Logstore does not exist, the system automatically creates a Logstore.
shardCount: 2 # Optional. The number of shards. Default value: 2. Valid values: 1, 2, 3, 4, 5, 6, 7, 8, 9, and 10.
lifeCycle: 90 # Optional. The retention period of logs in the Logstore. This parameter takes effect only when you create a Logstore. Valid values: 1 to 3650. Default value: 90. Unit: days. The value of 3650 indicates that logs are permanently reserved.
logtailConfig: # The Logtail configuration.
inputType: plugin # The type of the data source. The value file specifies text logs. The value plugin specifies stdout logs.
configName: test-stdout # The name of the Logtail configuration. The name must be the same as the resource name that is specified in metadata.name.
inputDetail: # The details of the Logtail configuration.
plugin:
inputs:
- type: service_docker_stdout
detail:
Stdout: true
Stderr: true
# IncludeEnv:
# aliyun_logs_test-stdout: "stdout"
AliyunLogConfig CRDを作成します。
次のコードは、サンプルコマンドを提供します。 Logtail設定が適用されると、Logtailは各コンテナからstdoutまたはテキストログを収集し、収集したログをSimple Log Serviceに送信します。
kubectl apply -f log-file.yaml
kubectl apply -f log-stdout.yaml
重要 ログを収集したら、インデックスを作成する必要があります。 次に、Logstore内のログを照会および分析できます。 詳細については、「インデックスの作成」をご参照ください。
テストログ収集
AliyunLogConfig CRDを作成すると、Simple Log Serviceは後で作成されるポッドのログを自動的に収集します。 次のアプリケーションを作成して、ログ収集効果をテストできます。
アプリケーションを作成します。
次のサンプルYAMLファイルでは、デプロイを作成する方法について説明します。 この例では、関連するコマンドを実行して、コンテナーの起動後にstdoutファイルとログファイルを継続的に表示します。
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
test-sls-crd.yamlという名前のファイルを作成し、前述のYAMLファイルテンプレートをファイルにコピーします。 次のコマンドを実行してアプリケーションを作成します。
kubectl create -f test-sls-crd.yaml
アプリケーションのステータスを確認します。
kubetcl get pod
期待される出力:
NAME READY STATUS RESTARTS AGE
eci-sls-demo-7bf8849b9f-cgpbn 1/1 Running 0 2m14s
ログを表示します。
Simple Log Service コンソールにログインします。
プロジェクトの名前をクリックします。
コンテナーのログが保存されているLogstoreを見つけます。 Logstoreの名前をクリックしてログを表示します。
テキストログの収集

stdoutログの収集

ログ収集の無効化
AliyunLogConfig CRDを作成すると、条件を満たすすべてのポッドのログが自動的に収集されます。 特定のポッドのログを収集しない場合は、ポッドのメタデータセクションにk8s.aliyun.com/eci-sls-enable: "false" アノテーションを追加して、ログ収集を無効にすることができます。 これにより、Logtail設定の自動作成によるリソースの無駄を防ぎます。
重要 ポッドの構成ファイルのメタデータに注釈を追加する必要があります。 たとえば、配置を作成するときは、spec.template.metadataセクションに注釈を追加する必要があります。
Elastic Container Instanceの機能を使用するには、Elastic Container Instanceベースのポッドを作成する場合にのみアノテーションを追加できます。 ポッドを更新するときにアノテーションを追加または変更しても、これらのアノテーションは有効になりません。
次のコードは、サンプル設定を提供します。
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" # Disables log collection.
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