本文基于DaemonSet模式,介绍如何通过日志服务控制台采集Kubernetes集群的文本日志和容器标准输出,涵盖了基础采集,结构化解析及高级处理的完整配置流程。
基础配置(必选):用于定义采集任务的核心参数,确保日志数据顺利采集并传输至指定Project下的Logstore。
解析配置(可选):根据日志格式选择内置解析功能(如Nginx/JSON/正则),将原始日志结构化解析为键值对数据,降低查询分析成本。
高级配置(可选):在完成基础采集配置后,对日志内容进行脱敏、过滤等处理,满足更精细化的日志采集需求。
Sidecar模式请参考采集集群文本日志(Sidecar)。
核心概念
在开始配置日志采集前,请先了解阿里云日志服务(SLS)的核心资源概念以及LoongCollector(Logtail)在Kubernetes环境中的运行模式。
什么是Project
Project是阿里云日志服务中的资源管理单元,用于隔离和控制不同项目或应用的日志数据。一个Project可以包含多个Logstore。您可以参考此处步骤预先创建好所需的Project。
登录日志服务控制台,单击创建Project,完成下述基础配置,其他配置保持默认即可:
所属地域:请根据日志来源等信息选择合适的阿里云地域,创建后不可修改。
Project名称:设置名称,名称在阿里云地域内全局唯一,创建后不可修改。
什么是Logstore
Logstore是日志数据的存储单元,用于存储日志。在Project内,您可以根据业务需求创建多个Logstore存储不同类型的日志,如使用两个Logstore分别存储Nginx访问日志和应用错误日志。您可以参考此处步骤预先创建一个基础Logstore。
|
LoongCollector(Logtail)运行模式
特性 | DaemonSet模式 | Sidecar模式 |
部署方式 | 每个节点部署1个采集容器 | 每个Pod部署1个采集容器 |
资源消耗 | 低(共享节点资源) | 较高(每个Pod单独占用) |
适用场景 | 节点级统一日志采集 | 特定应用独立隔离采集 |
隔离性 | 节点级共享 | Pod级独立 |
容器日志源
容器内日志包含两种日志来源:
日志来源 | 说明 |
容器标准输出与标准错误(stdout与stderr) | 容器运行过程中,程序直接打印到控制台的日志内容。 |
文本日志文件 | 采集容器内指定路径下的日志文件(支持通配符)。 |
前提条件
安装LoongCollector(Logtail)组件
若您的集群未安装LoongCollector(Logtail)组件,请参考此处步骤进行安装,本文以安装LoongCollector为例介绍。如需了解如何安装Logtail,请参考Logtail安装与配置。
LoongCollector 是阿里云日志服务(SLS)推出的新一代日志采集 Agent,是 Logtail 的升级版,二者不能同时存在。如果您当前正在使用 logtail-ds,并希望升级到 LoongCollector,请先卸载logtail-ds再安装LoongCollector。
ACK集群安装LoongCollector
此操作仅适用于阿里云容器服务专有版Kubernetes和托管版Kubernetes。
通过容器服务控制台安装LoongCollector,默认将日志发送到当前阿里云账号的日志服务中,如果您需要配置跨账号日志采集,即将当前账号下的ACK集群日志,发送至另一个阿里云账号的日志服务Project中,请参考如何将ACK集群日志传输到另一个阿里云账号的Project?
为已有的ACK集群安装LoongCollector组件
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,单击组件管理。
在日志与监控页签中,找到loongcollector,单击安装。
安装完成后,日志服务会自动在ACK所属地域下创建如下资源,您可登录日志服务控制台查看。
资源类型
资源名称
作用
Project
k8s-log-${cluster_id}
资源管理单元,隔离不同业务日志。
机器组
k8s-group-${cluster_id}
日志采集节点集合。
Logstore
config-operation-log
重要请不要删除该Logstore。
用于存储LoongCollector组件中的alibaba-log-controller日志,其收费标准与普通Logstore完全相同,具体请参见按写入数据量计费模式计费项。建议不要在此Logstore下创建采集配置。
创建存储采集日志的Logstore:登录日志服务控制台,在Project列表中单击默认创建的名为
k8s-log-${cluster_id}
的Project。在日志存储 > 日志库页签中,单击+图标。填写Logstore名称,其余配置无需修改,使用默认值即可。如需详细了解创建配置请参见管理Logstore。
新建ACK集群时安装LoongCollector组件
登录容器服务管理控制台,在左侧导航栏选择集群列表。
单击创建集群,在组件配置页面,选中使用日志服务。支持创建新Project或使用已有Project。
本文只描述日志服务相关配置,关于更多配置项说明,请参见创建ACK托管集群。
选择创建新Project,日志服务会自动创建如下资源,您可登录日志服务控制台查看。
资源类型
资源名称
作用
Project
k8s-log-${cluster_id}
资源管理单元,隔离不同业务日志。
机器组
k8s-group-${cluster_id}
日志采集节点集合。
Logstore
config-operation-log
重要请不要删除该Logstore。
用于存储LoongCollector组件中的alibaba-log-controller日志,其收费标准与普通Logstore完全相同,具体请参见按写入数据量计费模式计费项。建议不要在此Logstore下创建采集配置。
创建存储采集日志的Logstore:登录日志服务控制台,在Project列表中单击默认创建的名为
k8s-log-${cluster_id}
的Project。在日志存储 > 日志库页签中,单击+图标。填写Logstore名称,其余配置无需修改,使用默认值即可。如需详细了解创建配置请参见管理Logstore。
自建集群安装LoongCollector
安装之前,请确保您的集群满足Kubernetes 1.6及以上版本,且已安装kubectl。
连接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
,详细配置参数请参见LoongCollector安装(Kubernetes)。# ===================== 必需要补充的内容 ===================== # 本集群要采集的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
安装完成后,查看组件状态,若未成功启动,请确认values.yaml配置是否正确,相关镜像拉取是否成功。日志服务会自动创建如下资源,您可登录日志服务控制台查看。
# 检查Pod状态 kubectl get po -n kube-system | grep loongcollector-ds
资源类型 | 资源名称 | 作用 |
Project | values.yaml文件中自定义的 | 资源管理单元,隔离不同业务日志。 |
机器组 |
| 日志采集节点集合。 |
Logstore |
重要 请不要删除该Logstore。 | 用于存储LoongCollector组件中的alibaba-log-controller日志,其收费标准与普通Logstore完全相同,具体请参见按写入数据量计费模式计费项。建议不要在此Logstore下创建采集配置。 |
创建存储日志的Logstore:登录日志服务控制台,在Project列表区域单击名为k8s-log-{ClusterID}的目标Project,在日志存储 > 日志库页签中,单击+图标。填写Logstore名称,其余配置无需修改,使用默认值即可。如需详细了解创建配置请参见管理Logstore。
基础配置
在确认满足前提条件后,您可以开始进行基础配置。基础配置是设置日志采集的起点,包括选择采集源,配置机器组等,建立起从集群到日志服务的数据通道,确保原始日志能够顺利采集。
登录日志服务控制台,单击管理日志资源的Project,在日志库(Logstore)
|
采集容器标准输出(Stdout)
这是容器标准输出采集的最基础场景:仅采集容器的标准输出(Stdout)和标准错误(Stderr)原始日志,不做任何解析处理,示例如下:
原始日志 | 采集原始标准输出(Stdout) |
|
|
本文介绍如何配置采集容器标准输出-新版配置,旧版采集配置请参考采集自建集群标准输出-旧版(DaemonSet)。
在快速数据接入弹框中,在搜索框中按照K8s-标准输出-新版进行关键字搜索,单击K8s-标准输出-新版卡片的立即接入。
在机器组配置页面,根据您的集群类型选择部署方式,ACK Daemonset或自建集群Daemonset。在源机器组列表中勾选
k8s-group-${cluster_id}
并点击>添加到应用机器组中,单击下一步。在Logtail配置页面进行全局配置和输入配置,其他配置保持默认即可:
全局配置:填写配置名称。
输入配置:按需选择打开标准输出或标准错误开关(默认全部打开)。
在查询分析配置页面预览数据,单击自动生成索引,日志服务将生成字段索引,通过此索引针对特定字段进行精确查询,从而减少索引费用和提高查询效率。完成后单击下一步结束配置。
采集集群文本日志
这是文本日志采集的最基础场景:采集容器内原始日志文件内容,不进行任何解析,将原始日志整行上传至日志服务的content
字段,示例如下:
原始日志 | 原始日志整行存储至content |
|
|
在快速数据接入弹框中,在搜索框中按照Kubernetes-文件进行关键字搜索,单击Kubernetes-文件卡片的立即接入。
在机器组配置页面,根据您的集群类型选择部署方式,ACK Daemonset或自建集群Daemonset。在源机器组列表中勾选
k8s-group-${cluster_id}
并点击>添加到应用机器组中,单击下一步。在Logtail配置页面进行全局配置和输入配置,其他配置保持默认即可:
全局配置:填写配置名称。
输入配置:确认输入配置中的文件路径类型,并填写文件路径,其余配置保持默认。
Logtail部署模式:选择
Daemonset
。文件路径类型:支持配置容器内路径和宿主机路径。
容器内路径:采集容器内文本日志文件时,请选择容器内路径。
宿主机路径:采集集群节点上的服务日志时,请选择宿主机路径。
文件路径:日志采集的路径,必须为绝对路径,Linux下以“/”开头,如
/data/mylogs/**/*.log
,表示/data/mylogs
目录下所有后缀名为.log
的文件。最大目录监控深度:文件路径中通配符
**
匹配的最大目录深度。默认为0,表示只监控本层目录,取值范围是0~1000。说明建议您设置深度为0,配置路径到文件所在的目录。
(可选)如需对原始日志进行结构化解析,请参考解析配置添加处理插件;如需采集多行日志,对原始日志进行脱敏、过滤等处理时,请参考高级配置部分进行采集配置。
在查询分析配置页面预览数据,单击自动生成索引,日志服务将生成字段索引,通过此索引针对特定字段进行精确查询,从而减少索引费用和提高查询效率。完成后单击下一步结束配置。
解析配置
在完成基础配置后,您可以根据日志格式使用对应的处理插件对原始日志进行结构化解析,方便后续查询分析。对比示例(以Nginx日志为例)如下:
原始日志: | |
基础配置采集结果 | 选择处理插件(Nginx解析插件)解析结果 |
|
|
以下是常见的处理插件配置:
Logtail提供了处理插件用于将原始日志进一步解析为结构化数据,处理插件分为原生处理插件和扩展处理插件,此处仅覆盖原生处理插件的使用。
无论是在创建新的采集配置还是修改现有配置时,都需要在Logtail配置 > 处理配置区域灵活添加解析插件,以实现日志的结构化解析。
修改已有配置时:需先进入Logtail编辑页面,在目标Project页面中单击
展开目标Logstore,单击Logtail配置,单击目标Logtail配置操作列的管理Logtail配置,在配置页面单击编辑。然后在Logtail配置 > 处理配置区域,按需从下列场景中选择合适的解析插件进行配置。
创建新配置时:可以直接在Logtail配置 > 处理配置区域,按需从下列场景中选择合适的解析插件修改采集配置规则:
正则解析
示例:使用正则表达式(\S+)\s-\s(\S+)\s\[([^]]+)]\s"(\w+)\s(\S+)\s([^"]+)"\s(\d+)\s(\d+)\s"([^"]+)"\s"([^"]+).*
进行解析。
原始日志 | 自定义正则解析 |
|
|
通过正则表达式提取日志字段,并将日志解析为键值对形式。在处理配置区域配置正则解析插件,进行如下配置,其余配置保持默认,完成后单击下一步:
添加日志样例:请务必使用实际场景中待采集日志的样例,配置日志样例可协助您配置日志处理相关参数,降低配置难度。
单击添加处理插件,选择正则解析:
正则表达式:用于匹配日志,支持自动生成或手动输入的方式。
如果提供了日志样例,可以通过单击自动生成正则表达式,在日志样例中划选需要提取的日志内容,单击生成正则,自动生成正则表达式。
根据日志内容手动输入正则表达式,如果提供了日志样例,可以单击验证,测试正则表达式是否能够正确解析日志内容。
日志提取字段:为提取的日志内容(Value),设置对应的字段名(Key)。
在查询分析配置页面预览数据,单击自动生成索引,日志服务将生成字段索引。通过此索引针对特定字段进行精确查询,从而减少索引费用和提高查询效率。完成后单击下一步结束配置。
分隔符解析
示例:
原始日志 | 按指定字符 |
|
|
通过分隔符将日志内容结构化,解析为多个键值对形式。在处理配置区域配置分隔符解析插件,进行如下配置,其余配置保持默认,完成后单击下一步:
单击添加处理插件,选择分隔符解析。
分隔符:根据日志内容选择正确的分隔符。以CSV文件格式为例,单击下拉列表选择自定义,并输入半角逗号(,)。
引用符:当日志字段内容中包含分隔符时,需要指定引用符进行包裹,被引用符包裹的内容会被解析为一个完整字段。
日志提取字段:按分隔顺序为分隔后的值设置Key,Key只能包括字母、数字或下划线(_),且只能以字母或下划线(_)开头。最大长度为128字节。
在查询分析配置页面预览数据,单击自动生成索引,日志服务将生成字段索引。通过此索引针对特定字段进行精确查询,从而减少索引费用和提高查询效率。完成后单击下一步结束配置。
标准JSON解析
示例:
原始日志 | 标准JSON键值自动提取 |
|
|
将Object类型的JSON日志结构化,解析为键值对形式。在处理配置区域配置JSON解析插件,进行如下配置,其余配置保持默认,完成后单击下一步:
单击添加处理插件,选择JSON解析:
原始字段:解析日志前,用于存放日志内容的原始字段,默认值为content。
在查询分析配置页面预览数据,单击自动生成索引,日志服务将生成字段索引。通过此索引针对特定字段进行精确查询,从而减少索引费用和提高查询效率。完成后单击下一步结束配置。
嵌套JSON解析
示例:原始日志如下,对原始字段进行JSON展开,并使用展开深度作为前缀。
{"s_key":{"k1":{"k2":{"k3":{"k4":{"k51":"51","k52":"52"},"k41":"41"}}}}}
展开深度 | 多层级JSON解析日志 |
0 |
|
1 |
|
通过指定展开深度,将嵌套的JSON日志解析为键值对形式。在处理配置区域配置展开JSON字段,进行如下配置,其余配置保持默认,完成后单击下一步:
单击添加处理插件,选择拓展处理插件 > 展开JSON字段。
原始字段:需要展开的原始字段名。
JSON展开深度:默认值为0,表示展开到能解析成功的最深的地方;1表示当前层级,以此类推。
JSON展开连接符:JSON展开时字段名的连接符,默认值为下划线(_)。
JSON展开字段前缀:指定JSON展开后字段名的前缀。
展开数组:指定是否展开数组类型的字段,如
{"k":["1","2"]}
展开后会变为{"k[0]":"1","k[1]":"2"}
。若您想修改字段名,可以组合使用重命名字段插件,将展开后的字段名映射为新的字段名,从而满足日志处理和分析的需求。
在查询分析配置页面预览数据,单击自动生成索引,日志服务将生成字段索引。通过此索引针对特定字段进行精确查询,从而减少索引费用和提高查询效率。完成后单击下一步结束配置。
JSON数组解析
示例:
原始日志 | 提取JSON数组结构 |
|
|
使用json_extract
函数,从JSON数组中提取JSON对象。在处理配置区域进行如下配置,其余配置保持默认,完成后单击下一步:
处理模式:选择SPL。
SPL语句:您可以使用
json_extract
函数,从JSON数组中提取JSON对象。更多json函数请参考JSON函数的基本语法及示例。示例:从日志字段
content
中提取 JSON 数组中的元素,并将结果分别存储在新字段json1
和json2
中。* | extend json1 = json_extract(content, '$[0]'), json2 = json_extract(content, '$[1]')
在查询分析配置页面预览数据,单击自动生成索引,日志服务将生成字段索引。通过此索引针对特定字段进行精确查询,从而减少索引费用和提高查询效率。完成后单击下一步结束配置。
Nginx日志解析
示例:
原始日志 | 根据 |
|
|
根据log_format中的定义将日志内容结构化,解析为多个键值对形式。在处理配置区域配置Nginx解析插件,进行如下配置,其余配置保持默认,完成后单击下一步:
单击添加处理插件,选择NGINX模式解析。
在NGINX日志配置中输入如下内容后单击确认。
log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$request_time $request_length ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent"';
说明Nginx模式插件支持根据log_format中的定义将日志内容结构化,解析为多个键值对形式。如默认内容不符合您的需求,可使用自定义格式。
在查询分析配置页面预览数据,单击自动生成索引,日志服务将生成字段索引。通过此索引针对特定字段进行精确查询,从而减少索引费用和提高查询效率。完成后单击下一步结束配置。
Apache日志解析
示例:combined
格式日志解析结果如下
原始日志 | Apache通用日志格式 |
|
|
根据Apache日志配置文件中的定义将日志内容结构化,解析为多个键值对形式。在处理配置区域配置Apache模式解析插件,进行如下配置,其余配置保持默认,完成后单击下一步:
单击添加处理插件,选择APACHE模式解析,此处以combined日志格式为例。
日志格式:combined
APACHE配置字段:当日志格式为combined时,此处会自动填充对应格式的配置字段,请确认是否和Apache配置文件中定义的格式一致。
在查询分析配置页面预览数据,单击自动生成索引,日志服务将生成字段索引。通过此索引针对特定字段进行精确查询,从而减少索引费用和提高查询效率。完成后单击下一步结束配置。
高级配置
在完成基础配置后,您可以参考下述操作采集多行日志、对日志进行过滤、脱敏等处理,以满足更精细化的日志采集需求。以下是常见高级配置及其功能:
无论是在创建新的采集配置还是修改现有配置时,都需要在Logtail配置页面修改采集配置规则。
修改已有配置时:需先进入Logtail编辑页面,在目标Project页面中单击展开目标Logstore,单击Logtail配置,单击目标Logtail配置操作列的管理Logtail配置,在配置页面单击编辑。
创建新配置时:您可直接在Logtail配置页面,按需从下列场景中选择合适的解析插件修改采集配置规则:
配置多行日志采集:当一条日志内容(如异常堆栈信息)占用多行时,需启用多行模式,并配置行首正则表达式以匹配日志的起始行,将占用多行的日志作为一条日志采集并存储到日志服务。
允许日志(文本文件/容器标准输出)多次采集:允许一个文件日志或容器标准输出被多个LoongCollector(Logtail)配置采集。
配置日志主题类型:为不同的日志流设置不同的主题(Topic),可用于组织和分类日志数据,更好地管理和检索相关日志。
指定容器采集(过滤与黑名单):需要指定特定容器与路径采集时,包括白名单与黑名单配置。
日志标签富化:将环境变量、Pod标签相关的元信息添加到日志中,作为日志的扩展字段。
日志脱敏处理:对日志中的敏感信息进行脱敏处理后保存到日志服务。
日志内容过滤:当原始日志中有大量无效日志无需保存到日志服务时,可使用日志过滤来剔除。
指定写入日志时间:用于解析日志中的时间字段,并将解析结果设置为日志的
__time__
字段。日志压缩:如果您想要优化日志传输效率,您可配置压缩方式,支持
lz4
和zstd
。
对比示例(以脱敏插件为例)
原始日志: | |
JSON文本日志采集结果 | 脱敏插件解析结果 |
|
|
配置多行日志采集
日志服务默认为单行模式,按行进行日志的切分与存储,导致含堆栈信息的多行日志被逐行切分,每一行作为独立日志存储和展示,不利于分析。
针对上述问题,可通过开启多行模式来改变日志服务的切分方式,并通过配置正则表达式匹配日志起始行,从而将原始日志按照起始行规则进行切分和存储。示例如下:
原始日志:
[2023-10-01T10:30:01,000] [INFO] java.lang.Exception: exception happened
at TestPrintStackTrace.f(TestPrintStackTrace.java:3)
at TestPrintStackTrace.g(TestPrintStackTrace.java:7)
at TestPrintStackTrace.main(TestPrintStackTrace.java:16)
单行模式与多行模式对比:
单行模式:每行作为独立日志,堆栈信息被拆散,丢失上下文 | 多行模式:通过行首正则识别完整日志,保留完整语义结构 |
| |
在Logtail配置页面进行多行模式配置,配置完成后单击保存即可:
处理配置:开启多行模式。
类型:选择自定义或多行JSON。
自定义:原始日志的格式不固定,需配置行首正则表达式,来标定每一条日志的起始行。
行首正则表达式:支持自动生成或手动输入,正则表达式需要能够匹配完整的一行数据,如上述示例中匹配的正则表达式为
\[\d+-\d+-\w+:\d+:\d+,\d+]\s\[\w+]\s.*
。单击自动生成正则表达式,然后在日志样例文本框中,划选需提取的日志内容,单击生成正则。
单击手动输入正则表达式,输入正则表达式。配置完成后,单击验证。
多行JSON:当原始日志均为标准JSON格式时选择,LoongCollector(Logtail)会自动处理单条JSON日志内部的换行。
切分失败处理方式:
丢弃:直接丢弃这段日志。
保留单行:将每行日志文本单独保留为一条日志。
允许日志(文本文件/容器标准输出)多次采集
在Logtail配置 > 输入配置区域进行如下配置:
采集文本文件日志:开启允许文件多次采集。默认一个日志文件只能匹配一个LoongCollector(Logtail)配置,开启后,同一个文件支持被多个LoongCollector(Logtail)配置采集。
采集容器标准输出:开启允许标准输出多次采集。默认情况下,一个容器的标准输出日志只能匹配一个Logtail新版标准输出采集配置,如果需要被多个新版标准输出采集配置采集,需打开此开关。
配置日志主题类型
在Logtail配置页面进行如下配置,配置完成后单击保存即可:
全局配置 > 其他全局配置:配置日志主题类型。
日志主题类型:选择日志主题(Topic)的生成方式。
机器组Topic:日志服务支持将一个LoongCollector(Logtail)配置应用到多个机器组。使用机器组Topic可用于区分来自不同机器组的日志。LoongCollector(Logtail)上报数据时,会将服务器所在机器组的机器组Topic作为日志主题上传至Project。用户在查询日志时需要指定日志主题作为查询条件。
文件路径提取:若不同的用户或应用将日志保存在不同的顶级目录中,但下级目录和日志文件名相同,日志服务在采集日志时无法明确区分日志是由哪个用户或应用产生的。此时文件路径提取方式可用于区分不同用户或应用产生的日志数据。通过正则表达式来完整匹配文件路径,并将表达式匹配的结果(用户名或应用名)作为日志主题(Topic)上传至日志服务。
使用正则从文件路径中提取Topic
说明文件路径的正则表达式中,需要对正斜线(/)进行转义。
场景1:不同用户将日志记录在不同目录下,但是日志文件名称相同,目录路径如下所示。
/data/logs ├── userA │ └── serviceA │ └── service.log ├── userB │ └── serviceA │ └── service.log └── userC └── serviceA └── service.log
如果在Logtail配置中仅配置文件路径为
/data/logs
且文件名称为service.log
,LoongCollector(Logtail)会将三个service.log
文件中的内容采集至同一个Logstore中,因此无法区分日志具体由哪个用户产生。您可以使用正则表达式提取文件路径中的值,生成不同的日志主题。正则表达式
提取结果
\/data\/logs\/(.*)\/serviceA\/.*
__topic__: userA __topic__: userB __topic__: userC
场景2:如果单个日志主题不足以区分日志的来源,您可以在日志文件路径中配置多个正则捕获组来提取关键信息。其中捕获组包括命名捕获组(?P<name>)与非命名捕获组两类。
如果使用命名捕获组,则生成的tag字段为
__tag__:{name}
;如果使用非命名捕获组,则生成的tag字段为
__tag__:__topic_{i}__
,其中{i}
为捕获组的序号。
说明当正则表达式中存在多个捕获组时,不会生成
__topic__
字段。例如,文件路径为
/data/logs/userA/serviceA/service.log
,您可以通过以下方式提取文件路径中的多个值:示例
正则表达式
提取结果
使用非命名捕获组进行正则提取。
\/data\/logs\/(.*?)\/(.*?)\/service.log
__tag__:__topic_1__: userA __tag__:__topic_2__: serviceA
使用命名捕获组进行正则提取。
\/data\/logs\/(?P<user>.*?)\/(?P<service>.*?)\/service.log
__tag__:user: userA __tag__:service: serviceA
验证:配置完成后,根据日志主题查询日志:在日志查询分析页面,输入对应生成的日志主题,例如
__topic__: userA
、__tag__:__topic_1__: userA
查询相应主题的日志。更多信息,请参见查询语法与功能。自定义:输入
customized:// + 自定义主题名
,使用自定义的静态日志主题。
指定容器采集(过滤与黑名单)
在Logtail配置页面进行如下配置,配置完成后单击保存即可:
输入配置:
容器过滤:打开容器过滤开关,并单击添加,选择对应的过滤方式进行配置,多个条件之间为“且”的关系。
环境变量黑/白名单:指定待采集容器的环境变量条件。
K8s Pod标签黑/白名单:指定待采集容器所在 pod 的标签条件。
K8s Pod 名称正则匹配:通过Pod名称指定待采集的容器
K8s Namespace 正则匹配:通过Namespace名称指定待采集的容器。
K8s 容器名称正则匹配:通过容器名称指定待采集的容器。
容器label黑/白名单:采集容器标签符合条件的容器,docker场景使用,K8s场景不推荐使用。
其他输入配置:在其他输入配置中打开采集黑名单开关,单击添加,选择对应的黑名单方式进行配置。
支持完整匹配和通配符匹配目录和文件名。其中,通配符只支持星号(*)和半角问号(?)。
文件路径黑名单:配置采集时需要忽略的文件路径,相关示例如下:
/home/admin/private*.log
:在采集时忽略/home/admin/
目录下所有以private开头,以.log结尾的文件。/home/admin/private*/*_inner.log
:在采集时忽略/home/admin/
目录下以private开头的目录内,以_inner.log结尾的文件。
文件黑名单:配置采集时需要忽略的文件名,示例如下:
app_inner.log
:在采集时忽略所有名为app_inner.log
的文件。
目录黑名单:目录路径不能以正斜线(/)结尾,以下为目录路径示例:
/home/admin/dir1/
:目录黑名单不会生效。/home/admin/dir*
:在采集时忽略/home/admin/
目录下所有以dir开头的子目录下的文件。/home/admin/*/dir
:在采集时忽略/home/admin/
目录下二级目录名为dir的子目录下的所有文件。例如/home/admin/a/dir
目录下的文件被忽略,/home/admin/a/b/dir
目录下的文件被采集。
日志标签富化
在Logtail配置页面进行如下配置,配置完成后单击保存即可:
输入配置:
日志标签富化:开启日志标签富化,在日志中额外添加与容器有关的tag。单击添加:
环境变量相关:配置环境变量名和tag名,环境变量值将存放在tag名中。
环境变量名:指定需要提取的环境变量名称。
tag名:为该环境变量定义的标签名称
Pod标签相关:配置Pod标签名和tag名,Pod标签值将存放在tag名中。
Pod标签名:指定需要提取的 Kubernetes Pod 标签名称。
tag名:为该标签定义的标签名称
日志脱敏处理
示例:
原始日志 | 解析日志 |
|
|
在Logtail配置页面,单击处理配置页签中的添加处理插件,插件类型选择原生处理插件 > 脱敏处理,进行如下配置:
日志内容过滤
在Logtail配置页面,单击处理配置页签中的添加处理插件,插件类型选择原生处理插件 > 原生插件:过滤处理,进行白名单配置:配置后只采集符合白名单条件的日志。
字段名:需要进行过滤的日志字段。
字段值:用于过滤的正则表达式,仅支持全文匹配,不支持关键词部分匹配。
指定写入日志时间
日志压缩
在Logtail配置页面进行如下配置:
输出配置:指定传输数据时的压缩方式。
说明通过SDK配置Logtail时,如果未指定该字段,默认压缩方式与Logtail版本有关的:
Logtail 1.3.4及之前的版本,默认为lz4。
Logtail 1.3.4之后的版本,默认为zstd。
通过SDK配置LoongCollector时,如果未指定该字段,默认压缩方式为zstd。
lz4:压缩速度快,压缩率较低。
zstd:压缩率高,速度略低,内存占用高。
后续步骤
完成日志采集后,您可以在日志服务控制台,查询到相关数据,建议您继续学习以下内容,来更好的使用和了解日志服务:
日志查询与分析:在对应的Logstore查询和分析页面,配置索引后,可以在搜索栏输入查询或分析语句,对日志进行查询和分析。如果您初次使用,建议您可以使用内置的通过AI智能生成查询与分析语句(Copilot),自动生成符合您需求的查询分析语句。更多内容,请参考查询与分析快速指引。
采集的每条容器文本日志中默认包含以下字段信息:
字段名称
说明
__tag__:__hostname__
容器宿主机的名称。
__tag__:__path__
容器内日志文件的路径。
__tag__:_container_ip_
容器的IP地址。
__tag__:_image_name_
容器使用的镜像名称。
__tag__:_pod_name_
Pod的名称。
__tag__:_namespace_
Pod所属的命名空间。
__tag__:_pod_uid_
Pod的唯一标识符(UID)。
数据可视化看板:如果您需要将查询分析的结果生成可视化图表,可以使用日志服务仪表盘来进行可视化大盘的设计,借助可视化仪表盘监控关键指标趋势,具体请参考快速创建仪表盘。
数据异常自动预警:您也可以为日志设置告警策略,来方便的实时感知系统的异常情况,具体请参考快速设置日志告警。
通过这三步闭环管理,可显著提升运维效率并保障系统稳定性。
容器日志采集无数据排查思路
检查是否有增量日志:配置LoongCollector(Logtail)采集后,如果待采集的日志文件没有新增日志,则LoongCollector(Logtail)不会采集该文件。
2.查看LoongCollector(Logtail)运行日志
查看LoongCollector(Logtail)其自身的运行日志以获取详细错误信息。
登录Logtail容器:
查询Logtail的Pod。
kubectl get po -n kube-system | grep logtail
系统将返回如下类似结果。
logtail-ds-****d 1/1 Running 0 8d logtail-ds-****8 1/1 Running 0 8d
执行如下命令,登录Pod。
kubectl exec -it -n kube-system logtail-ds-****d -- bash
其中,
logtail-ds-****d
为Pod ID,请根据实际值替换。
查看Logtail运行日志:
Logtail日志存储在Logtail容器中的
/usr/local/ilogtail/
目录中,文件名为ilogtail.LOG
和logtail_plugin.LOG
。登录Logtail容器,执行以下命令查看日志文件:打开/usr/local/ilogtail/目录。 cd /usr/local/ilogtail 查看ilogtail.LOG和logtail_plugin.LOG文件。 cat ilogtail.LOG cat logtail_plugin.LOG
目的:查看错误日志的告警类型,并根据日志服务采集数据常见的错误类型查询对应的解决办法。
3.检查机器组心跳
操作:检查机器组心跳状态:前往资源 > 机器组页面,单击目标机器组名称,在机器组配置 > 机器组状态区域,查看心跳状态并记录心跳状态为ok的节点数。
检查容器集群中Worker节点数。
执行如下命令,查看集群中Worker节点数。
kubectl get node | grep -v master
系统会返回如下类似结果。
NAME STATUS ROLES AGE VERSION cn-hangzhou.i-bp17enxc2us3624wexh2 Ready <none> 238d v1.10.4 cn-hangzhou.i-bp1ad2b02jtqd1shi2ut Ready <none> 220d v1.10.4
对比心跳状态为OK的节点数是否和容器集群中Worker节点数一致。根据对比结果选择排查方式。
机器组中所有节点的心跳状态均为Failed:
如果是自建集群,请检查以下参数是否配置正确:
{your-project-suffix}
、{regionId}
、{aliuid}
、{access-key-id}
和{access-key-secret}
是否已正确填写。如果填写错误,请执行
helm del --purge alibaba-log-controller
命令,删除安装包,然后重新安装。
机器组心跳状态为OK的节点数量少于集群中的Worker节点数量。
判断是否已使用YAML文件手动部署DaemonSet。
执行如下命令。如果存在返回结果,则表示您之前已使用YAML文件手动部署DaemonSet。
kubectl get po -n kube-system -l k8s-app=logtail
根据实际值,配置${your_region_name}、${your_aliyun_user_id}、${your_machine_group_name}等参数。
执行如下命令,更新文件。
kubectl apply -f ./logtail-daemonset.yaml
4.检查采集配置过滤条件
操作:在日志服务控制台,检查您的Logtail采集配置。重点关注Logtail配置中的IncludeLabel、ExcludeLabel、IncludeEnv、ExcludeEnv等配置是否符合您的采集需求。
此处的Label为容器Label,即Docker inspect中的Label,不是Kubernetes中的Label。
您可以将IncludeLabel、ExcludeLabel、IncludeEnv和ExcludeEnv配置临时去除,查看是否可以正常采集到日志。如果可以,则说明是上述参数的配置存在问题。
常见问题
如何将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
,详细配置参数请参见LoongCollector安装(Kubernetes)。# ===================== 必需要补充的内容 ===================== # 本集群要采集的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
安装完成后,查看组件状态,若未成功启动,请确认values.yaml配置是否正确,相关镜像拉取是否成功。日志服务会自动创建如下资源,您可登录日志服务控制台查看。
# 检查Pod状态 kubectl get po -n kube-system | grep loongcollector-ds
安装完LoongCollector(Logtail)之后,您可以参考基础配置定义采集任务的核心参数,日志数据顺利采集并传输至指定Project下的Logstore。
更多信息
全局配置参数介绍
配置项 | 说明 |
配置名称 | Logtail配置名称,在其所属Project内必须唯一。创建Logtail配置成功后,无法修改其名称。 |
日志主题类型 | 选择日志主题(Topic)的生成方式。包含机器组Topic,文件路径提取,自定义三种方式。 |
高级参数 | 其它可选的与配置全局相关的高级功能参数,请参见创建Logtail流水线配置。 |
输入配置参数介绍
配置项 | 说明 |
Logtail部署模式 | DaemonSet:在集群的每个Node节点上部署一个 LoongCollector,负责采集该节点上所有容器的日志。 Sidecar:每个容器组(Pod)运行一个LoongCollector容器,用于采集当前容器组(Pod)所有容器(Containers)的日志。不同Pod的日志采集相互隔离。 |
文件路径类型 | 支持配置容器内路径和宿主机路径。
|
文件路径 | 根据日志在主机(例如ECS)上的位置,设置日志目录和文件名称。
目录名和文件名均支持完整模式和通配符模式,文件名规则请参见Wildcard matching。其中,日志路径通配符只支持星号(*)和半角问号(?)。 日志文件查找模式为多层目录匹配,即符合条件的指定目录(包含所有层级的目录)下所有符合条件的文件都会被查找到。例如:
|
最大目录监控深度 | 设置日志目录被监控的最大深度,即文件路径中通配符 |
标准输出 | 打开标准输出后,Logtail将采集容器标准输出。 |
标准错误 | 打开标准错误后,Logtail将采集容器标准错误。 |
允许标准输出多次采集 | 默认情况下,一个容器的标准输出日志只能匹配一个Logtail新版标准输出采集配置。如果标准输出需要被多个新版标准输出采集配置采集,需打开允许标准输出多次采集开关。 |
启用容器元信息预览 | 打开启用容器元信息预览后,您可以在创建Logtail配置后,查看容器元信息,包括匹配容器信息和全量容器信息。 |
容器过滤 |
K8s Pod名称正则匹配 通过Pod名称指定待采集的容器,支持正则匹配。例如设置为 K8s Namespace正则匹配 通过Namespace名称指定采集的容器,支持正则匹配。例如设置为 K8s容器名称正则匹配 通过容器名称指定待采集的容器(Kubernetes容器名称是定义在spec.containers中),支持正则匹配。例如设置为 容器label白名单 容器Label白名单,用于指定待采集的容器。默认为空,表示采集所有容器的标准输出。如果您要设置容器Label白名单,那么LabelKey必填,LabelValue可选填。
多个白名单之间为或关系,即只要容器Label满足任一白名单即可被匹配。 容器label黑名单 容器Label黑名单,用于排除不采集的容器。默认为空,表示不排除任何容器。如果您要设置容器Label黑名单,那么LabelKey必填,LabelValue可选填。
多个黑名单之间为或关系,即只要容器Label满足任一黑名单对即可被排除。 环境变量白名单 环境变量白名单,用于指定待采集的容器。默认为空,表示采集所有容器的标准输出。如果您要设置环境变量白名单,那么EnvKey必填,EnvValue可选填。
多个白名单之间为或关系,即只要容器的环境变量满足任一键值对即可被匹配。 环境变量黑名单 环境变量黑名单,用于排除不采集的容器。默认为空,表示不排除任何容器。如果您要设置环境变量黑名单,那么EnvKey必填,EnvValue可选填。
多个黑名单之间为或关系,即只要容器的环境变量满足任一键值对即可被排除。 K8s Pod标签白名单 通过Kubernetes Label白名单指定待采集的容器。如果您要设置Kubernetes Label白名单,那么LabelKey必填,LabelValue可选填。
多个白名单之间为或关系,即只要Kubernetes Label满足任一白名单即可被匹配。 说明
K8s Pod标签黑名单 通过Kubernetes Label黑名单排除不采集的容器。如果您要设置Kubernetes Label黑名单,那么LabelKey必填,LabelValue可选填。
多个黑名单之间为或关系,即只要Kubernetes Label满足任一黑名单对即可被排除。 说明
|
日志标签富化 | 您可以将环境变量和Kubernetes Label添加到日志,作为日志标签。 环境变量相关 设置环境变量扩展字段后,日志服务将在日志中新增环境变量相关字段。例如设置环境变量名为VERSION,设置tag名为env_version,当容器中包含环境变量 Pod标签相关 设置Kubernetes Pod扩展字段后,日志服务将在日志中新增Kubernetes Pod相关字段。例如设置Pod标签名为app,设置tag名为 |
文件编码 | 选择日志文件的编码格式。 |
首次采集大小 | 配置首次生效时,匹配文件的起始采集位置距离文件结尾的大小。首次采集大小设定值为1024 KB。
您可以通过此处修改首次采集大小,取值范围为0~10485760,单位为KB。 |
采集黑名单 | 打开采集黑名单开关后,可进行黑名单配置,即可在采集时忽略指定的目录或文件。支持完整匹配和通配符匹配目录和文件名。其中,通配符只支持星号(*)和半角问号(?)。 重要
支持按照文件路径黑名单、文件黑名单、目录黑名单设置,详细说明如下: 文件路径黑名单
文件黑名单选择文件黑名单,配置文件名为 目录黑名单
|
允许文件多次采集 | 默认情况下,一个日志文件只能匹配一个Logtail配置。如果文件中的日志需要被采集多份,需要打开允许文件多次采集开关。 |
高级参数 | 其它可选的与文件输入插件相关的高级功能参数,请参见创建Logtail流水线配置。 |
处理配置参数介绍
配置项 | 说明 |
日志样例 | 待采集日志的样例,请务必使用实际场景的日志。日志样例可协助您配置日志处理相关参数,降低配置难度。支持添加多条样例,总长度不超过1500个字符。
|
多行模式 |
|
处理模式 | 处理插件组合,包括原生插件和拓展插件。有关处理插件的更多信息,请参见处理插件概述。 重要 处理插件的使用限制,请以控制台页面的提示为准。
|