本文将介绍如何在Serverless Kubernetes集群中将业务容器的标准输出和日志文件收集到阿里云日志服务。

前提条件

您已经创建好一个Serverless Kubernetes集群。请参见 创建Serverless Kubernetes集群

使用YAML模版来部署示例

  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏中,单击Serverless集群
  3. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
  4. 在集群管理页左侧导航栏中,单击工作负载
  5. 单击无状态页签,然后单击页面右上角的使用模板创建
  6. 新建并部署以下YAML模板。

    YAML模板的语法同Kubernetes语法,采集配置通过ENV来暴露,为了收集文件的日志,也需要创建对应的volumeMounts和volumes。以下是一个简单的Deployment示例。

    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.XX.XX
            name: alpine
            env:
            ######### 配置环境变量 ###########
            ######### 配置project,如果使用k8s集群默认的project可以不填。 ###########
            - name: aliyun_logs_project
              value: k8s-xxx
            ######### 配置机器组,如果使用k8s集群默认的project下的默认机器组可以不填。 ###########
            ######### 建议不要使用默认的机器组,使用自定义(只用通过环境变量设置名字即可,ECI会帮创建和配置)。###########
            - name: aliyun_logs_machinegroup
              value: k8s-group-app-alpine
            ######### aliyun_logs_machinegroup变量值为全局唯一,即不同集群如指定相同值,则这两个容器将拥有相同的自定义标识,建议按照 {集群/环境名}-{应用名} 的方式来设置此值,例如test-app、prod-app2。###########
            - name: aliyun_logs_log-stdout
              value: stdout
            - 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"
            #################################
            ######### 配置volume mount #######
            volumeMounts:
            - name: volume-sls
              mountPath: /log
          volumes:
          - name: volumn-sls
            emptyDir: {}

    其中以下内容需要根据您的需求进行配置,一般按照顺序进行配置。

    • 通过环境变量来创建您的采集配置,所有与配置相关的环境变量都采用aliyun_logs_作为前缀。 创建采集配置的规则如下:
      - name: aliyun_logs_{Logstore名称}
        value: {日志采集路径}

      示例中创建了两个采集配置,其中aliyun_logs_log-stdout这个env表示创建一个Logstore名字为log-stdout,日志采集路径为stdout的配置,从而将容器的标准输出采集到log-stdout这个Logstore中。

      说明 Logstore名称中不能包含下划线(_),可以使用 - 来代替。
    • 如果您的采集配置中指定了非stdout的采集路径,需要在此部分创建相应的volumnMounts。

      示例中采集配置添加了对/log/*.log 的采集,因此相应地添加了/log的volumeMounts。

  7. 当YAML编写完成后,单击创建,即可将相应的配置交由Serverless Kubernetes集群执行。
    部署完成后,您可以通过执行以下命令,查看Pod部署情况。
    NAME                      READY     STATUS    RESTARTS   AGE       IP             NODE
    alpine-76d978dbdd-gznk6   1/1       Running   0          21m       10.1.XX.XX   viking-c619c41329e624975a7bb50527180****
    alpine-76d978dbdd-vb9fv   1/1       Running   0          21m       10.1.XX.XX   viking-c619c41329e624975a7bb50527180****

查看日志

  1. 安装成功后,进入日志服务控制台
  2. 在进入控制台后,在Project列表区域选择Kubernetes集群对应的Project(默认为k8s-log-{Kubernetes集群ID}),进入日志库列表页签。
  3. 在列表中找到相应的Logstore(采集配置中指定),单击花,在下拉框中选择查询分析
    本例中,找到 test-stdout这个logstore,单击 花,在下拉框中选择 查询分析,可以看到收集到的ECI弹性容器实例的 stdout日志。 日志分析