为了统一管理阿里云容器服务ACK集群或自建 Kubernetes 集群在多环境、多集群场景下的日志采集配置,避免因手动配置导致的不一致、效率低下及变更不可追溯等问题,可采用Kubernetes 的自定义资源(CRD)方式定义采集配置。通过该方式,无论是 ACK 集群还是自建 Kubernetes 集群,均可使用 kubectl
或 CI/CD 流水线实现配置的版本化管理、环境差异化部署和自动化发布。结合 LoongCollector 的热加载能力,配置变更后可立即生效,无需重启采集组件,提升运维效率与系统的可维护性。
旧版CRD-AliyunLogConfig的配置方式已停止维护,请使用新版AliyunPipelineConfig
,新旧版的能力对比请参见CRD类型。
对于通过自定义资源(CRD)创建的采集配置,只能通过更新对应的CRD进行修改。在日志服务控制台上所做的更改不会同步至CRD,也不会生效。
适用范围
运行环境:
支持阿里云容器服务ACK(托管与专有版)和自建Kubernetes 集群。
Kubernetes为1.16.0及以上版本且支持
Mount propagation: HostToContainer
。容器运行时(仅支持Docker与Containerd)
Docker:
需具备访问docker.sock的权限。
标准输出采集仅支持JSON类型的日志驱动。
存储驱动仅支持overlay、overlay2两种存储驱动(其他类型需手动挂载日志目录)。
Containerd:需具备访问containerd.sock的权限。
资源要求:LoongCollector(Logtail)以system-cluster-critical高优先级运行,集群资源不足时请勿部署,否则可能驱逐节点上原有的Pod。
CPU:至少预留0.1 Core。
内存:采集组件至少150MB,控制器组件至少100MB。
实际使用量与采集速率、监控目录和文件数量、发送阻塞程度有关,请保证实际使用率低于限制值的80%。
权限要求:部署使用的阿里云主账号或子账号需具备
AliyunLogFullAccess
权限。如需自定义权限策略,请参考AliyunCSManagedLogRolePolicy系统策略,将其包含的权限内容复制并赋予目标 RAM 用户或角色,以实现精细化的权限配置。
采集配置创建流程
安装LoongCollector:通过DaemonSet模式部署LoongCollector,确保集群中每个节点均运行一个采集容器,统一采集该节点上所有容器的日志。
创建Logstore:Logstore是日志数据的存储单元,用于存储日志。一个 Project 内可创建多个 Logstore。
创建采集配置YAML文件:使用kubectl连接集群,您可以通过以下两种方式创建采集配置文件:
方式一:使用采集配置生成器
通过日志服务控制台的采集配置生成器,可视化填写参数,自动生成标准YAML文件。
方式二:手动编写YAML
结合本文档提供的典型场景示例与配置流程,根据实际业务需求手动编写 YAML 文件。建议按本文结构逐步构建配置:从极简配置起步 → 添加处理逻辑 → 启用高级功能。
对于本文未覆盖的复杂场景或需要深度定制的字段,可进一步参考AliyunPipelineConfig参数说明,获取完整字段列表、取值规则及插件能力详情。
一个完整的采集配置通常包含以下部分:
极简配置(必选):构建从集群到日志服务的数据通道。包含两部分:
常用处理配置(可选):通过定义
processors
字段,对原始日志进行结构化解析(如正则解析、分隔符解析)或脱敏、过滤处理等。本文仅介绍原生处理插件,覆盖常见日志处理场景,如需更多功能,请参考扩展处理插件。
其他高级配置(可选):实现多行文本日志的采集、日志标签富化等,满足更精细化的采集需求。
结构示例:
apiVersion: telemetry.alibabacloud.com/v1alpha1 # 使用默认值,无需修改。 kind: ClusterAliyunPipelineConfig # 使用默认值,无需修改。 metadata: name: test-config # 设置资源名,在当前Kubernetes集群内唯一。 spec: project: # 设置目标Project名称。 name: k8s-your-project config: # 设置Logtail采集配置。 inputs: # 设置Logtail采集配置里的输入插件 ... processors: # 设置Logtail采集配置的处理插件 ... flushers: # 设置Logtail采集配置里的输出插件 ...
应用配置
kubectl apply -f <your_yaml>
安装LoongCollector(Logtail)
LoongCollector 是阿里云日志服务(SLS)推出的新一代日志采集 Agent,是 Logtail 的升级版,二者不能同时存在,如需安装Logtail,请参考Logtail安装与配置。
本文仅介绍LoongCollector的基础安装步骤,如需了解详细参数请参考LoongCollector安装(Kubernetes)。如果您已安装LoongCollector或Logtail,可跳过此步骤,直接创建存储采集日志的Logstore。
ACK集群
通过容器服务控制台安装LoongCollector,默认将日志发送到当前阿里云账号的日志服务Project中。
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,进入集群详情页。
在左侧导航栏,单击组件管理。
在日志与监控页签中,找到loongcollector,单击安装。
说明对于新建集群,在组件配置页面,勾选使用日志服务,支持创建新Project或使用已有Project。
安装完成后,日志服务会自动在ACK所属地域下创建相关资源,您可登录日志服务控制台查看。
资源类型
资源名称
作用
Project
k8s-log-${cluster_id}
资源管理单元,隔离不同业务日志。
如需自行创建Project以实现更灵活的日志资源管理,请参考创建Project。
机器组
k8s-group-${cluster_id}
日志采集节点集合。
Logstore
config-operation-log
重要请不要删除该Logstore。
用于存储loongcollector-operator组件的日志,其计费方式与普通Logstore相同,详见按写入数据量计费模式计费项。建议不要在此Logstore下创建采集配置。
自建集群
连接Kubernetes集群,并根据地域选择对应命令,下载LoongCollector及其依赖组件:
中国地域:
wget https://aliyun-observability-release-cn-shanghai.oss-cn-shanghai.aliyuncs.com/loongcollector/k8s-custom-pkg/3.0.12/loongcollector-custom-k8s-package.tgz; tar xvf loongcollector-custom-k8s-package.tgz; chmod 744 ./loongcollector-custom-k8s-package/k8s-custom-install.sh
海外地域:
wget https://aliyun-observability-release-ap-southeast-1.oss-ap-southeast-1.aliyuncs.com/loongcollector/k8s-custom-pkg/3.0.12/loongcollector-custom-k8s-package.tgz; tar xvf loongcollector-custom-k8s-package.tgz; chmod 744 ./loongcollector-custom-k8s-package/k8s-custom-install.sh
进入
loongcollector-custom-k8s-package
目录,修改配置文件./loongcollector/values.yaml
。# ===================== 必需要补充的内容 ===================== # 管理采集日志的Project名,例如 k8s-log-custom-sd89ehdq。 projectName: "" # Project所属地域,例如上海:cn-shanghai region: "" # Project所属主账号uid,请用引号包围,例如"123456789" aliUid: "" # 使用网络,可选参数:公网Internet,内网Intranet,默认使用公网 net: Internet # 主账号或者子账号的AK,SK,需具备AliyunLogFullAccess系统策略权限 accessKeyID: "" accessKeySecret: "" # 自定义集群ID,命名只支持大小写,数字,短划线(-)。 clusterID: ""
在
loongcollector-custom-k8s-package
目录下执行如下命令,安装LoongCollector及其他依赖组件:bash k8s-custom-install.sh install
安装完成后,查看组件运行状态。
若Pod未成功启动,请确认values.yaml配置是否正确,相关镜像拉取是否成功。
# 检查Pod状态 kubectl get po -n kube-system | grep loongcollector-ds
同时,日志服务会自动创建如下资源,可登录日志服务控制台查看。
资源类型
资源名称
作用
Project
values.yaml文件中自定义的
projectName
的值资源管理单元,隔离不同业务日志。
机器组
k8s-group-${cluster_id}
日志采集节点集合。
Logstore
config-operation-log
重要请不要删除该Logstore。
存储loongcollector-operator组件的日志,其计费方式与普通Logstore相同,详见按写入数据量计费模式计费项。建议不要在此Logstore下创建采集配置。
创建Logstore
若您已提前创建好Logstore,可直接跳过此步骤,进行采集配置。
登录日志服务控制台,单击目标Project名称。
在左侧导航栏,选择
,单击+。
在创建Logstore页面,完成以下核心配置:
Logstore名称:设置一个在Project内唯一的名称。该名称创建后不可修改。
Logstore类型:根据规格对比选择标准型或查询型。
计费模式:
按使用功能计费:按存储、索引、读写次数等各项资源独立计费。适合小规模或功能使用不确定的场景。
按写入数据量计费:仅按原始写入数据量计费,并提供30天的免费存储周期及免费的数据加工、投递等功能。成本模型简单,适合存储周期接近30天或数据处理链路复杂的场景。
数据保存时间:设置日志的保留天数,取值范围为1~3650天(3650天表示永久保存)。默认为30天。
其他配置保持默认,单击确定。如需了解其他配置信息,请参考管理Logstore。
极简配置
在spec.config
中,通过配置输入(inputs)与输出(flushers)插件,定义日志采集的核心路径:从哪里采集日志,以及日志要发送到哪里。
容器标准输出-新版
用途:采集直接打印到控制台的容器标准输出日志(stdout/stderr)。
采集配置的起点,定义日志来源。目前只允许配置1个输入插件。
| 示例
|
通过配置
|
采集容器内文本文件
用途:采集写入到容器内特定文件路径的日志,如传统的access.log或app.log。
采集配置的起点,定义日志来源。目前只允许配置1个输入插件。
| 示例
|
通过
|
常用处理配置
在完成极简配置后,您可以通过添加processors插件进行处理配置,将原始日志进行结构化解析或脱敏、过滤处理。
核心配置:在spec.config
中添加processors
,配置处理插件,支持同时启用多个插件。
此处仅介绍原生处理插件,覆盖常见日志处理场景,如需更多功能,请参考扩展处理插件。
对于Logtail 2.0及以上版本以及LoongCollector组件,推荐遵循以下插件组合规则:
优先使用原生插件。
当原生插件无法满足需求时,可在原生插件后配置扩展插件。
原生插件只能在扩展插件之前使用。
结构化配置
正则解析
通过正则表达式提取日志字段,并将日志解析为键值对形式。
关键字段 | 示例 |
Type 插件类型,固定为 |
|
SourceKey 源字段名。 | |
Regex 匹配日志的正则表达式。 | |
Keys 提取的字段列表。 | |
KeepingSourceWhenParseFail 解析失败时,是否保留源字段,默认为 | |
KeepingSourceWhenParseSucceed 解析成功时,是否保留源字段,默认为 | |
RenamedSourceKey 保留源字段时,用于存储源字段的字段名,默认不改名。 |
分隔符解析
通过分隔符将日志内容结构化,解析为多个键值对形式。支持单字符分隔符和多字符分隔符。
关键字段详解 | 示例 |
Type 插件类型,固定值 |
|
SourceKey 源字段名。 | |
Separator 字段分隔符,例如 CSV 使用逗号 (,)。 | |
Keys 提取的字段列表。 | |
Quote 引用符,用于包裹包含特殊字符(如逗号)的字段内容。 | |
AllowingShortenedFields 是否允许提取的字段数量小于 Keys 的数量,默认为 | |
OverflowedFieldsTreatment 当提取的字段数量大于 Keys 的数量时的行为,默认为
| |
KeepingSourceWhenParseFail 解析失败时,是否保留源字段,默认为 | |
KeepingSourceWhenParseSucceed 解析成功时,是否保留源字段,默认为 | |
RenamedSourceKey 保留源字段时,用于存储源字段的字段名,默认不改名。 |
标准JSON解析
将Object类型的JSON日志结构化,解析为键值对形式。
关键字段详解 | 示例 |
Type 插件类型,固定值为 |
|
SourceKey 源字段名。 | |
KeepingSourceWhenParseFail 解析失败时,是否保留源字段,默认为 | |
KeepingSourceWhenParseSucceed 解析成功时,是否保留源字段,默认为 | |
RenamedSourceKey 保留源字段时,用于存储源字段的字段名,默认不改名。 |
嵌套JSON解析
通过指定展开深度,将嵌套的JSON日志解析为键值对形式。
关键字段详解 | 示例 |
Type 插件类型,固定值 |
|
SourceKey 源字段名。 | |
ExpandDepth JSON 展开深度,默认值为0。
| |
ExpandConnector JSON 展开时字段名的连接符,默认为下划线(_)。 | |
Prefix 指定 JSON 展开后字段名的前缀。 | |
IgnoreFirstConnector 是否忽略第一个连接符,即是否在顶级字段前添加连接符,默认为 | |
ExpandArray 是否展开数组类型,默认为
说明 Logtail 1.8.0 及以上版本支持该参数。 | |
KeepSource 被解析后的日志中是否保留原始字段,默认为
| |
NoKeyError 原始日志中没有指定的原始字段时,系统是否报错,默认为
| |
UseSourceKeyAsPrefix 是否将原始字段名作为所有 JSON 展开字段名的前缀。 | |
KeepSourceIfParseError 解析日志失败时,是否保留原始日志,默认为
|
JSON数组解析
使用json_extract
函数,从JSON数组中提取JSON对象,更多json函数请参考JSON函数。
关键字段详解 | 示例 |
Type 插件类型,SPL插件类型为 |
|
Script SPL 脚本内容,用于从 content 字段中提取 JSON 数组中的元素。 | |
TimeoutMilliSeconds 脚本超时时间,取值范围0~10000,单位为毫秒,默认1000。 |
Nginx日志解析
根据log_format中的定义将日志内容结构化,解析为多个键值对形式。如默认内容不符合您的需求,可使用自定义格式。
关键字段详解 | 示例 |
Type 插件类型,Nginx日志解析的插件类型为 |
|
SourceKey 源字段名。 | |
Regex 正则表达式。 | |
Keys 提取的字段列表。 | |
Extra
| |
KeepingSourceWhenParseFail 解析失败时是否保留原始字段,默认为 | |
KeepingSourceWhenParseSucceed 解析成功时是否保留原始字段,默认为 | |
RenamedSourceKey 保留原始字段时,用于存储原始的字段名,默认不改名。 |
Apache日志解析
根据Apache日志配置文件中的定义将日志内容结构化,解析为多个键值对形式。
关键字段详解 | 示例 |
Type 插件类型,固定值为 |
|
SourceKey 源字段名。 | |
Regex 正则表达式。 | |
Keys 提取的字段列表。 | |
Extra
| |
KeepingSourceWhenParseFail 解析失败时是否保留原始字段,默认为 | |
KeepingSourceWhenParseSucceed 解析成功时是否保留原始字段,默认为 | |
RenamedSourceKey 保留原始字段时,用于存储原始的字段名,默认不改名。 |
数据脱敏
使用 processor_desensitize_native
插件对日志中的敏感数据进行脱敏处理。
关键字段详解 | 示例 |
Type 插件类型,固定值 |
|
SourceKey 源字段名。 | |
Method 脱敏方式。可选值包括:
| |
ReplacingString 用于替换敏感内容的常量字符串。当 | |
ContentPatternBeforeReplacedString 敏感内容的前缀正则表达式。 | |
ReplacedContentPattern 敏感内容的正则表达式。 | |
ReplacingAll 解析成功时是否保留原始字段,默认为 |
内容过滤
通过配置 processor_filter_regex_native
插件,基于正则表达式匹配日志字段值,仅保留满足条件的日志。
关键字段详解 | 示例 |
Type 插件类型,固定值 |
|
FilterRegex 匹配日志字段的正则表达式。 | |
FilterKey 匹配的日志字段名。 |
时间解析
配置 processor_parse_timestamp_native 插件对日志中的时间字段进行解析,并将解析结果设置为日志的__time__
字段。
关键字段详解 | 示例 |
Type 插件类型,固定值 |
|
SourceKey 源字段名。 | |
SourceFormat 时间格式,需与日志中的时间字段格式完全匹配。 | |
SourceTimezone 日志时间所属时区,默认使用机器时区,即LoongCollector进程所在环境的时区。 格式:
|
其他高级配置
在完成极简配置后,您可以参考下述操作采集多行日志、配置日志主题类型等,以满足更精细化的日志采集需求。以下是常见高级配置及其功能:
配置多行日志采集:当一条日志内容(如异常堆栈信息)占用多行时,需启用多行模式,并配置行首正则表达式以匹配日志的起始行,将占用多行的日志作为一条日志采集并存储到日志服务的Logstore中。
配置日志主题类型:为不同的日志流设置不同的主题(Topic),可用于组织和分类日志数据,更好地管理和检索相关日志。
指定容器采集(过滤与黑名单):指定特定容器与路径采集,包括白名单与黑名单配置。
日志标签富化:将环境变量、Pod标签相关的元信息添加到日志中,作为日志的扩展字段。
配置多行日志采集
日志服务默认为单行模式,按行进行日志的切分与存储,导致含堆栈信息的多行日志被逐行切分,每一行作为独立日志存储和展示,不利于分析。
针对上述问题,可通过开启多行模式来改变日志服务的切分方式,并通过配置正则表达式匹配日志起始行,从而将原始日志按照起始行规则进行切分和存储。
核心配置:在spec.config.inputs
配置中添加Multiline
参数。
关键字段详解 | 示例 |
Multiline 开启多行日志采集功能。
|
|
配置日志主题类型
核心配置:在spec.config
中增加global
参数以设置Topic。
关键字段详解 | 示例 |
TopicType topic类型,可选值:
| 机器组Topic
文件路径提取
自定义
|
TopicFormat Topic 格式。当 TopicType 取值为 filepath 或 custom 时必填。 |
指定容器采集(过滤与黑名单)
过滤
只采集符合条件的容器,多个条件之间为“且”的关系,任意条件为空表示忽略该条件;条件支持使用正则表达式。
核心配置:在spec.config.inputs
中配置ContainerFilters
容器过滤相关参数。
关键字段详解 | 示例 |
ContainerFilters 容器过滤
|
|
黑名单
排除指定条件的文件。需要在YAML的config.inputs
下按需使用如下参数:
关键字段详解 | 示例
|
ExcludeFilePaths 文件路径黑名单,排除指定条件的文件。路径必须为绝对路径,支持使用 * 通配符。 | |
ExcludeFiles 文件名黑名单,排除指定条件的文件。支持使用 * 通配符。 | |
ExcludeDirs 目录黑名单,排除指定条件的文件。路径必须为绝对路径,支持使用 * 通配符。 |
日志标签富化
核心配置:通过在spec.config.inputs
中配置ExternalEnvTag
和 ExternalK8sLabelTag
,向日志中添加与容器环境变量、Pod标签相关的tag。
关键字段详解 | 示例 |
ExternalEnvTag 将指定的环境变量值映射为 tag 字段,格式为: |
|
ExternalK8sLabelTag 将 Kubernetes Pod 的标签值映射为 tag 字段,格式为: |
常见场景完整配置示例
场景一:采集Nginx Access log并解析为结构化字段
解析Nginx日志,根据log_format中的定义将日志内容结构化,解析为多个键值对形式。
场景二:采集并处理多行日志
日志服务默认为单行模式,按行进行日志的切分与存储,导致含堆栈信息的多行日志被逐行切分,每一行作为独立日志存储和展示,不利于分析。
针对上述问题,可通过开启多行模式来改变日志服务的切分方式,并通过配置正则表达式匹配日志起始行,从而将原始日志按照起始行规则进行切分和存储。示例如下:
常见问题
如何将ACK集群日志传输到另一个阿里云账号的Project?
通过在ACK集群中手动安装日志服务 LoongCollector(Logtail) 组件,并为其配置目标账号的主账号ID或访问凭证(AccessKey),即可实现将容器日志发送到另一个阿里云账号的日志服务Project中。
场景描述:当因为组织架构、权限隔离或统一监控等原因,需要将某个ACK集群的日志数据采集到另一个独立的阿里云账号的日志服务Project时,可通过手动安装 LoongCollector(Logtail)进行跨账号配置。
操作步骤:此处以手动安装LoongCollector为例,如需了解如何安装Logtail,请参考Logtail安装与配置。
连接Kubernetes集群,并根据地域选择对应命令,下载LoongCollector及其依赖组件:
中国地域:
wget https://aliyun-observability-release-cn-shanghai.oss-cn-shanghai.aliyuncs.com/loongcollector/k8s-custom-pkg/3.0.12/loongcollector-custom-k8s-package.tgz; tar xvf loongcollector-custom-k8s-package.tgz; chmod 744 ./loongcollector-custom-k8s-package/k8s-custom-install.sh
海外地域:
wget https://aliyun-observability-release-ap-southeast-1.oss-ap-southeast-1.aliyuncs.com/loongcollector/k8s-custom-pkg/3.0.12/loongcollector-custom-k8s-package.tgz; tar xvf loongcollector-custom-k8s-package.tgz; chmod 744 ./loongcollector-custom-k8s-package/k8s-custom-install.sh
进入
loongcollector-custom-k8s-package
目录,修改配置文件./loongcollector/values.yaml
。# ===================== 必需要补充的内容 ===================== # 管理采集日志的Project名,例如 k8s-log-custom-sd89ehdq。 projectName: "" # Project所属地域,例如上海:cn-shanghai region: "" # Project所属主账号uid,请用引号包围,例如"123456789" aliUid: "" # 使用网络,可选参数:公网Internet,内网Intranet,默认使用公网 net: Internet # 主账号或者子账号的AK,SK,需具备AliyunLogFullAccess系统策略权限 accessKeyID: "" accessKeySecret: "" # 自定义集群ID,命名只支持大小写,数字,短划线(-)。 clusterID: ""
在
loongcollector-custom-k8s-package
目录下执行如下命令,安装LoongCollector及其他依赖组件:bash k8s-custom-install.sh install
安装完成后,查看组件运行状态。
若Pod未成功启动,请确认values.yaml配置是否正确,相关镜像拉取是否成功。
# 检查Pod状态 kubectl get po -n kube-system | grep loongcollector-ds
同时,日志服务会自动创建如下资源,可登录日志服务控制台查看。
资源类型
资源名称
作用
Project
values.yaml文件中自定义的
projectName
的值资源管理单元,隔离不同业务日志。
机器组
k8s-group-${cluster_id}
日志采集节点集合。
Logstore
config-operation-log
重要请不要删除该Logstore。
存储loongcollector-operator组件的日志,其计费方式与普通Logstore相同,详见按写入数据量计费模式计费项。建议不要在此Logstore下创建采集配置。
如何让同一个日志文件或容器标准输出被多个采集配置同时采集?
默认情况下,日志服务为了防止数据重复,限制了每个日志源只能被一个采集配置采集:
一个 文本日志文件只能匹配一个 Logtail 采集配置;
一个 容器的标准输出(stdout) 也只能被一个标准输出采集配置采集。
登录日志服务控制台,进入目标Project。
在左侧导航选择
日志库,找到目标Logstore。
单击其名称前的
展开Logstore。
单击Logtail配置,在配置列表中,找到目标Logtail配置,单击操作列的管理Logtail配置。
在Logtail配置页面,单击编辑,下滑至输入配置区域:
采集文本文件日志:开启允许文件多次采集。
采集容器标准输出:开启允许标准输出多次采集。