注意事項
Simple log Service CRDを使用して有効になるログ収集機能は、CRDの作成後に作成されるElastic Container Instanceポッドに対してのみ有効です。 既存のポッドのログを収集する場合は、既存のポッドに対してローリングリリースを実行する必要があります。
ログ収集の設定
alibaba-log-controllerコンポーネントをクラスターにデプロイした後、AliyunLogConfig CRD (CRD for log collection configurations) を使用してログ収集を設定できます。
alibaba-log-controllerコンポーネントをクラスターにデプロイします。
Container Service for Kubernetes (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テンプレート
AliyunLogConfig CRD YAML template
apiVersion: log.alibabacloud.com/v1alpha1 # The default value is used. You do not need to modify this parameter.
kind: AliyunLogConfig # The default value is used. You do not need to modify this parameter.
metadata:
name: simple-stdout-example # The name of the resource. The name must be unique in the current Kubernetes cluster.
spec:
project: k8s-my-project # Optional. The name of the project. The default value is the name of the project that you use to install the Logtail components.
logstore: k8s-stdout # The name of the Logstore. If the specified Logstore does not exist, Simple Log Service automatically creates a Logstore.
logstoreMode: standard # Optional. The type of the Logstore. The value of this parameter takes effect only if you configure the parameter when you create the Logstore.
shardCount: 2 # Optional. The number of shards. Valid values: 1 to 10. Default value: 2.
lifeCycle: 90 # The data retention period of the Logstore. The value of this parameter takes effect only if you configure the parameter when you create the Logstore. Valid values: 1 to 3650. Default value: 90. Unit: days. The value 3650 specifies that data is permanently stored in the Logstore.
logtailConfig: # The Logtail configuration.
inputType: plugin # The type of the data source. Valid values: file and plugin. The value file specifies text logs. The value plugin specifies stdout.
configName: simple-stdout-example # The name of the Logtail configuration. The name must be the same as the resource name that is specified in metadata.name.
inputDetail: # The detailed settings of the Logtail configuration. For more information, see the following configuration examples.
...
パラメーターの説明
基本パラメータ
パラメーター | タイプ | 必須 | 説明 |
project | String | 選択可能 | プロジェクトの名前。 デフォルト値は、Logtailコンポーネントのインストールに使用するプロジェクトの名前です。 |
logstore | String | 必須 | ログストアの名前 指定されたLogstoreが存在しない場合、Simple Log Serviceは自動的にLogstoreを作成します。 |
logstoreMode | String | 選択可能 | Logstoreのタイプ。 このパラメーターは、Logstoreを作成した場合にのみ有効になります。 有効な値: query: Logstoreを照会します。 standard: 標準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設定の名前。 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コンテナからテキストログを収集する」および「Simple Log Serviceコンソールを使用してDaemonSetモードでコンテナのstdoutとstderrを収集する」をご参照ください。
AliyunLogConfig CRDのサンプルYAML設定ファイル
テキストログの収集に使用されるCRDのサンプルYAML構成ファイル
log-file.yamlという名前のファイルを作成し、次のテンプレートをファイルにコピーします。
apiVersion: log.alibabacloud.com/v1alpha1
kind: AliyunLogConfig
metadata:
name: test-file # resource name, which is unique in the current Kubernetes cluster.
spec:
project: k8s-log-c326bc86**** # Optional. The custom project name. We recommend that you name the project in the format of <k8s-log-custer ID>.
logstore: test-file # Required. The name of the Logstore. If no Logstore exists, Simple Log Service 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 indicates stdout.
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: '^(nginx-log-demo.*)$'
K8sContainerRegex: ^(nginx-log-demo-0)$
IncludeK8sLabel:
job-name: "^(nginx-log-demo.*)$"
ストップアウトの収集に使用されるCRDのサンプルYAML構成ファイル。
log-stdout.yamlという名前のファイルを作成し、次のテンプレートをファイルにコピーします。
apiVersion: log.alibabacloud.com/v1alpha1
kind: AliyunLogConfig
メタデータ:
name: test-stdout# リソースの名前。 名前は、現在のKubernetesクラスターで一意である必要があります。
仕様:
プロジェクト: k8s-log-c326bc86 ****# オプション。 カスタムプロジェクト名。 プロジェクトに <k8s-log-custer ID> の形式で名前を付けることを推奨します。
logstore: test-stdout# 必須です。 ログストアの名前 Logstoreが存在しない場合、Simple Log Serviceは自動的にLogstoreを作成します。
shardCount: 2# オプション。 シャードの数。 デフォルト値:2 有効な値: 1、2、3、4、5、6、7、8、9、および10。
lifeCycle: 90# オプション。 Logstore内のログの保存期間。 このパラメーターは、Logstoreを作成した場合にのみ有効になります。 有効な値: 1 ~ 3650 デフォルト値: 90。 単位:日 値3650は、永久期間を示す。
logtailConfig: # Logtailの設定。
inputType: plugin# データソースのタイプ。 有効な値: fileとplugin。 値ファイルはテキストログを指定します。 value pluginはstdoutを指定します。
configName: test-stdout# Logtail設定の名前。 名前は、n metadata.nameで指定されたリソース名と同じである必要があります。
inputDetail: # Logtail設定の詳細。
プラグイン:
入力:
- type: service_docker_stdout
詳細:
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に収集されたら、インデックスを作成する必要があります。 次に、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