日志采集

最近更新时间:2019-08-14 22:30:48

操作场景

日志采集功能是容器服务为用户提供的集群内日志采集工具,可以将集群内服务或集群节点特定路径文件的日志发送至 Kafka、Elasticsearch 或者 腾讯云日志服务(CLS)。日志采集功能适用于需要对 Kubernetes 集群内服务日志进行存储和分析的用户。

日志采集功能需要为每个集群手动开启。日志采集功能开启后,日志采集 Agent 会在集群内以 DaemonSet 的形式运行,并根据用户通过日志采集规则配置的采集源和消费端,从采集源进行日志采集,将日志内容发送到消费端。您可根据以下操作开启日志采集功能:

前提条件

  • 请在开启前保证集群节点上有足够资源。开启日志采集功能会占用您集群的部分资源,默认会占用集群每个节点约0.3核 CPU,250MB内存。
    • 占用 CPU 资源:默认0.3核,日志量过大时可根据情况自行调大,建议最大设置为 request 1核,limit 2核。
    • 占用内存资源:默认250MB,日志量过大时可根据情况自行调大,建议最大设置为 request 1GB,limit 1.5GB。
    • 日志长度限制:单条512K,如超过会截断。
  • 若使用日志采集功能,请确认 Kubernetes 集群内节点能够访问日志消费端。且以下日志采集功能仅支持 Kubernetes 1.10 以上版本集群。

概念

  • 日志采集 Agent:TKE 用于采集日志信息的 Agent,基于 Fluentd 开发,在集群内以 DaemonSet 的方式运行。
  • 日志采集规则:用户可以使用日志采集规则指定日志的采集源以及将采集的日志发送至指定消费端。
    • 日志采集 Agent 会监测日志采集规则的变化,变化的规则会在最多10s内生效。
    • 多条日志采集规则不会创建多个 DaemonSet,但过多的日志采集规则会使得日志采集 Agent 占用的资源增加。
  • 日志源:包含指定容器日志以及主机路径日志。
    • 在需要采集集群内服务打印到标准输出的日志时,用户将日志的采集源为指定容器日志、所有 Namespace 服务的日志或若干个指定 Namespace 内的服务日志。
    • 在需要采集集群内节点特定路径的日志时,用户可以设定日志的采集源为主机路径日志,例如当需要采集所有路径形式为 /var/lib/docker/containers/<container-id>/<container-id>.json-log 的日志时,可以指定日志采集路径为 /var/lib/docker/containers/*/*.json-log
  • 消费端:日志采集 Agent 在采集指定采集源的日志后,会将采集到的日志发送至用户指定的消费端。
    • 日志采集服务支持用户自建的 Elasticsearch 、Kafka 、腾讯云的 Ckafka 服务或腾讯云日志服务(CLS)作为日志的消费端。
    • 日志采集 Agent 会将采集到的日志以 JSON 的形式发送至用户指定的消费端。

操作步骤

采集容器标准输出日志

日志采集功能支持采集 Kubernetes 集群内指定容器的标准输出日志,用户可以根据自己的需求,灵活的配置采集规则。
采集到的日志信息将会以 JSON 格式输出到用户指定的消费端,并会附加相关的 Kubernetes metadata,包括容器所属 pod 的 label 和 annotation 等信息。

配置方法

  1. 登录 容器服务控制台,单击左侧导航栏【日志采集】。
  2. 在日志采集页面上方选择地域与集群后,单击【新建】。如下图所示:
  3. 在新建日志收集规则页面,选择【容器标准输出】采集类型,并配置日志源。如下图所示:

    选择容器标准输出采集类型时,会默认为每条日志添加以下 metadata,其中 log 为原始日志信息。且该类型日志源支持一次选择多个 Namespace 的工作负载。
    字段名 含义
    docker.container_id 日志所属的 container ID
    kubernetes.annotations 日志所属 pod 的 annotations
    kubernetes.container_name 日志所属的 container name
    kubernetes.host 日志所属 pod 所在的机器 IP
    kubernetes.labels 日志所属 pod 的 labels
    kubernetes.namespace_name 日志所属 pod 的 namespace
    kubernetes.pod_id 日志所属 pod 的 ID
    kubernetes.pod_name 日志所属 pod 的名字
    log 原始日志信息
  4. 配置日志消费端,推荐以日志服务CLS 为消费端。如下图所示:
  5. 单击【完成】,完成创建。

采集容器内文件日志

日志采集功能也支持采集集群内指定 pod 内文件的日志。
采集到的日志信息将会以 JSON 格式输出到用户指定的消费端,并会附加相关的 Kubernetes metadata,包括容器所属 pod 的 label 和 annotation 等信息。

注意:

目前仅支持采集存储在 volume 的日志文件,即需要在工作负载创建时挂载 emptyDir、hostpath 等 volume,并将日志文件存到指定 volume。

配置方法

  1. 登录 容器服务控制台,单击左侧导航栏【日志采集】。
  2. 在日志采集页面上方选择地域与集群后,单击【新建】。如下图所示:
  3. 指定【容器文件路径】采集类型,并配置日志源。如下图所示:
    说明:

    用户可以通过指定日志文件的路径来采集 pod 上相应路径的日志文件,路径支持文件路径和通配规则,如 /var/log/nginx.log/var/lib/docker/containers/*/*.log


    选择容器文件路径采集类型时,会默认为每条日志添加以下 metadata,其中 message 为原始日志信息。且该类型日志源不支持选择多个 Namespace 的工作负载。
    字段名 含义
    docker.container_id 日志所属的 container ID
    kubernetes.annotations 日志所属 pod 的 annotations
    kubernetes.container_name 日志所属的 container name
    kubernetes.host 日志所属 pod 所在的机器 IP
    kubernetes.labels 日志所属 pod 的 labels
    kubernetes.namespace_name 日志所属 pod 的 namespace
    kubernetes.pod_id 日志所属 pod 的 ID
    kubernetes.pod_name 日志所属 pod 的名字
    file 源日志文件
    message 原始日志信息
  4. 配置日志消费端,推荐以日志服务CLS 为消费端。如下图所示:
  5. 单击【完成】,完成创建。

