背景情報
Simple Log Service は、エンドツーエンドのデータロギングサービスです。 Simple Log Service を使用すると、追加の開発を行うことなく、ログデータの収集、使用、配信、クエリ、および分析を実行できます。 詳細については、「Simple Log Service とは」をご参照ください。
前提条件
ACK Serverless クラスターで Simple Log Service がアクティブ化されています。 Simple Log Service コンソール にログオンします。 クラスターで Simple Log Service がアクティブ化されていない場合は、画面上の指示に従ってサービスをアクティブ化するように求められます。
注意事項
Simple Log Service CRD を使用して有効化されたログ収集機能は、CRD が作成された後に作成された Elastic Container Instance ポッドに対してのみ有効です。 既存のポッドのログを収集する場合は、既存のポッドのローリングリリースを実行する必要があります。
ログ収集の構成
クラスターに logtail-ds コンポーネントをデプロイした後、AliyunLogConfig CRD を使用してログ収集を構成できます。
logtail-ds のデプロイ
ACK コンソール にログオンします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけ、その名前をクリックします。 左側のペインで、 を選択します。
[ログとモニタリング] タブをクリックし、[logtail-ds] カードを見つけて、[インストール] をクリックします。
表示されるメッセージで、[OK] をクリックします。
Logtail 構成の作成
AliyunLogConfig CRD の YAML 構成ファイルをコンパイルします。
重要 AliyunLogConfig CRD を作成した後、生成されたログストアと Logtail 構成を Simple Log Service コンソールで表示できます。 CRD を使用して Logtail 構成を作成し、Simple Log Service コンソールで構成を変更した場合、変更は CRD に同期されません。 Logtail 構成を更新する場合は、AliyunLogConfig CRD リソースを変更します。 構成の不整合を防ぐため、Simple Log Service コンソールで操作を実行しないでください。
AliyunLogConfig CRD YAML テンプレート
apiVersion: log.alibabacloud.com/v1alpha1 // Simple Log Service CRD の API バージョン。変更しないでください。
kind: AliyunLogConfig // Simple Log Service CRD の種類。変更しないでください。
metadata:
name: simple-stdout-example // リソース名。現在の Kubernetes クラスター内で一意である必要があります。
spec:
project: k8s-my-project // プロジェクト名。プロジェクトが存在しない場合は、システムによって自動的にプロジェクトが作成されます。
logstore: k8s-stdout // ログストア名。ログストアが存在しない場合は、システムによって自動的にログストアが作成されます。
logstoreMode: standard // ログストアのタイプ。このパラメーターは、ログストアを作成する場合にのみ有効になります。有効な値:query(クエリ用ログストア)、standard(標準ログストア)。
shardCount: 2 // シャードの数。有効な値:1 ~ 10。デフォルト値:2。
lifeCycle: 90 // ログストア内のデータの保存期間。有効な値:1 ~ 3650。デフォルト値:90。単位:日。値 3650 は、データがログストアに永続的に保存されることを指定します。このパラメーターは、ログストアを作成する場合にのみ有効になります。
logtailConfig: // Logtail 構成。
inputType: plugin // ログ入力のタイプ。有効な値:plugin(Logtail プラグインを使用して MySQL バイナリログなどのログを収集する)、file(正規表現モードやデリミタモードなどの固定モードでテキストログを収集する)。
configName: simple-stdout-example // Logtail 構成の名前。metadata.name で指定された名前と同じである必要があります。
inputDetail: // ログ入力の構成。
...
基本パラメーター
パラメーター | タイプ | 必須 | 説明 |
project | string | いいえ | プロジェクトの名前。デフォルト値は、Logtail コンポーネントのインストールに使用するプロジェクトの名前です。 プロジェクトを作成する場合は、プロジェクトの名前を指定します。プロジェクトが存在しない場合は、システムによって自動的にプロジェクトが作成されます。 |
logstore | string | はい | ログストアの名前。指定されたログストアが存在しない場合は、システムによって自動的にログストアが作成されます。 |
logstoreMode | string | いいえ | ログストアのタイプ。このパラメーターは、ログストアを作成する場合にのみ有効になります。有効な値: query: クエリ用ログストア standard: 標準ログストア
詳細については、「ログストアの管理」をご参照ください。 |
shardCount | int | いいえ | シャードの数。有効な値:1 ~ 10。デフォルト値:2。 |
lifeCycle | int | いいえ | ログストア内のデータの保存期間。有効な値:1 ~ 3650。デフォルト値:90。単位:日。値 3650 は、データがログストアに永続的に保存されることを指定します。このパラメーターは、ログストアを作成する場合にのみ有効になります。 |
machineGroups | array | いいえ | マシングループ。 Logtail コンポーネントをインストールすると、Simple Log Service は k8s-group-${your_k8s_cluster_id} という名前のマシングループを自動的に作成します。 |
logtailConfig | object | はい | Logtail 構成。構成には、次のパラメーターが含まれます。 configName: Logtail 構成の名前。 metadata.name で指定された名前と同じである必要があります。 inputType: ログ入力のタイプ。有効な値: inputDetail: ログ入力の構成。 outputType: ログ出力のタイプ。値を LogService に設定します。ログは Simple Log Service にのみアップロードできます。 outputDetail: ログ出力の構成。 logSample: サンプルログ。
パラメーター設定の詳細については、「Logtail 構成」をご参照ください。 |
コンテナーフィルタリング
v1.0.34 より前の Logtail を使用している場合、環境変数とコンテナーラベルを使用してのみコンテナーをフィルタリングできます。
Kubernetes クラスターの名前空間と Kubernetes クラスター内のコンテナーの名前は、コンテナーラベルにマッピングできます。名前空間のラベル名パラメーターの値は、io.kubernetes.pod.namespace
です。コンテナー名のラベル名パラメーターの値は、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 // デフォルト値を使用します。このパラメーターを変更する必要はありません。
kind: AliyunLogConfig // デフォルト値を使用します。このパラメーターを変更する必要はありません。
metadata:
name: test-file // リソース名。現在の Kubernetes クラスター内で一意である必要があります。
spec:
project: k8s-log-c326bc86**** // オプション。プロジェクト名。プロジェクトが存在しない場合は、システムによって自動的にプロジェクトが作成されます。
logstore: test-file // 必須。ログストア名。ログストアが存在しない場合は、システムによって自動的にログストアが作成されます。
logtailConfig: // Logtail 構成。
inputType: file // データソースのタイプ。値 file はテキストログを指定し、値 plugin は stdout ログを指定します。
configName: test-file // Logtail 構成の名前。 metadata.name で指定されたリソース名と同じである必要があります。
inputDetail: // Logtail 構成の詳細。
logType: common_reg_log // シンプルモードでテキストログを収集します。
logPath: /log/ // ログファイルのパス。
filePattern: "*.log" // ログファイルの名前。名前にアスタリスク (*) と疑問符 (?) を含めることができます。例:log_*.log。
dockerFile: true // Docker コンテナーからログを収集するかどうかを指定します。
advanced: // コンテナーのフィルター条件を構成します。
k8s:
K8sNamespaceRegex: ^(default)$ // 名前空間を指定します。
K8sPodRegex: '^(eci-sls-demo.*)$' // ポッド名を指定します。
stdout ログの収集に使用される CRD の YAML 構成ファイルの例
log-stdout.yaml という名前のファイルを作成し、次のテンプレートをファイルにコピーします。
apiVersion: log.alibabacloud.com/v1alpha1 // デフォルト値を使用します。このパラメーターを変更する必要はありません。
kind: AliyunLogConfig // デフォルト値を使用します。このパラメーターを変更する必要はありません。
metadata:
name: test-stdout // リソース名。現在の Kubernetes クラスター内で一意である必要があります。
spec:
project: k8s-log-c326bc86**** // オプション。プロジェクト名。プロジェクトが存在しない場合は、システムによって自動的にプロジェクトが作成されます。
logstore: test-stdout // 必須。ログストア名。ログストアが存在しない場合は、システムによって自動的にログストアが作成されます。
shardCount: 2 // オプション。シャードの数。デフォルト値:2。有効な値:1、2、3、4、5、6、7、8、9、および 10。
lifeCycle: 90 // オプション。ログストア内のログの保存期間。このパラメーターは、ログストアを作成する場合にのみ有効になります。有効な値:1 ~ 3650。デフォルト値:90。単位:日。値 3650 は、ログが永続的に保存されることを示します。
logtailConfig: // Logtail 構成。
inputType: plugin // データソースのタイプ。値 file はテキストログを指定します。値 plugin は stdout ログを指定します。
configName: test-stdout // Logtail 構成の名前。 metadata.name で指定されたリソース名と同じである必要があります。
inputDetail: // Logtail 構成の詳細。
plugin:
inputs:
- type: service_docker_stdout // stdout ログを収集します。
detail:
Stdout: true // stdout ログを収集するかどうかを指定します。
Stderr: true // stderr ログを収集するかどうかを指定します。
# 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
重要 ログが収集されたら、インデックスを作成する必要があります。その後、ログストア内のログをクエリおよび分析できます。詳細については、「インデックスの作成」をご参照ください。
ログ収集のテスト
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" // Elastic Container Instance ベースのポッドであることを示します。
spec:
containers:
- args:
- -c
- mkdir -p /log;while true; do echo hello world; date; echo hello sls >> /log/busy.log; sleep 1;done // コマンドを実行して、stdout とログファイルを継続的に表示します。
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 コンソール にログオンします。
プロジェクトの名前をクリックします。
コンテナーのログが保存されているログストアを見つけます。ログストアの名前をクリックして、ログを表示します。
テキストログの収集

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" // ログ収集を無効にします。
spec:
containers:
- args:
- -c
- mkdir -p /log;while true; do echo hello world; date; echo hello sls >> /log/busy.log; sleep 1;
done // コマンドを実行して、stdout とログファイルを継続的に表示します。
command:
- /bin/sh
image: registry.cn-shanghai.aliyuncs.com/eci_open/busybox:1.30 // イメージ名。
imagePullPolicy: Always
name: busybox // コンテナー名。