Logtail は Kubernetes から Sidecar モードでログを収集し、ログ収集を必要とするサービス容器ごとに Sidecar 容器を作成できるため、マルチ容器の分離が容易になり、収集パフォーマンスが向上します。
現在、Kubernetes クラスタにインストールされているデフォルトのログコンポーネントは DaemonSet です。これは、O&M の操作を簡素化し、リソースの占有が少なく、容器の標準出力と容器ファイルの収集をサポートし、柔軟に構成できます。
ただし、DaemonSet モードでは、Logtail はノード上のすべての容器からログを収集する必要があります。 これはパフォーマンスのボトルネックにつながり、サービスログ間の完全な分離はできません。 この問題を解決するために、Logtail は Sidecar を提供します。これにより、Logtail はログ収集を必要とする各サービス容器に対して Sidecar 容器を作成できます。 このモードでは、マルチ容器間の分離が大幅に強化され、収集パフォーマンスが向上します。 大規模な Kubernetes クラスタ、および複数のサービスを提供する PaaS プラットフォームとして機能するクラスタには、Sidecar モードの使用をお勧めします。
機能
- Sidecar モードは、Kubernetes、オンプレミス ECS Kubernetes、および IDC のオンプレミス Kubernetes の容器サービスに適用できます。
- Sidecar モードでは、Logtail は Pod名、Pod IP アドレス、Pod ネームスペース、およびPod が属するノードの名前と IP アドレスを含む、Pod メタデータを収集できます。
- Sidecar モードでは、Logtail は CustomResourceDefinition(CRD)を介してプロジェクト、Logstores、インデックス、Logtail 構成、マシングループなどの Log Service リソースを自動的に作成できます。
- Sidecar モードは動的スケーリングもサポートします。 レプリカの数はいつでも調整でき、変更はすぐに有効になります。
コンセプト
前提条件
- Log Service を有効化しました。
まだ Log Service を有効にしていない場合は 、まず有効化します。
- CRD ベースの設定用にKubernetes のログ収集をインストールしました。
制限事項
- Logtail はログディレクトリをサービス容器と共有する必要があります。
- Sidecar モードは容器の標準出力の収集をサポートしません。
Sidecar 構成
apiVersion: batch/v1
kind: Job
metadata:
name: nginx-log-sidecar-demo
namespace: default
spec:
template:
metadata:
name: nginx-log-sidecar-demo
spec:
restartPolicy: Never
containers:
- name: nginx-log-demo
image: registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest
command: ["/bin/mock_log"]
args: ["--log-type=nginx", "--stdout=false", "--stderr=true", "--path=/var/log/nginx/access.log", "--total-count=1000000000", "--logs-per-sec=100"]
volumeMounts:
- name: nginx-log
mountPath: /var/log/nginx
##### logtail sidecar container
- name: logtail
# more info: https://cr.console.aliyun.com/repository/cn-hangzhou/log-service/logtail/detail
# this images is released for every region
image: registry.cn-hangzhou.aliyuncs.com/log-service/logtail:latest
livenessProbe:
exec:
command:
- /etc/init.d/ilogtaild
- status
initialDelaySeconds: 30
periodSeconds: 30
resources:
limits:
memory: 512Mi
requests:
cpu: 10m
memory: 30Mi
env:
##### base config
# user id
- name: "ALIYUN_LOGTAIL_USER_ID"
value: "${your_aliyun_user_id}"
# user defined id
- name: "ALIYUN_LOGTAIL_USER_DEFINED_ID"
value: "${your_machine_group_user_defined_id}"
# config file path in logtail's container
- name: "ALIYUN_LOGTAIL_CONFIG"
value: "/etc/ilogtail/conf/${your_region_config}/ilogtail_config.json"
##### env tags config
- name: "ALIYUN_LOG_ENV_TAGS"
value: "_pod_name_|_pod_ip_|_namespace_|_node_name_|_node_ip_"
- name: "_pod_name_"
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: "_pod_ip_"
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: "_namespace_"
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: "_node_name_"
valueFrom:
fieldRef:
fieldPath: spec.nodeName
- name: "_node_ip_"
valueFrom:
fieldRef:
fieldPath: status.hostIP
volumeMounts:
- name: nginx-log
mountPath: /var/log/nginx
##### share this volume
volumes:
- name: nginx-log
emptyDir: {}
構成 1:基本動作パラメータを設定します。
主なパラメータとその設定は次のとおりです。
##### base config
# user id
- name: "ALIYUN_LOGTAIL_USER_ID"
value: "${your_aliyun_user_id}"
# user defined id
- name: "ALIYUN_LOGTAIL_USER_DEFINED_ID"
value: "${your_machine_group_user_defined_id}"
# config file path in logtail's container
- name: "ALIYUN_LOGTAIL_CONFIG"
value: "/etc/ilogtail/conf/${your_region_config}/ilogtail_config.json"
パラメーター | 説明 |
---|---|
$ {your_region_config} |
このパラメータは、プロジェクトのリージョンとネットワークの種類によって決まります。 ネットワークの種類に応じて適切な値に設定します。 有効な値:
|
${your_aliyun_user_id} |
このパラメータは、ユーザー ID を指定します。これは、文字列形式の Alibaba Cloud アカウント ID に置き換える必要があります。 IDのクエリの方法については、 ユーザー ID の設定のセクション 2.1 をご参照ください。
注 このパラメータ値は、 Alibaba Cloud アカウント ID である必要があります。 RAM ユーザー ID の場合は無効になります。
|
${your_machine_group_user_defined_id} |
このパラメータは、クラスタ内のマシングループのカスタム ID を指定します。 ID は、Log Service がデプロイされているリージョン内で一意である必要があります。 詳細は、マシングループ識別 ID の作成を参照ください。 |
構成 2:マウントパスを設定します。
- Logtail とサービス容器は同じディレクトリにマウントする必要があります。
emptyDir
のマウント方法をお勧めします。
ログ収集設定
ログ収集は、CRD または Log Service コンソールを介して設定できます。 CRD ベースの設定は、プロジェクト、ログストア、インデックス、マシングループ、および Logtail 構成の自動作成をサポートし、Kubernetes と簡単に統合できます。 そのため、CRD ベースの設定をお勧めします。 Kubernetes のログ収集を初めて使用、またはデバッグするユーザーにとっても、コンソールベースの設定が簡単です。
CRD ベースの設定
- ログ収集が必要なプロジェクトの名前を指定しなければなりません。 そうしないと、ログが収集され、ログコンポーネントがデフォルトでインストールされているプロジェクトに送信されます。
- 設定を有効にするには、マシングループを指定する必要があります。 そうしないと、設定は DaemonSet が属するマシングループにデフォルトで適用されます。
- Sidecar モードはファイル収集のみをサポートします、ファイル収集している間に
dockerFile
を false に設定する必要があります。
コンソールベースの設定
- マシングループの構成。
Log Service コンソールで、Pod IP アドレスの変更に動的に適応するために、ID がカスタム ID に設定された Logtail マシングループを作成します。 そうするには、次の手順を実行します:
- Log Service を有効にして、プロジェクトとログストアを作成します。 詳細は、準備をご参照ください。
- マシングループリストページで、 マシングループの作成をクリックします。
- ID をカスタム ID
ALIYUN_LOGTAIL_USER_DEFINED_ID
に設定します。
- 収集モードの設定。
対象のファイルの収集詳細を設定します。 現在、シンプルモード、Nginx アクセスモード、区切り文字モード、JSON モード、通常モードなど、さまざまなモードがサポートされています。 詳細は、テキストファイルの収集次をご参照ください。
次の図にこの例の設定を示します。注 Docker ファイルを無効にする必要があります。
例
- Kubernetes クラスタは IDC のオンプレミスクラスタであり、Log Service がデプロイされているリージョンは中国(杭州)です。 ログはインターネットから収集されます。
- 次の例では、マウントオブジェクトは
nginx-log
で、マウントタイプはemptyDir
です。 これらはそれぞれ nginx-log-demo および logtail 容器内の /var/log/nginx ディレクトリにマウントされています。 - アクセスログは /var/log/nginx/access.log で、保存先ログストアは
nginx-access
です。 - エラーログは /var/log/nginx/error.log で、保存先ログストアは
nginx-error
です。
-
Sidecar 設定:
apiVersion: batch/v1 kind: Job metadata: name: nginx-log-sidecar-demo namespace: default spec: template: metadata: name: nginx-log-sidecar-demo spec: restartPolicy: Never containers: - name: nginx-log-demo image: registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest command: ["/bin/mock_log"] args: ["--log-type=nginx", "--stdout=false", "--stderr=true", "--path=/var/log/nginx/access.log", "--total-count=1000000000", "--logs-per-sec=100"] volumeMounts: - name: nginx-log mountPath: /var/log/nginx ##### logtail sidecar container - name: logtail # more info: https://cr.console.aliyun.com/repository/cn-hangzhou/log-service/logtail/detail # this images is released for every region image: registry.cn-hangzhou.aliyuncs.com/log-service/logtail:latest livenessProbe: exec: command: - /etc/init.d/ilogtaild - status initialDelaySeconds: 30 periodSeconds: 30 env: ##### base config # user id - name: "ALIYUN_LOGTAIL_USER_ID" value: "xxxxxxxxxx" # user defined id - name: "ALIYUN_LOGTAIL_USER_DEFINED_ID" value: "nginx-log-sidecar" # config file path in logtail's container - name: "ALIYUN_LOGTAIL_CONFIG" value: "/etc/ilogtail/conf/cn-hangzhou-internet/ilogtail_config.json" ##### env tags config - name: "ALIYUN_LOG_ENV_TAGS" value: "_pod_name_|_pod_ip_|_namespace_|_node_name_|_node_ip_" - name: "_pod_name_" valueFrom: fieldRef: fieldPath: metadata.name - name: "_pod_ip_" valueFrom: fieldRef: fieldPath: status.podIP - name: "_namespace_" valueFrom: fieldRef: fieldPath: metadata.namespace - name: "_node_name_" valueFrom: fieldRef: fieldPath: spec.nodeName - name: "_node_ip_" valueFrom: fieldRef: fieldPath: status.hostIP volumeMounts: - name: nginx-log mountPath: /var/log/nginx ##### share this volume volumes: - name: nginx-log emptyDir: {}
- CRD 設定:
# config for access log apiVersion: log.alibabacloud.com/v1alpha1 kind: AliyunLogConfig metadata: # your config name, must be unique in you k8s cluster name: nginx-log-access-example spec: # project name to upload log project: k8s-nginx-sidecar-demo # logstore name to upload log logstore: nginx-access # machine group list to apply config, should be same with your sidecar' [ALIYUN_LOGTAIL_USER_DEFINED_ID] machineGroups: - nginx-log-sidecar # logtail config detail logtailConfig: # log file's input type is 'file' inputType: file # logtail config name, should be same with [metadata.name] configName: nginx-log-access-example inputDetail: # Simple logs with logType set to common_reg_log logType: common_reg_log # Log folder logPath: /var/log/nginx # File name with wildcards supported, for example, log_*.log filePattern: access.log # Sidecar mode with dockerFile set to false dockerFile: false # Line start regular expression, which is set to .* is the log contains only a line logBeginRegex: '. *' # Regular expression for parsing regex: '(\S+)\s(\S+)\s\S+\s\S+\s"(\S+)\s(\S+)\s+([^"]+)"\s+(\S+)\s(\S+)\s(\d+)\s(\d+)\s(\S+)\s"([^"]+)"\s. *' # List of the extracted keys key : ["time", "ip", "method", "url", "protocol", "latency", "payload", "status", "response-size",ser-agent"] # config for error log
# config for error log apiVersion: log.alibabacloud.com/v1alpha1 kind: AliyunLogConfig metadata: # your config name, must be unique in you k8s cluster name: nginx-log-error-example spec: # project name to upload log project: k8s-nginx-sidecar-demo # logstore name to upload log logstore: nginx-error # machine group list to apply config, should be same with your sidecar' [ALIYUN_LOGTAIL_USER_DEFINED_ID] machineGroups: - nginx-log-sidecar # logtail config detail logtailConfig: # log file's input type is 'file' inputType: file # logtail config name, should be same with [metadata.name] configName: nginx-log-error-example inputDetail: # Simple logs with logType set to common_reg_log logType: common_reg_log # Log folder logPath: /var/log/nginx # File name with wildcards supported, for example, log_*.log filePattern: error.log # Sidecar mode with dockerFile set to false dockerFile: false
- ログ収集エラーの表示
上記の設定が Kubernetes クラスタに適用されると、Logtail 容器は対応するプロジェクト、ログストア、マシングループ、および Logtail 構成を自動的に作成し、収集されたログを Log Service に自動的に送信します。 Log Service コンソールにログインして詳細を表示できます。