本文介绍如何安装Sidecar及使用CRD方式创建Logtail配置,完成容器文本日志的采集。
前提条件
背景信息
通过Sidecar模式采集日志,依赖于Logtail容器和业务容器共享的日志目录。业务容器将日志写入到共享目录中,Logtail通过监控共享目录中日志文件的变化并采集日志。更多信息,请参见Sidecar日志采集介绍和Sidecar模式示例。
步骤一:安装Sidecar
步骤二:创建Logtail采集配置
只需要定义AliyunLogConfig CRD即可创建Logtail采集配置。创建完成后,系统自动应用该Logtail采集配置。如果您要删除Logtail采集配置只需删除对应的CRD资源即可。
配置示例(单目录)
通过Sidecar-CRD方式采集本地IDC上自建Kubernetes集群中nginx-log-demo容器的文本日志(包括Nginx访问日志和Nginx错误日志)。基本信息如下:
- 日志服务所在地域为华东1(杭州),需要通过公网采集。
- 待挂载的卷的名称为nginx-log,挂载方式为emptyDir,将nginx-log卷分别挂载到nginx-log-demo容器和Logtail容器的/var/log/nginx目录下。
- Nginx访问日志所在文件的路径为/var/log/nginx/access.log ,用于存储Nginx访问日志的目标Logstore为nginx-access。
- Nginx错误日志所在文件的路径为/var/log/nginx/error.log ,用于存储Nginx错误日志的目标Logstore为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 # when recevie sigterm, logtail will delay 10 seconds and then stop command: - sh - -c - /usr/local/ilogtail/run_logtail.sh 10 livenessProbe: exec: command: - /etc/init.d/ilogtaild - status initialDelaySeconds: 30 periodSeconds: 30 env: ##### base config # user id - name: "ALIYUN_LOGTAIL_USER_ID" value: "1023****3423" # 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示例
创建两个Logtail采集配置用于采集Nginx访问日志和Nginx错误日志。
- 采集Nginx访问日志
注意 Sidecar模式下,需将dockerFile参数设置为false。
apiVersion: log.alibabacloud.com/v1alpha1 kind: AliyunLogConfig metadata: # 资源名称,在您的K8s集群中必须唯一。 name: nginx-log-access-example spec: # 设置Project名称。默认值为安装Logtail时所设置的Project。 project: k8s-nginx-sidecar-demo # 设置Logstore名称。如果您所指定的Logstore不存在,日志服务会自动创建。 logstore: nginx-access # 设置机器组名称,需与您在安装Sidecar时设置的${your_machine_group_user_defined_id}的值一致。 machineGroups: - nginx-log-sidecar # 设置Logtail采集配置。 logtailConfig: # 设置采集的数据源类型,通过Sidecar-CRD方式只支持采集文本日志,即需要设置为file。 inputType: file # 设置Logtail采集配置的名称,必须与资源名(metadata.name)相同。 configName: nginx-log-access-example inputDetail: # 指定通过完整正则模式采集容器文本日志。 logType: common_reg_log # 设置日志文件所在路径。 logPath: /var/log/nginx # 设置日志文件的名称。支持通配符星号(*)和半角问号(?),例如log_*.log。 filePattern: access.log # sidecar模式下,需设置dockerFile为false。 dockerFile: false # 设置用于匹配日志行首的行首正则表达式。如果为单行模式,设置成'.*'。 logBeginRegex: '.*' # 设置正则表达式,用于提取日志内容。请根据实际情况设置。 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.*' # 设置提取的字段列表。 key : ["time", "ip", "method", "url", "protocol", "latency", "payload", "status", "response-size",user-agent"]
- 采集Nginx错误日志
注意 Sidecar模式下,需将dockerFile参数设置为false。
# config for error log apiVersion: log.alibabacloud.com/v1alpha1 kind: AliyunLogConfig metadata: # 设置资源名,在当前Kubernetes集群内唯一。 name: nginx-log-error-example spec: # 设置Project名称。默认值为安装Logtail时所设置的Project。 project: k8s-nginx-sidecar-demo # 设置Logstore名称。如果您所指定的Logstore不存在,日志服务会自动创建。 logstore: nginx-error # 设置机器组名称,需与您在安装Sidecar时设置的${your_machine_group_user_defined_id}的值一致。 machineGroups: - nginx-log-sidecar # 设置Logtail采集配置。 logtailConfig: # 设置采集的数据源类型,通过Sidecar-CRD方式只支持采集文本日志,即需要设置为file。 inputType: file # 设置Logtail配置名称,必须与资源名(metadata.name)相同。 configName: nginx-log-error-example inputDetail: # 指定通过完整正则模式采集容器文本日志。 logType: common_reg_log # 设置日志文件的路径。 logPath: /var/log/nginx # 设置日志文件的名称。支持通配符星号(*)和半角问号(?),例如log_*.log。 filePattern: error.log # sidecar模式下,需设置dockerFile为false。 dockerFile: false
- 采集Nginx访问日志
配置示例(多目录)
通过Sidecar-CRD方式采集本地IDC上自建Kubernetes集群中nginx-log-demo容器的文本日志(存储在不同目录下的Nginx访问日志)。基本信息如下:
- 日志服务所在地域为华东1(杭州),需要通过公网采集。
- 待挂载的卷的名称为nginx-log和nginx-logs,挂载方式为emptyDir。将nginx-log卷分别挂载到nginx-log-demo容器和Logtail容器的/var/log/nginx目录下。将nginx-logs卷分别挂载到nginx-log-demo容器和Logtail容器的/var/log/nginxs目录下。
- 一个日志文件的路径为/var/log/nginx/access.log ,另一个日志文件的路径为/var/log/nginxs/access.log。
- 用于存储Nginx访问日志的目标Logstore为nginx-access。
- 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"] lifecycle: volumeMounts: - name: nginx-log mountPath: /var/log/nginx - name: nginx-logs mountPath: /var/log/nginxs ##### 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 # when recevie sigterm, logtail will delay 10 seconds and then stop lifecycle: command: - sh - -c - /usr/local/ilogtail/run_logtail.sh 10 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: "1023****3423" # 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 - name: nginx-logs mountPath: /var/log/nginxs ##### share this volume volumes: - name: nginx-log emptyDir: {} - name: nginx-logs emptyDir: {}
- CRD示例
创建两个Logtail采集配置用于采集不同目录下的Nginx访问日志。
- 采集/var/log/nginx/access.log下的Nginx访问日志
注意 Sidecar模式下,需将dockerFile参数设置为false。
apiVersion: log.alibabacloud.com/v1alpha1 kind: AliyunLogConfig metadata: # 设置资源名,在当前Kubernetes集群内唯一。 name: nginx-log-access-example spec: # 设置Project名称。默认值为安装Logtail时所设置的Project。 project: k8s-nginx-sidecar-demo # 设置Logstore名称。如果您所指定的Logstore不存在,日志服务会自动创建。 logstore: nginx-access # 设置机器组名称,需与您在安装Sidecar时设置的${your_machine_group_user_defined_id}的值一致。 machineGroups: - nginx-log-sidecar # 设置Logtail采集配置。 logtailConfig: # 设置采集的数据源类型,通过Sidecar-CRD方式只支持采集文本日志,即需要设置为file。 inputType: file # 设置Logtail采集配置的名称,必须与资源名(metadata.name)相同。 configName: nginx-log-access-example inputDetail: # 指定通过完整正则模式采集文本日志。 logType: common_reg_log # 设置日志文件的路径。 logPath: /var/log/nginx # 设置日志文件的名称。支持通配符星号(*)和半角问号(?),例如log_*.log。 filePattern: access.log # sidecar模式下,需设置dockerFile为false。 dockerFile: false # 设置用于匹配日志行首的行首正则表达式。如果为单行模式,设置成 '.*'。 logBeginRegex: '.*' # 设置正则表达式,用于提取日志内容。 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.*' # 提取的字段列表。 key : ["time", "ip", "method", "url", "protocol", "latency", "payload", "status", "response-size",user-agent"]
- 采集/var/log/nginxs/access.log下的Nginx访问日志
注意 Sidecar模式下,需将dockerFile参数设置为false。
apiVersion: log.alibabacloud.com/v1alpha1 kind: AliyunLogConfig metadata: # 设置资源名,在当前Kubernetes集群内唯一。 name: nginxs-log-access-example spec: # 设置Project名称。默认值为安装Logtail时所设置的Project。 project: k8s-nginx-sidecar-demo # 设置Logstore名称。如果您所指定的Logstore不存在,日志服务会自动创建。 logstore: nginxs-access # 设置机器组名称,需与您在安装Sidecar时设置的${your_machine_group_user_defined_id}的值一致。 machineGroups: - nginx-log-sidecar # Logtail采集配置。 logtailConfig: # 设置采集的数据源类型,通过Sidecar-CRD方式只支持采集文本日志,即需要设置为file。 inputType: file # 设置Logtail采集配置的名称,必须与资源名(metadata.name)相同。 configName: nginxs-log-access-example inputDetail: # 指定通过完整正则模式采集文本日志。 logType: common_reg_log # 设置日志文件的路径。 logPath: /var/log/nginxs # 设置日志文件的名称。支持通配符星号(*)和半角问号(?),例如log_*.log。 filePattern: access.log # 在sidecar模式下,需设置dockerFile为false。 dockerFile: false # 设置用于匹配日志行首的行首正则表达式。如果为单行模式,设置成 .*。 logBeginRegex: '.*' # 设置正则表达式,用于提取日志内容。 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.*' # 提取的字段列表。 key : ["time", "ip", "method", "url", "protocol", "latency", "payload", "status", "response-size",user-agent"] # config for error log
- 采集/var/log/nginx/access.log下的Nginx访问日志