采集主机内文件日志

日志采集功能支持采集集群内所有节点的指定主机路径的日志。用户可以根据自己的需求,灵活的配置所需的路径,日志采集 Agent 会采集集群内所有节点上满足指定路径规则的文件日志。
采集到的日志信息将会以 JSON 格式输出到用户指定的输出端,并会附加用户指定的 metadata,包括日志来源文件的路径和用户自定义的 metadata。

配置方法

  1. 登录 容器服务控制台,单击左侧导航栏【日志采集】。
  2. 在日志采集页面上方选择地域与集群后,单击【新建】。如下图所示:
  3. 在新建日志采集规则页面,指定【节点文件路径】采集类型。如下图所示:
    说明:

    用户可以通过指定日志文件的路径来采集集群内节点上相应路径的日志文件,路径支持文件路径和通配规则,如 /var/log/nginx.log/var/lib/docker/containers/*/*.log


    用户可根据实际需求进行添加自定义的 “metadata” ,将采集到的日志信息附加指定 Key-Value 形式的 “metadata”,作为日志信息的 metadata 标记。
    附加 metadata 将会以 json field 的形式添加到日志记录中。如下图所示:

    例如,当不指定附加 metadata 时,采集到的日志如下图所示:

    当用户指定附加 metadata 时,采集到的日志如下图所示:

    相比不指定附加 Metadata 时,附加 Metadata 的 json 日志增加了 keyservice
    日志 metadata 含义如下表:
    字段名 含义
    path 日志的来源文件
    message 日志信息
    自定义 key 自定义 value
  4. 配置日志消费端,推荐以日志服务CLS 为消费端。如下图所示:
  5. 单击【完成】,完成创建。

配置日志消费端

日志采集功能支持指定用户自建的 Kafka 实例、腾讯云 Ckafka 服务的指定实例的 Topic 、腾讯云日志服务 CLS 指定的日志主题作为日志内容的消费端。日志采集 Agent 会将采集到的日志发送到指定 Kafka 的指定 Topic 或指定的 CLS 日志主题。

配置 Kafka 作为日志消费端

目前仅支持无访问认证的 Kafka 实例,且需要保证集群内所有节点都能够访问到用户指定的 Kafka Topic。
如果选择腾讯云提供的 Ckafka 服务,请选择对应 Ckafka 实例。否则请填写 Kafka 的访问地址及 Topic。如下图所示:

配置日志服务 CLS 作为日志消费端

注意:

日志服务 CLS 目前只能支持同地域的容器集群进行日志采集上报。

  1. 创建日志集时,由于容器服务的日志有独立的采集能力,新建日志集不需要开启【使用LogListener】。如下图所示:
  2. 打开日志主题的【日志索引】。如下图所示:

配置 Elasticsearch 作为日志消费端

目前仅支持无访问认证的 Elasticsearch 服务,且需要保证集群内所有节点都能够访问到用户指定的 Elasticsearch 服务。
填写 Elasticsearch 服务的访问地址及存储索引。如下图所示: