最近更新时间:2026-01-29 10:25:41
金山云容器服务(KCE)为用户提供Kubernetes集群内容器日志采集服务,并支持将采集的容器日志数据推送到金山云日志服务KLog,以满足用户收集、存储、分析和呈现业务日志信息的需求,达到提升运维效率和快速定位线上问题的目标。
用户需手动为每个Kubernetes集群启用容器日志采集服务,金山云KCE将以DaemonSet方式在集群中部署容器日志采集客户端,然后基于用户配置的容器日志采集规则,从日志源(容器标准输出日志、容器内文件日志、主机内文件日志)将数据收集并发送到日志消费端KLog进行各类统计和分析。
启用容器日志采集服务会占用您集群中的部分资源(默认:CPU=0.1至1核,Memory=100至500MB;可根据需求自行调整)。
请确保集群内各节点可以访问日志消费端KLog。
登录容器服务控制台。
在左侧导航栏中,选择运维管理,进入日志管理V2页面。
按需选择地域和集群,单击申请开通。
在弹出的开通日志收集服务对话框中,单击开通,即完成容器日志采集服务的启用。
登录容器服务控制台。
在左侧导航栏中,选择运维管理,进入日志管理V2页面。
按需选择地域和集群,单击新建/新建日志采集规则,为已经启用容器日志采集服务的集群配置日志采集规则。
在新建日志采集规则页面中,输入规则名称、选择日志类型、配置日志源和日志消费端、选择是否开启日志多行合并功能。
日志采集规则名称:必须集群内全局唯一,不超过40个字符,只能包含小写字母、数字及分隔符("-"、"_"、"."),且必须以小写字母、数字开头和结尾。
日志类型支持:容器标准输出、容器文件路径、主机文件路径。
容器标准输出类型时,将会采集stdout、stderr日志(可pod所在主机中的/var/log/pods目录下查看):
支持选择所有容器:此集群内所有容器。
支持选择指定负载:按命名空间选择所有/指定工作负载包含的容器。
支持指定 Pod Label:匹配指定 label 的 Pod 的容器。
容器文件路径类型时,将会采集容器中指定的绝对路径的日志:
支持选择集群内单个工作负载下的容器的日志采集路径。
主机文件路径类型时:
支持集群内任意指定节点内的文件日志,并支持用户自定义添加Label(以Key-Value形式),以便后续进行分析归类。
日志源:根据选择的日志类型,进行配置。
日志消费端:支持金山云日志服务KLog:日志项目+日志池。
日志多行合并:对于Java异常堆栈、JSON日志通常跨越多行等场景,您可根据自身需求设置可用的合理的匹配规则,日志会根据规则进行合并,达到整合的目的。值得注意的是,若日志与正则表达式匹配失败,会持续追加到上一行合并,可能导致日志合并超长无法实时推送或部分日志丢失。追加合并会受到以下制约;
行数限制(max_line):500行
字节限制(maxbyte):10485760字节
时间限制:默认 5秒 内无新日志产生时,已追加内容会合成一条发送
达到任一限制会触发日志的截断发送,开启新一轮聚合。 金山云日志服务支持的正则表达式模式与Logstash支持的正则表达式有部分区别。部分写法规则可见下方例子,可支持的正则表达式详细信息可以查看https://pkg.go.dev/regexp/syntax。
量词
写法 | 含义 |
| 0 次或多次 |
| 1 次或多次 |
| 0 次或 1 次 |
| 正好 n 次 |
| 至少 n 次 |
| n 到 m 次 |
a+ → a、aaa(a出现1次或多次)
a{2,5} → aa、aaaa(a出现2次到5次)字符类
写法 | 含义 |
| 任意单个字符(不含换行) |
| 数字 |
| 非数字 |
| 单词字符 |
| 非单词字符 |
| 空白符(空格/Tab/换行等) |
| 非空白符 |
| a 或 b 或 c |
| 非 a/b/c |
| 范围(表示小写字母a到z) |
\w+ → abc32_gf6(匹配字母、数字或下划线)
[xyz] → 匹配单个字符x或y或z, 但不匹配xy、xz、xyz等组合锚点(Anchors)
写法 | 含义 |
| 匹配行或者字符串的起始位置 |
| 匹配行或者字符串的结束位置 |
| 匹配文本的起始位置 |
| 匹配文本的结束位置 |
| 匹配单词边界位置 |
| 匹配非单词边界位置 |
示例:
^abc$ → 只能是 abc
\bword\b → 匹配单独的"word",但不匹配"words"或"sword"
\Bword\B → 匹配 "sword1" 中的 "word",但不匹配 "password" 或 "words"分组与或
写法 | 含义 |
| 捕获分组 |
| 命名分组 |
| 整体重复 |
| a或b,优先匹配a |
示例:
^(INFO|WARN|ERROR) → 匹配以INFO 或 WARN 或 ERROR开头的行
(?P<year>\d{4}) → 给匹配到的4位数字命名为"year"转义
写法 | 含义 |
| 字面点号 |
| 字面星号 |
| 字面加号 |
| 字面 [ |
| 字面反斜杠 |
常用posix类
写法 | 含义 |
| 数字 |
| 字母 |
| 字母数字 |
| 空白 |
| 小写 |
| 大写 |
示例:
^[[:alnum:]_-]+$ → 匹配由字母、数字、下划线和连字符组成的字符串多行合并正则表达式示例:
当multiline.pattern配置为^b时,匹配效果如下:
实际存在六行日志,最终会匹配为bac和bde两行发送到klog控制台
Java堆栈日志,正常来讲,以下信息在不配置多行合并时,会作为四行日志分别发送到klog日志池,且顺序可能会被其他日志打乱;假如将multiline.pattern配置为^[A-Za-z,表示匹配大写或者小写,后续以空格开头的日志就会被自动合并到最前面一行,向klog发送一条日志。
合并前
Exception in thread "main" java.lang.NullPointerException
at com.example.myproject.Book.getTitle(Book.java:16)
at com.example.myproject.Author.getBookTitles(Author.java:25)
at com.example.myproject.Bootstrap.main(Bootstrap.java:14)合并后
时间戳,来自 Elasticsearch 等服务的活动日志通常以时间戳开头,后跟有关特定活动的信息,如下例所示,要将这些行合并到 Filebeat 中的单个事件中,需要将multiline.pattern配置为:^\[[0-9]{4}-[0-9]{2}-[0-9]{2},如果不配置合并,每一行都会作为一条数据显示在klog控制台
合并前
[2015-08-24 11:49:14,389][INFO ][env ] [Letha] using [1] data paths, mounts [[/
(/dev/disk1)]], net usable_space [34.5gb], net total_space [118.9gb], types [hfs]合并后
登录容器服务控制台。
在左侧导航栏中,选择运维管理,进入日志管理V2页面。
按需选择地域和集群,可以查看目标集群中已经配置的日志采集规则。
单击右侧的编辑采集规则,可以进入修改页面,按需求更新日志采集规则
登录容器服务控制台。
在左侧导航栏中,选择运维管理,进入日志管理V2页面。
按需选择地域和集群,可以查看目标集群中已经配置的日志采集规则。
单击右侧的日志分析,可以进入Klog中当前日志规则的日志池查看日志
请访问:日志管理常见问题
纯净模式
