本文介绍如何安装Sidecar及使用控制台方式创建Logtail配置,完成容器文本日志的采集。

前提条件

  • 已安装Logtail组件。具体操作,请参见安装Logtail组件(Kubernetes集群)
  • 在您安装Logtail组件时所使用的Project中已完成Logstore创建。具体操作,请参见创建Logstore
  • 目标容器持续产生日志。
    重要 Logtail只采集增量日志。如果下发Logtail配置后,日志文件无更新,则Logtail不会采集该文件中的日志。更多信息,请参见读取文件

背景信息

通过Sidecar模式采集日志,依赖于Logtail容器和业务容器共享的日志目录。业务容器将日志写入到共享目录中,Logtail通过监控共享目录中日志文件的变化并采集日志。更多信息,请参见Sidecar日志采集介绍Sidecar模式示例

步骤一:安装Sidecar

  1. 登录Kubernetes集群。
  2. 创建一个YAML文件。

    sidecar.yaml为文件名,请根据实际情况替换。

    vim sidecar.yaml
  3. 在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
              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
                            
    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_aliyun_user_id}设置为您的阿里云账号ID。更多信息,请参见步骤一:获取日志服务所在的阿里云账号(主账号)ID
      ${your_machine_group_user_defined_id}自定义设置机器组的自定义标识,例如nginx-log-sidecar。
      重要 请确保该标识在您的Project所在地域内唯一。
      ${your_region_config}请根据日志服务Project所在地域和访问的网络类型填写。其中,地域信息请参见Logtail安装参数
      • 如果使用公网采集日志,格式为region-internet,例如华东 1(杭州)cn-hangzhou-internet
      • 如果使用阿里云内网采集日志,格式为region。例如华东 1(杭州)cn-hangzhou
    2. 在配置脚本中找到如下内容,设置挂载路径。
      说明 建议使用emptyDir挂载方式。
      volumeMounts:
      - name: nginx-log
        mountPath: /var/log/nginx
        ##### share this volume
      volumes:
      - name: nginx-log
        emptyDir: {}
      参数说明
      name自定义设置卷的名称。
      重要 volumeMounts节点下的name参数与volumes节点下的name参数需设置为一致,即确保Logtail容器和业务容器挂载相同的卷上。
      mountPath设置挂载路径,即容器文本日志所在文件的路径。
    3. 在配置脚本中找到如下内容,设置延迟停止采集的时间。
      通常情况下,延迟停止采集的时间为10秒,即Logtail容器在接收到外部停止信号后会等待10秒再退出,防止有部分数据没有采集完毕。
      command:        
      - sh        
      - -c        
      - /usr/local/ilogtail/run_logtail.sh 10
  4. 执行如下命令使sidecar.yaml文件配置生效。

    sidecar.yaml为文件名,请根据实际情况替换。

    kubectl apply -f sidecar.yaml

步骤二:创建机器组

  1. 登录日志服务控制台
  2. 在Project列表中,单击您在安装Logtail组件时所使用的Project。
  3. 在左侧导航栏中,选择资源 > 机器组
  4. 机器组列表中,选择机器组图标 > 创建
  5. 创建机器组面板中,配置如下信息,然后单击确定
    参数说明
    名称机器组名称。
    重要 创建后,不支持修改机器组名称,请谨慎填写。
    机器组标识选择用户自定义标识
    机器组Topic机器组Topic用于区分不同服务器产生的日志数据。更多信息,请参见日志主题
    用户自定义标识配置为您在安装Sidecar时设置的用户自定义标识,即需与您在步骤一:安装Sidecar中设置的${your_machine_group_user_defined_id}的值一致,例如nginx-log-sidecar。

步骤三:创建Logtail配置

  1. 登录日志服务控制台
  2. 接入数据区域,单击分隔符-文本日志
    本文以分隔符模式为例,其他采集模式请参见采集模式
  3. 选择目标Project和Logstore,单击下一步
    选择您在安装Logtail组件时所使用的Project,Logstore为您自定义创建的Logstore。
  4. 单击使用现有机器组
  5. 选中目标机器组,将该机器组从源机器组移动到应用机器组,单击下一步

    该机器组为您在步骤二:创建机器组中创建的机器组。

    重要 如果创建机器组后立刻应用,可能因为连接未生效,导致心跳为FAIL,您可单击自动重试。如果还未解决,请参见Logtail机器组无心跳进行排查。
  6. 创建Logtail配置,单击下一步
    目前支持通过极简模式、Nginx模式、分隔符模式、JSON模式、完整正则模式采集日志。具体操作,请参见采集文本日志
    重要 sidecar模式下,请勿打开是否为Docker文件开关。
    配置采集方式
  7. 预览数据及创建索引,然后单击下一步
    日志服务默认开启全文索引。您也可以根据采集到的日志,手动创建字段索引,或者单击自动生成索引,日志服务将自动生成字段索引。更多信息,请参见创建索引
    重要 如果您要查询和分析日志,那么全文索引和字段索引必须至少启用一种。同时启用时,以字段索引为准。
  8. 单击查询日志,系统将跳转至Logstore查询分析页面。
    您需要等待1分钟左右,待索引生效后,才能在原始日志页签中,查看已采集到的日志。更多信息,请参见查询和分析日志

问题排查

当您使用Logtail采集容器(标准容器、Kubernetes)日志遇到异常情况时,您可以参见如下内容进行排查。