通过 DaemonSet 方式采集容器文本日志或容器标准输出时,可以通过 LogCollector CRD 方式创建采集配置。本文档演示通过 DaemonSet-CRD 方式创建日志采集配置的操作步骤。
背景信息
日志服务支持通过 DaemonSet 方式采集容器日志,同时可通过 LogCollector CRD 方式创建采集配置。
- DaemonSet 方式采集容器日志时,支持采集容器的标准输出和容器文本日志,且资源占用相对较少,配置灵活。
- LogCollector CRD 方式创建采集配置的操作简单便捷,但需要一定的工具学习成本,适用于熟悉 Kubernetes 和 CRD 的高阶用户。CRD 方式的采集原理请参考 CRD 采集原理。
此外,LogCollector 采集容器日志时,支持单行、多行等多种采集配置,除各种采集配置默认附加的预留字段之外,日志服务还会对 LogCollector 采集到的容器日志添加以下预留字段,并默认为其创建索引。
容器文本日志的预留字段:
容器标准输出的预留字段:
前提条件
限制说明
- Docker 容器引擎仅支持 JSON 类型的日志驱动。
- 如果某些容器匹配了多个采集配置,那么在该容器上仅最新的采集配置生效。
- 容器内日志文件的采集路径目前仅支持不挂载、emptyDir 挂载和 hostPath 挂载 3 种方式。
- 采集路径不支持设置为软链接,因为 LogCollector 无法访问容器内日志文件的软链接,请按照容器内日志文件的真实路径配置采集路径。
- 在容器停止之后,LogCollector 会收到该容器的 stop 事件,并随即停止采集该容器的日志。如果 LogCollector 采集该容器的日志有一定延迟,则容器停止之前产生的部分日志可能未被采集。
- LogCollector 支持的容器引擎包括 Docker 和 Containerd。不同类型容器引擎的访问路径限制如下:
- Docker:LogCollector 通过宿主机的 /run/docker.sock 访问 Docker 容器引擎,请确保该路径存在且 LogCollector 具备访问权限。
- Containerd:LogCollector 通过宿主机的 /run/containerd/containerd.sock 访问 Containerd 容器引擎,请确保该路径存在且 LogCollector 具备访问权限。
LogCollector CRD 通过 yaml 文件的方式定义并下发 LogCollector 采集配置,创建并应用该文件后,日志服务会根据其配置自动创建一个新的 LogCollector CR,此 CR 对应一个 LogCollector 采集配置,并显示在日志服务控制台中。
说明
projectName、topicName 及 RuleName 均相同的多个 LogCollector CR 会被视为同一个采集配置,这些 CR 中仅最近一个被应用的 CR 指定的采集规则生效。请确保不存在 projectName、topicName 及 RuleName 均相同的 CR,以免最终生效的采集规则不符合预期。
创建 LogCollector 采集配置的操作步骤如下:
- 登录已经安装 LogCollector CRD 的 Kubernetes 集群。
- 请根据业务需求自行定义 YAML 文件名称,本文档以 access.yaml 为例。
- 编辑 YAML 文件,并在 YAML 文件中输入以下内容。
- 其中,metadata 和 spec 部分的参数需要根据业务需求自行制定,参数说明如下:
- 执行以下命令,使 access.yaml 文件配置生效。
- 其中,access.yaml为文件名,请根据实际情况替换。
如果需要调整采集配置,推荐通过修改 LogCollector CR 的方式进行修改。成功操作后,日志服务会自动更新对应的 LogCollector CR,并刷新控制台显示的 LogCollector 采集配置。
说明
- 如果通过控制台直接调整采集配置,可能造成 LogCollector CR 与控制台采集配置信息不同步的问题。
- 不支持修改采集配置对应的 projectName、topicName 及 RuleName,一旦修改,日志服务会创建一个新的采集配置,并为其指定新的配置名称、日志项目或日志主题。
推荐的操作方式如下,此处以 YAML 文件名 access.yaml 为例。
- 登录已经安装 LogCollector CRD 的 Kubernetes 集群。
- 执行以下命令编辑指定 YAML 文件,修改采集配置。
如果需要删除 LogCollector 采集配置,执行以下命令删除对应的 LogCollector CR 资源即可。其中,logcollector_cr_name 为 LogCollector CR 的名称,例如 collectrule-sample,请根据实际情况替换。
成功创建并应用 LogCollector 采集配置后,通过控制台或 CRD 方式查看采集配置的详细信息。
- 控制台方式:在日志服务控制台中根据日志项目和采集配置名称查看对应的采集配置,操作方式请参考查看采集配置信息。
- CRD 方式:查看 Kubernetes 集群的 LogCollector CR 列表,并根据 CR 名称查看指定 CR 的信息。操作步骤如下:
- 执行以下命令,查看当前 Kubernetes 集群的 LogCollector CR 列表,并在列表中获取希望查看的 CR 名称。
-
- 执行以下命令,在回显信息的 spec 字段中查看指定 LogCollector CR 的详细定义。其中,logcollector_cr_name 为 LogCollector CR 的名称,例如 collectrule-sample,请根据实际情况替换。
通过 CRD 方式创建 LogCollector 采集配置后,如果控制台中未出现对应的采集配置,或修改 CR 后采集配置未同步更新,表示创建或修改采集配置创建失败,您可以在 Kubernetes 集群中查看 LogCollector CR 状态及描述,由此判断失败的原因。
执行以下命令查看指定查看 LogCollector CR 状态。其中,logcollector_cr_name 为 LogCollector CR 的名称,例如 collectrule1,请根据实际情况替换。
执行结果中的 status 字段表示 LogCollector CR 状态。其中:
回显信息示例:
- 已成功创建或修改 LogCollector 采集配置:
-
- 创建或修改 LogCollector 采集配置失败:
-
配置示例
采集指定工作负载的容器标准输出
采集工作负载类型为 Deployment、名称为 test-nginx、以及 Pod Label 中 Key为label-test-key1、Value 为 label-test-key1 或者 Key 为 label-test-key2、Value 为 label-test-key2 的所有容器的标准输出以及标准错误。
LogCollector 采集配置示例如下:
采集指定 Namespace 的容器标准输出
采集 Namespace 名称 为namespace-test-name、Pod 名称 为pod-test-name、以及容器名称为 container-test-name 的所有容器的标准输出以及标准错误。
LogCollector 采集配置示例如下:
分隔符模式采集容器文本日志
采集 Namespace 名称为 namespace-test-name、Pod 名称为 pod-test-name、以及容器名称为 container-test-name 的所有容器的 /var/logs/app 目录下的 access.log 文件中的日志,并且以分隔符采集模式来进行采集。
LogCollector 采集配置示例如下:
JSON 模式采集容器文本日志
采集 Namespace 名称为 namespace-test-name、Pod 名称为 pod-test-name、以及容器名称为 container-test-name 的所有容器的 /var/logs/app 目录下的 access.log 文件中的日志,并且以 JSON 采集模式来进行采集。
LogCollector 采集配置示例如下:
后续步骤
创建采集配置之后,LogCollector 会根据指定规则开始监听容器内日志文件或容器标准输出并采集日志,日志数据将保存在指定的日志主题中。
日志索引默认为关闭状态,您需要为日志主题开启索引功能,并配置索引,才能在控制台中对采集到的日志数据进行查询分析。