容器服务ACK(Alibaba Cloud Container Service for Kubernetes)集成了日志服务功能,可对服务网格数据平面集群的AccessLog进行采集。本文介绍如何开启日志采集、配置日志服务以及查看采集的日志。

背景信息

部署在数据平面(即加入网格的Kubernetes集群)的Envoy Proxy可以输出所有访问日志,这些日志被称为Envoy Access Log,请参见Envoy Access Log。您可以通过kubectl logs指令查看这些日志。借助阿里云日志服务,不仅可以更便捷地查看日志,还可以对这些日志进行收集、检索或建立Dashboard。

步骤一:为Kubernetes集群安装日志服务组件

如果您尚未创建Kubernetes集群,请执行以下步骤。

  1. 登陆容器服务管理控制台
  2. 在左侧导航栏中选择集群
  3. 集群列表页面,单击右上角创建Kubernetes集群,具体步骤,请参见快速创建Kubernetes托管版集群
  4. 组件配置步骤中,选择日志服务配置项,表示在新建的Kubernetes集群中安装日志插件。
    • 选择使用已有Project,选择一个现有的Project来管理采集的日志。开启日志1
    • 选择创建新Project,则自动创建一个新的Project来管理采集的日志,Project会自动命名为 k8s-log-{ClusterID},ClusterID表示您新建的Kubernetes集群的唯一标识。开启日志2
  5. 完成配置后,单击创建集群,完成集群创建。

如果您已创建了Kubernetes集群,但未安装日志组件,请执行以下步骤。

  1. 在左侧导航栏中选择集群
  2. 在目标集群右侧操作列,单击管理,进入集群管理页面。集群管理
  3. 在左侧导航栏中,单击组件管理
  4. 可选组件列表中找到logtail-ds,单击安装安装日志组件

如果您已经创建了Kubernetes集群,并且已为集群安装了日志组件,但版本低于v0.16.24.0-1fa7551-aliyun,请执行以下步骤。

  1. 在集群管理页面,单击左侧导航栏中的组件管理
  2. 可选组件列表中找到logtail-ds,单击右侧的升级组件升级

步骤二:配置日志服务

使用logtail组件采集Envoy Access Log,需要创建采集配置。

  1. 准备yaml文件,文件模版如下。
    apiVersion: log.alibabacloud.com/v1alpha1
    kind: AliyunLogConfig
    metadata:
      # your config name, must be unique in you k8s cluster
      name: mesh-access-log-config
      namespace: kube-system
    spec:
      # must use same project with k8s cluster
      project: k8s-log-${K8SClusterID}
      # logstore name to upload log
      logstore: mesh-access-log
      # product code always been mesh-access-log
      productCode: mesh-access-log
      # logtail config detail
      logtailConfig:
        # docker stdout's input type is 'plugin'
        inputType: plugin
        # logtail config name, should be same with [metadata.name]
        configName: mesh-access-log-config
        inputDetail:
          plugin:
            inputs:
              -
                # input type
                type: service_docker_stdout
                detail:
                  # collect stdout and stderr
                  Stdout: true
                  Stderr: true
                  IncludeEnv:
                    ISTIO_META_POD_NAME: ""
                  IncludeLabel:
                    io.kubernetes.container.name: "istio-proxy"
                  ExcludeLabel:
                    io.kubernetes.pod.name: "^istio-ingressgateway-.*$"
            processors:
              -
                # 使用JSON解析
                type: processor_json
                detail:
                  # 从docker采集的数据默认key为"content"
                  SourceKey: content
                  ExpandConnector: ""
                  # 保留原始字段
                  KeepSource: true
                  NoKeyError: true
    						
    说明

    替换模板中的${K8SClusterID}为您的K8s集群ClusterID。

    每个K8s集群都需要单独准备配置文件。

    yaml文件中的project字段请务必按照k8s-log-${K8SClusterID}规则填写,logstore字段务必保持原值,否则会影响服务网格控制面板的显示。

  2. 在k8s集群应用在已编辑完成的yaml文件。
    $ kubectl apply -f [yaml文件路径]

步骤三:查看日志

完成配置后,Envoy Access Log将被采集并存储到日志服务您指定的LogProject和LogStore中,您可以通过以下步骤来查看日志。

  1. 登录服务网格控制台
  2. 单击目标网格管理,进入网格管理页面。服务网格管理
  3. 单击数据平面集群列表中的查看报表,可选择查看访问日志详细记录访问日志监控中心
    图 1.
    查看报表
    图 2.
    仪表盘
    图 3.
    日志仪表盘
    说明 访问日志详细记录以更为易读的方式展示了原始访问日志。而访问日志监控中心则展示了从多维度对日志信息进行的统计数据。