全部产品

ASK中采集日志到日志服务

前提条件:

通过日志服务采集ECI日志

方法一 SLS CRD(推荐):

1、创建CRD controller

首先需要在ASK中安装SLS CRD controller,如下图选择 ack-sls-logtail。

sls controller替换参数,AccessKeyId和AccessKeySecret。

replace key

点击创建按钮,部署完成后,通过命令行查看CRD controller已经创建成功。

getcrd

2、创建日志采集CRD

日志采集主要分为标准输出(包括错误输出)以及文件采集两种方式。下面是一个日志文件采集的CRD Yaml模板。

apiVersion: log.alibabacloud.com/v1alpha1
kind: AliyunLogConfig
metadata:
  # 配置名称
  name: test-file
spec:
  # logstore名称
  logstore: test-file     
  # 项目名称,用户可以自定义,推荐使用集群ID
  project: k8s-log-集群ID  
  logtailConfig:
    # 日志类型为文件
    inputType: file
    # 需要好上面 [metadata.name]保持一致
    configName: test-file
    inputDetail:
      # 对于分隔符类型的日志,logType设置为json_log
      logType: common_reg_log
      # 日志文件夹
      logPath: /log/
      # 文件名, 支持通配符,例如log_*.log
      filePattern: "*.log"
      # 用作解析时间的key,如无需求则填为''
      # timeKey: 'time'
      # 时间解析方式,如无需求则填为''
      #timeFormat: '%Y-%m-%dT%H:%M:%S'
      # 采集容器内的文件,dockerFile设置为true
      dockerFile: true
      # 为了避免不同采集配置中存在相同采集目录冲突
      #dockerIncludeEnv:
      #  aliyun_logs_test-file: "/log/*.log"

如果是采集标准输出的日志,请参考如下配置

apiVersion: log.alibabacloud.com/v1alpha1      ## 默认值,无需修改
kind: AliyunLogConfig                          ## 默认值,无需修改
metadata:
  name: test-stdout                  ## 资源名,在集群内唯一
spec:
  # Project名称
  project: k8s-log-集群ID       
  # Logstore名称,不存在时自动创建
  logstore: test-stdout    
 # [可选]Shard数量,默认为2,支持1-10                    
  shardCount: 2    
  [可选]Logstore中数据的存储时间,默认为90,支持1-7300,7300天为永久存储                            
  lifeCycle: 90                                
  logtailConfig:      
    # 采集的数据源类型,file(文本文件)或plugin(标准输出)                        
    inputType: plugin       
    # 采集配置的名称,与资源名[metadata.name]持一致                   
    configName: test-stdout         
    inputDetail:
      plugin:
        inputs:
          - type: service_docker_stdout
            detail:
              Stdout: true
              Stderr: true
#              IncludeEnv:
#                aliyun_logs_test-stdout: "stdout"

通过“kubectl create -f”创建CRD后,便可以在SLS控制台查看日志配置。如果后续采集配置需要更新,譬如更新采集,便可以直接编辑CRD,后台的CRD controller会自动同步配置到SLS。

config

3、部署应用

完成SLS配置后,创建业务Pod的日志就可以被正常采集了。下面是的Pod模板通过一个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

之后便可以通过SLS控制台查看采集的日志。

方法二 ENV

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

2、在选择的Serverless集群菜单下,单击左侧导航栏中的工作负载。

之后我们可以使用镜像或者模版两种方式设置pod的环境变量,对于已经创建好的Pod,可以采用更新模版的方式。

3、新建并部署以下YAML模板。采集配置通过ENV来暴露。

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集群默认的project下的默认机器组可以不填 ###########
        - name: aliyun_logs_test-stdout_machinegroup
          value: k8s-group-app-alpine
        - name: aliyun_logs_test-file_machinegroup
          value: k8s-group-app-alpine
        ######### 设置标准输出和错误输出的logstore test-stdout###########
        - name: aliyun_logs_test-stdout
          value: stdout
        ######### 将/log/*.log目录下的日志收集到logstore test-file###########
        - 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 这个 env 表示创建一个 Logstore 名字为 test-stdout,日志采集路径为 stdout 的配置,从而将容器的标准输出采集到 test-stdout 这个 Logstore 中。

4、当YAML编写完成后,单击 创建 ,即可将相应的配置交由Kubernetes集群执行。访问日志服务控制台,可以查看已经配置的收集日志。

上面两种配置方式都可以完成ASK日志配置,其中,标准输出收集效果如下:

sls-stdout

文件收集效果如下:

sls-file