通过Sidecar-控制台方式采集容器文本日志
本文介绍如何安装Sidecar及使用控制台方式创建Logtail配置,完成容器文本日志的采集。
前提条件
已创建Project和Logstore。具体操作,请参见创建Project、创建Logstore。
目标容器持续产生日志。
重要Logtail只采集增量日志。如果下发Logtail配置后,日志文件无更新,则Logtail不会采集该文件中的日志。更多信息,请参见读取文件。
背景信息
通过Sidecar模式采集日志,依赖于Logtail容器和业务容器共享的日志目录。业务容器将日志写入到共享目录中,Logtail通过监控共享目录中日志文件的变化并采集日志。更多信息,请参见Sidecar日志采集介绍和Sidecar模式示例。
步骤一:安装Sidecar
登录Kubernetes集群。
创建一个YAML文件。
sidecar.yaml为文件名,请根据实际情况替换。
vim sidecar.yaml
在YAML文件输入如下脚本,并根据实际情况设置其中的参数。
重要请确保配置文件中的env中的TZ(Time Zone)配置正确,否则原始日志与处理日志的时区不一致,可能会导致采集到的日志写入过去或未来的情况。例如是中国大陆,您可以设置时区为Asia/Shanghai。
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/sh", "-c"] # 主业务进程等待Logtail开始采集后启动,防止开头日志丢失。使用/tasksite/cornerstone接受通知。 # 主业务进程退出后,通知采集容器退出,使用/tasksite/tombstone发送通知。 args: - until [[ -f /tasksite/cornerstone ]]; do sleep 1; done; /bin/mock_log --log-type=nginx --stdout=false --stderr=true --path=/var/log/nginx/access.log --total-count=100 --logs-per-sec=100; retcode=$?; touch /tasksite/tombstone; exit $retcode resources: limits: cpu: 500m memory: 512Mi requests: cpu: 10m memory: 30Mi volumeMounts: - name: nginx-log mountPath: /var/log/nginx - mountPath: /tasksite name: tasksite # Logtail sidecar容器 - name: logtail # 新的镜像版本,请参见https://cr.console.aliyun.com/repository/cn-hangzhou/log-service/logtail/images。 # 请按业务需求修改地址。 image: registry.cn-hangzhou.aliyuncs.com/log-service/logtail:v1.5.1.0-aliyun command: ["/bin/sh", "-c"] # 第一个`sleep 10`等待Logtail开始采集。开始采集前需要先从服务器拉取Logtail配置。 # 第二个`sleep 10`等待Logtail完成采集,防止结尾日志丢失。完成采集时需先确保已将所有数据发送给服务器。 args: - /etc/init.d/ilogtaild start; sleep 10; touch /tasksite/cornerstone; until [[ -f /tasksite/tombstone ]]; do sleep 1; done; sleep 10; /etc/init.d/ilogtaild stop; livenessProbe: exec: command: - /etc/init.d/ilogtaild - status initialDelaySeconds: 30 periodSeconds: 30 resources: limits: cpu: 500m 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 - mountPath: /tasksite name: tasksite ##### share this volume volumes: - name: nginx-log emptyDir: {} - name: tasksite emptyDir: medium: Memory
在配置脚本中找到如下内容,完成基础配置。
##### 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_aliyun_user_id}
设置为您的阿里云账号ID。更多信息,请参见步骤一:获取日志服务所在的阿里云账号(主账号)ID。
${your_machine_group_user_defined_id}
自定义设置机器组的自定义标识,例如nginx-log-sidecar。
重要请确保该标识在您的Project所在地域内唯一。
${your_region_config}
请根据日志服务Project所在地域和访问的网络类型填写。其中,地域信息请参见安装Logtail(Linux系统)。
如果使用公网采集日志,格式为
region-internet
,例如华东 1(杭州)为cn-hangzhou-internet。如果使用阿里云内网采集日志,格式为
region
。例如华东 1(杭州)为cn-hangzhou。
在配置脚本中找到如下内容,设置挂载路径。
说明建议使用emptyDir挂载方式。
volumeMounts: - name: nginx-log mountPath: /var/log/nginx ##### share this volume volumes: - name: nginx-log emptyDir: {}
参数
说明
name
自定义设置卷的名称。
重要volumeMounts节点下的name参数与volumes节点下的name参数需设置为一致,即确保Logtail容器和业务容器挂载相同的卷上。
mountPath
设置挂载路径,即容器文本日志所在文件的路径。
在配置脚本中找到如下内容,设置延迟停止采集的时间。
通常情况下,延迟停止采集的时间为10秒,即Logtail容器在接收到外部停止信号后会等待10秒再退出,防止有部分数据没有采集完毕。
command: - sh - -c - /usr/local/ilogtail/run_logtail.sh 10
执行如下命令使sidecar.yaml文件配置生效。
sidecar.yaml为文件名,请根据实际情况替换。
kubectl apply -f sidecar.yaml
步骤二:创建机器组
登录日志服务控制台。
在Project列表中,单击目标Project。
在左侧导航栏中,选择 。
在机器组列表中,选择 。
在创建机器组面板中,配置如下信息,然后单击确定。
参数
说明
名称
机器组名称。
重要创建后,不支持修改机器组名称,请谨慎填写。
机器组标识
选择用户自定义标识。
机器组Topic
机器组Topic用于区分不同服务器产生的日志数据。更多信息,请参见日志主题。
用户自定义标识
配置为您在安装Sidecar时设置的用户自定义标识,即需与您在步骤一:安装Sidecar中设置的${your_machine_group_user_defined_id}的值一致,例如nginx-log-sidecar。
步骤三:创建Logtail配置
登录日志服务控制台。
在接入数据区域,单击分隔符-文本日志。
本文以分隔符模式为例,其他采集模式请参见采集模式。
选择目标Project和Logstore,单击下一步。
单击使用现有机器组。
选中目标机器组,将该机器组从源机器组移动到应用机器组,单击下一步。
该机器组为您在步骤二:创建机器组中创建的机器组。
重要如果创建机器组后立刻应用,可能因为连接未生效,导致心跳为FAIL,您可单击自动重试。如果还未解决,请参见Logtail机器组无心跳进行排查。
创建Logtail配置,单击下一步。
- 预览数据及创建索引,然后单击下一步。日志服务默认开启全文索引。您也可以根据采集到的日志,手动创建字段索引,或者单击自动生成索引,日志服务将自动生成字段索引。更多信息,请参见创建索引。重要 如果您要查询和分析日志,那么全文索引和字段索引必须至少启用一种。同时启用时,以字段索引为准。
- 单击查询日志,系统将跳转至Logstore查询分析页面。您需要等待1分钟左右,待索引生效后,才能在原始日志页签中,查看已采集到的日志。更多信息,请参见查询和分析日志。