通过阿里云日志服务采集日志

​ 本文介绍在ASK集群中,如何通过阿里云日志服务SLS采集容器的标准输出和文件日志。

前提条件

背景信息

阿里云日志服务SLS(Log Service)是针对日志数据的一站式服务,您无需开发就能快捷完成日志数据采集、消费、投递以及查询分析等功能。更多信息,请参见日志服务简介

如果您使用的是阿里云ASK集群,支持通过SLS CRD和环境变量两种方式进行配置,将容器日志采集到阿里云日志服务SLS中。

方式一:通过SLS CRD配置

  1. 登录容器服务管理控制台

  2. 在集群中安装alibaba-log-controller。

    1. 在左侧导航栏,选择市场>应用目录

    2. 阿里云应用页签下,找到ack-sls-logtail应用,然后单击该应用。

    3. 配置参数,并选择集群进行安装。

      1. 选择要安装的集群和命名空间,输入发布名称。

      2. 单击参数页签,在下方yaml模板中填写AccessKey和AccessKeySecret。

      3. 单击创建

      ack-sls-logtail
    4. 查看安装结果。

      单击集群名称进入集群信息页面,在左侧导航栏选择应用>Helm,查看对应发布(默认发布名称为ack-sls-logtail-default)的状态是否为已部署

  3. 创建日志配置CRD。

    连接集群,参考yaml示例编写日志配置CRD的yaml配置文件(命名为log.yaml),然后执行命令创建日志配置CRD。

    采集的日志分为标准输出(包括错误输出)和文件日志两种:

    • 标准输出CRD yaml示例

      apiVersion: log.alibabacloud.com/v1alpha1      
      kind: AliyunLogConfig                         
      metadata:
        name: test-stdout      #资源名称,集群内唯一     
      spec:
        project: k8s-log-c326bc86****   #Project名称,可自定义,推荐使用集群ID命名
        logstore: test-stdout    #Logstore名称,如果不存在则自动创建                  
        shardCount: 2     #可选配置,Shard数量,默认为2,取值范围为1~10                         
        lifeCycle: 90  #可选配置,Logstore中日志的保留时间,默认为90天,取值范围为1~7300,7300天表示永久存储 
        logtailConfig:                      
          inputType: plugin       #采集的数据源类型,file表示文件日志,plugin表示标准输出                                
          configName: test-stdout         #采集配置的名称,与metadata.name持一致    
          inputDetail:
            plugin:
              inputs:
                - type: service_docker_stdout
                  detail:
                    Stdout: true
                    Stderr: true
      #              IncludeEnv:
      #                aliyun_logs_test-stdout: "stdout"
    • 文件日志CRD yaml示例

      apiVersion: log.alibabacloud.com/v1alpha1
      kind: AliyunLogConfig
      metadata:
        name: test-file   #资源名称,集群内唯一
      spec:
        project: k8s-log-c326bc86****   #Project名称,可自定义,推荐使用集群ID命名
        logstore: test-file      #Logstore名称,如果不存在则自动创建
        logtailConfig:
          inputType: file       #采集的数据源类型,file表示文件日志,plugin表示标准输出 
          configName: test-file  #采集配置的名称,与资源名metadata.name持一致  
          inputDetail:
            logType: common_reg_log        #对于分隔符类型的日志,logType可以设置为json_log
            logPath: /log/    #日志文件夹
            filePattern: "*.log"    #文件名, 支持通配符,例如log_*.log
            dockerFile: true  #采集容器内的文件,dockerFile设置为true
            #用作解析时间的key''
            #timeKey: 'time'
            #时间解析方式''
            #timeFormat: '%Y-%m-%dT%H:%M:%S'
            #避免不同采集配置中存在相同采集目录而导致冲突
            #dockerIncludeEnv:
            #  aliyun_logs_test-file: "/log/*.log"

    执行以下命令创建日志配置CRD。

    kubectl create -f log.yaml
    说明

    创建日志配置CRD后,您可以在日志服务控制台查看对应生成的日志库及logtail配置。如果后续需要更新配置,可以直接编辑CRD,系统将自动同步配置到日志服务SLS。

  4. 部署应用。

    完成日志配置CRD后,后续创建的业务Pod的日志将被采集到日志服务SLS中。

    以下为Pod yaml配置文件示例,可以实现通过while循环不断打印标准输出和日志文件。

    apiVersion: v1
    kind: Pod
    metadata:
      labels:
        app: sls
      name: eci-sls-demo
      namespace: default
    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: busybox:latest
        imagePullPolicy: Always
        name: sls
  5. 在日志服务控制台查看日志。

    在集群对应的Project中找到目标日志库,单击日志库名称即可查看日志。更多信息,请参见查看配置效果

方式二:通过环境变量配置

  1. 登录容器服务管理控制台

  2. 在左侧导航栏,单击集群

  3. 集群列表页面,找到要配置的集群,单击集群名称。

  4. 在集群详情页面的左侧导航栏,选择工作负载>无状态

  5. 新建或者修改Pod的yaml配置模板,设置环境变量来传入日志相关配置。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: alpine
      name: alpine
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: alpine
      template:
        metadata:
          labels:
            app: alpine
        spec:
          containers:
          - image: alpine
            imagePullPolicy: Always
            args:
            - ping
            - 127.0.0.1
            name: alpine
            env:
            #配置环境变量
            #配置Project,如果使用K8s集群默认的project,则可以不填
            - name: aliyun_logs_test-stdout_project
              value: k8s-log-xxx
            - name: aliyun_logs_test-file_project
              value: k8s-log-xxx
            #配置机器组,如果使用K8s集群默认的机器组,则可以不填
            - name: aliyun_logs_test-stdout_machinegroup
              value: k8s-group-app-alpine
            - name: aliyun_logs_test-file_machinegroup
              value: k8s-group-app-alpine
            #配置标准输出和错误输出的Logstore和路径
            - name: aliyun_logs_test-stdout
              value: stdout
            #将/log/*.log目录下的日志收集到名为aliyun_logs_test-file的Logstore
            - name: aliyun_logs_test-file
              value: /log/*.log
            #设置日志保留时间,只对单个Logstore生效
            - name: aliyun_logs_test-stdout_ttl
              value: "7"
            #设置日志分区数,只对单个Logstore生效
            - name: aliyun_logs_test-stdout_shard
              value: "2"

    在上述示例中,所有与日志配置相关的环境变量采用aliyun_logs_为前缀,其中环境变量aliyun_logs_test-stdout表示创建一个名为test-stdout的Logstore,将容器的标准输出采集到test-stdout这个Logstore中,采集路径为stdout。

  6. 单击创建

  7. 在日志服务控制台查看日志。

    在集群对应的Project中找到目标日志库,单击日志库名称即可查看日志。更多信息,请参见查看配置效果

查看配置效果

  1. 登录日志服务控制台

  2. 单击Projcect名称。

  3. 找到目标日志库,单击日志库名称查看日志。

    • 标准输出

      SLS1
    • 文件日志

      SLS2