本文介绍在ACK One注册集群中,如何通过SLS CRD来配置日志采集,实现通过阿里云日志服务SLS自动采集ECI容器日志。
背景信息
阿里云日志服务SLS(Log Service)是针对日志数据的一站式服务,您无需开发就能快捷完成日志数据采集、消费、投递以及查询分析等功能。更多信息,请参见日志服务简介。
前提条件
已开通日志服务。登录日志服务控制台时,如果没有开通日志服务,将收到相关提示,您可以根据页面提示开通。
注意事项
通过SLS CRD开启日志采集仅对后续创建的ECI Pod生效。如果想要采集存量Pod的日志,需要对存量Pod进行一次滚动发布。
配置日志采集
在集群内部署logtail-ds组件后,您可以通过日志采集配置CRD(AliyunLogConfig CRD)来配置日志采集。
部署logtail-ds组件
- 登录容器服务管理控制台,在左侧导航栏选择集群列表。 
- 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择。 
- 单击日志与监控页签,找到logtail-ds卡片,然后单击安装。 
- 在弹出的对话框中,单击确定。 
创建Logtail采集配置
- 编写日志采集配置CRD的YAML配置文件。 重要- 创建日志采集配置CRD后,您可以在日志服务控制台查看生成的日志库及logtail配置。通过CRD方式创建的配置,在控制台上对其修改不会同步到CRD中。如果后续需要更新配置,请直接修改CRD资源,不要在控制台操作,避免导致配置不一致。 
- 创建日志采集配置CRD。 - 命令示例如下。Logtail配置生效后,Logtail开始采集各个容器上的标准输出或文本日志,并发送到日志服务中。 - kubectl apply -f log-file.yaml kubectl apply -f log-stdout.yaml重要- 采集到日志后,您需要先创建索引,才能在Logstore中查询和分析日志。具体操作,请参见创建索引。 
测试日志采集
创建日志采集配置CRD后,日志服务会自动采集后续创建的Pod的日志。您可以创建以下应用来测试日志采集效果。
- 创建应用。 - 以Deployment为例,YAML内容示例如下,示例中容器启动后会执行相关命令,不断打印标准输出和日志文件。 - 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" spec: containers: - args: - -c - mkdir -p /log;while true; do echo hello world; date; echo hello sls >> /log/busy.log; sleep 1;done command: - /bin/sh image: registry-vpc.cn-beijing.aliyuncs.com/eci_open/busybox:1.30 imagePullPolicy: Always name: busybox- 将以上YAML保存为test-sls-crd.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
- 查看日志。 - 登录日志服务控制台。 
- 单击目标Project名称。 
- 找到目标日志库,单击日志库名称查看日志。 - 文本日志 - 标准输出 
 
关闭日志采集
创建日志采集配置CRD后,系统会自动采集所有符合条件的Pod的日志。对于一些不想要采集日志的Pod,您可以配置Annotation(k8s.aliyun.com/eci-sls-enable: "false")来关闭日志采集,避免系统自动创建Logtail而造成资源浪费。
- Annotation请添加在Pod的metadata下,例如:创建Deployment时,Annotation需添加在spec>template>metadata下。 
- 仅支持在创建ECI Pod时添加ECI相关Annotation来生效ECI功能,更新ECI Pod时添加或者修改ECI相关Annotation均不会生效。 
配置示例如下:
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
        command:
        - /bin/sh
        image: registry.cn-shanghai.aliyuncs.com/eci_open/busybox:1.30
        imagePullPolicy: Always
        name: busybox