使用场景
日志采集功能是容器服务为用户提供的集群内日志采集工具,可以将集群内服务或集群节点特定路径文件的日志发送至 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//.json-log
的日志时,可以指定日志采集路径为/var/lib/docker/containers/*/*.json-log
。
- 消费端:日志采集 Agent 在采集指定采集源的日志后,会将采集到的日志发送至用户指定的消费端。
- 日志采集服务支持用户自建的 Elasticsearch 、Kafka 、腾讯云的 Ckafka 服务或腾讯云日志服务(CLS)作为日志的消费端。
- 日志采集 Agent 会将采集到的日志以 JSON 的形式发送至用户指定的消费端。
TKE实践
采集容器标准输出日志
日志采集功能支持采集 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 等信息。
NT:
目前仅支持采集存储在 volume 的日志文件,即需要在工作负载创建时挂载 emptyDir、hostpath 等 volume,并将日志文件存到指定 volume。
配置方法
- 登录 容器服务控制台,单击左侧导航栏【日志采集】。
- 在日志采集页面上方选择地域与集群后,单击【新建】。
- 指定【容器文件路径】采集类型,并配置日志源。如下图所示:
说明:
用户可以通过指定日志文件的路径来采集 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 | 原始日志信息 |
- 配置日志消费端,推荐以日志服务CLS 为消费端。如上图所示:
- 单击【完成】,完成创建。
采集主机内文件日志
日志采集功能支持采集集群内所有节点的指定主机路径的日志。用户可以根据自己的需求,灵活的配置所需的路径,日志采集 Agent 会采集集群内所有节点上满足指定路径规则的文件日志。
采集到的日志信息将会以 JSON 格式输出到用户指定的输出端,并会附加用户指定的 metadata,包括日志来源文件的路径和用户自定义的 metadata。
配置方法
- 登录容器服务控制台,单击左侧导航栏【日志采集】。
- 在日志采集页面上方选择地域与集群后,单击【新建】。
- 在新建日志采集规则页面,指定【节点文件路径】采集类型。如下图所示:
说明:
用户可以通过指定日志文件的路径来采集集群内节点上相应路径的日志文件,路径支持文件路径和通配规则,如
/var/log/nginx.log
或/var/lib/docker/containers/*/*.log
。
用户可根据实际需求进行添加自定义的 “metadata” ,将采集到的日志信息附加指定 Key-Value 形式的 “metadata”,作为日志信息的 metadata 标记。
日志 metadata 含义如下表:
字段名 | 含义 |
---|---|
path | 日志的来源文件 |
message | 日志信息 |
自定义 key | 自定义 value |
- 配置日志消费端,推荐以日志服务CLS 为消费端。如上图所示:
- 单击【完成】,完成创建。