日志服务 TKE 云产品中心

TKE 云产品中心提供容器服务 TKE 业务日志、审计日志、事件日志的一站式采集与检索分析,同时基于审计与事件日志,提供开箱即用的审计与事件分析仪表盘,助力快速构建 TKE 访问分析的可观测性。

相关产品
日志服务 产品页,含版本规格、价格与购买入口。

一、功能特性

·开箱即用 TKE 集群审计与事件分析仪表盘。

·统一 TKE 集群审计与事件日志检索分析入口。

·批量开启 TKE 集群业务、审计与事件日志采集。

二、前提条件

已 创建 TKE 集群。CLS 支持采集 TKE 的 标准集群 (含注册节点公网版,即原边缘集群能力)。

三、步骤1:选择集群

1. 登录 日志服务控制台。

2. 在左侧导航栏中,单击云产品中心,进入云产品中心页面。

3. 在云产品日志中,选择并单击容器服务 TKE。

4. 在容器服务 TKE 中心中,选择接入管理 > 实例接入。

5. 选择 TKE 集群所在地域,并在集群列表中找到目标采集集群。

若采集组件状态为未安装,单击安装,安装日志采集组件。

6. 当采集组件状态为最新,单击右侧新建采集配置,进入集群日志采集配置流程。

注意:为 TKE 集群配置日志采集配置需要具有访问集群的 RBAC 权限,若没有请联系集群管理员添加。

四、步骤2:配置日志主题

进入集群日志采集配置流程,在创建日志主题步骤中,你可选择已有或创建用于存储日志的日志主题。关于日志主题请参见 日志主题。

五、步骤3:配置采集规则

完成日志主题的选择后,单击下一步进入采集配置即可配置采集规则,配置信息如下:

·日志源配置:

·采集规则名称:你可以自定义日志采集规则名称。

·采集类型:目前采集类型支持容器标准输出、容器文件路径和节点文件路径。

容器标准输出容器文件路径节点文件路径

支持所有容器、指定工作负载、指定 Pod Labels 三种方式指定容器标准输出的采集日志源。

·所有容器:代表采集指定命名空间下的所有容器中的标准输出日志:

·指定工作负载:代表采集指定命名空间下,指定工作负载中,指定容器的标准输出日志如下:

·指定 Pod Labels:代表采集指定命名空间下,所有带有指定 Pod Label 的容器中的标准输出日志:

注意:“容器文件路径” 不能为软链接,否则会导致软链接的实际路径在采集器的容器内不存在,采集日志失败。

支持指定工作负载、指定 Pod Labels 两种方式指定容器文件路径的采集日志源。

·指定工作负载:代表采集指定命名空间下、指定工作负载中、指定容器中的容器文件路径:

·指定 Pod Labels:代表采集指定命名空间下,所有带有指定 Pod Label 的容器中的容器文件路径:

·容器文件路径由日志目录与文件名组成,日志目录前缀以 / 开头,文件名以非 / 开头,前缀和文件名均支持使用通配符 ? 和 *,不支持逗号。/**/代表日志采集组件将监听所填前缀目录下的所有层级匹配上的日志文件。多文件路径之间为或关系。例如:当容器文件路径为 /opt/logs/*.log,可以指定目录前缀为 /opt/logs,文件名为 *.log 的日志。

·采集路径黑名单。开启后可在采集时忽略指定的目录路径或完整的文件路径。目录路径和文件路径可以是完全匹配,也支持通配符模式匹配。

·黑名单配置:采集黑名单分为两类过滤类型,且可以同时使用:

·文件路径:采集路径下,需要忽略采集的完整文件路径,支持通配符*或?,支持**路径模糊匹配。

·目录路径:采集路径下,需要忽略采集的目录前缀,支持通配符*或?,支持**路径模糊匹配。

·节点文件路径由日志目录与文件名组成,日志目录前缀以 / 开头,文件名以非 / 开头,前缀和文件名均支持使用通配符 ? 和 *,不支持逗号。/**/代表日志采集组件将监听所填前缀目录下的所有层级匹配上的日志文件。多文件路径之间为或关系。例如:当节点文件路径为 /opt/logs/*.log,可以指定目录前缀为 /opt/logs,文件名为 *.log 的日志。

·采集路径黑名单。开启后可在采集时忽略指定的目录路径或完整的文件路径。目录路径和文件路径可以是完全匹配,也支持通配符模式匹配。

·黑名单配置:采集黑名单分为两类过滤类型,且可以同时使用:

·文件路径:采集路径下,需要忽略采集的完整文件路径,支持通配符*或?,支持**路径模糊匹配。

·目录路径:采集路径下,需要忽略采集的目录前缀,支持通配符*或?,支持**路径模糊匹配。

·元数据配置:

除了原始的日志内容, 日志服务还会带上容器或 Kubernetes 相关的元数据(例如:产生日志的容器 ID)一起上报到 CLS,方便用户查看日志时追溯来源或根据容器标识、特征(例如:容器名、labels)进行检索。你可以自行选择是否需要上报这些元数据,按需勾选上传。

容器或 Kubernetes 相关的元数据请参见下方表格:

字段名 含义
container_id 日志所属的容器 ID。
container_name 日志所属的容器名称。
image_name 日志所属容器的镜像名称 IP。
namespace 日志所属 pod 的 namespace。
pod_uid 日志所属 pod 的 UID。
pod_name 日志所属 pod 的名字。
pod_ip 日志所属 pod 的 IP 地址。
pod_label_{label name} 日志所属 pod 的 label(例如一个 pod 带有两个 label:app=nginx,env=prod,则在上传的日志中会附带两个 metadata:pod_label_app:nginx,pod_label_env:prod)。

注意:说明:

注意:如果想采集部分 pod label,需要手动输入想要的 label key (可以输入多个,每输入一个以回车结束),命中的话会采集。

另外也支持自定义键值作为元数据。

·解析规则配置:

·采集策略:你可以选择全量或者增量。

·全量:全量采集指从日志文件的开头开始采集。

·增量:增量采集指只采集文件内新增的内容

·编码模式:支持 UTF-8和 GBK。

·提取模式:支持多种类型的提取模式,详情如下:

单行全文格式多行全文格式单行-完全正则格式多行-完全正则格式JSON 格式分隔符组合解析单行全文日志是指一行日志内容为一条完整的日志。日志服务在采集的时候,将使用换行符 \\n 来作为一条日志的结束符。为了统一结构化管理,每条日志都会存在一个默认的键值__CONTENT__,但日志数据本身不再进行日志结构化处理,也不会提取日志字段,日志属性的时间项由日志采集的时间决定。假设一条日志原始数据为:Tue Jan 22 12:08:15 CST 2019 Installed: libjpeg-turbo-static-1.2.90-6.el7.x86_64采集到日志服务的数据为:__CONTENT__:Tue Jan 22 12:08:15 CST 2019 Installed: libjpeg-turbo-static-1.2.90-6.el7.x86_64多行全文日志是指一条完整的日志数据可能跨占多行(例如 Java stacktrace)。在这种情况下,以换行符 \\n 为日志的结束标识符就显得有些不合理,为了能让日志系统明确区分开每条日志,采用首行正则的方式进行匹配,当某行日志匹配上预先设置的正则表达式,就认为是一条日志的开头,而下一个行首出现作为该条日志的结束标识符.多行全文也会设置一个默认的键值__CONTENT__,但日志数据本身不再进行日志结构化处理,也不会提取日志字段,日志属性的时间项由日志采集的时间决定。假设一条多行日志原始数据为:2019-12-15 17:13:06,043 [main] ERROR com.test.logging.FooFactory:java.lang.NullPointerException at com.test.logging.FooFactory.createFoo(FooFactory.java:15) at com.test.logging.FooFactoryTest.test(FooFactoryTest.java:11)首行正则表达式为如下:\\d{4}-\\d{2}-\\d{2}\\s\\d{2}:\\d{2}:\\d{2},\\d{3}\\s.+采集到日志服务的数据为:__CONTENT__:2019-12-15 17:13:06,043 [main] ERROR com.test.logging.FooFactory:\\njava.lang.NullPointerException\\n at com.test.logging.FooFactory.createFoo(FooFactory.java:15)\\n at com.test.logging.FooFactoryTest.test(FooFactoryTest.java:11)单行完全正则格式通常用来处理结构化的日志,指将一条完整日志按正则方式提取多个 key-value 的日志解析模式。假设一条日志原始数据为:10.135.46.111 – – [22/Jan/2019:19:19:30 +0800] "GET /my/course/1 HTTP/1.1" 127.0.0.1 200 782 9703 "http://127.0.0.1/course/explore?filter%5Btype%5D=all&filter%5Bprice%5D=all&filter%5BcurrentLevelId%5D=all&orderBy=studentNum" "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:64.0) Gecko/20100101 Firefox/64.0" 0.354 0.354配置的正则表达式为如下:(\\S+)[^\\[]+(\\[[^:]+:\\d+:\\d+:\\d+\\s\\S+)\\s"(\\w+)\\s(\\S+)\\s([^"]+)"\\s(\\S+)\\s(\\d+)\\s(\\d+)\\s(\\d+)\\s"([^"]+)"\\s"([^"]+)"\\s+(\\S+)\\s(\\S+).*采集到日志服务的数据为:body_bytes_sent: 9703http_host: 127.0.0.1http_protocol: HTTP/1.1http_referer: http://127.0.0.1/course/explore?filter%5Btype%5D=all&filter%5Bprice%5D=all&filter%5BcurrentLevelId%5D=all&orderBy=studentNumhttp_user_agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:64.0) Gecko/20100101 Firefox/64.0remote_addr: 10.135.46.111request_length: 782request_method: GETrequest_time: 0.354request_url: /my/course/1status: 200time_local: [22/Jan/2019:19:19:30 +0800]upstream_response_time: 0.354假设你的一条日志原始数据为:[2018-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)行首正则表达式为:\\[\\d+-\\d+-\\w+:\\d+:\\d+,\\d+]\\s\\[\\w+]\\s.*配置的自定义正则表达式为:\\[(\\d+-\\d+-\\w+:\\d+:\\d+,\\d+)\\]\\s\\[(\\w+)\\]\\s(.*)系统根据()捕获组提取对应的 key-value 后,你可以自定义每组的 key 名称如下所示:time: 2018-10-01T10:30:01,000`level: INFO`msg:java.lang.Exception: exception happened at TestPrintStackTrace.f(TestPrintStackTrace.java:3) at TestPrintStackTrace.g(TestPrintStackTrace.java:7) at TestPrintStackTrace.main(TestPrintStackTrace.java:16)假设你的一条 JSON 日志原始数据为:{"remote_ip":"10.135.46.111","time_local":"22/Jan/2019:19:19:34 +0800","body_sent":23,"responsetime":0.232,"upstreamtime":"0.232","upstreamhost":"unix:/tmp/php-cgi.sock","http_host":"127.0.0.1","method":"POST","url":"/event/dispatch","request":"POST /event/dispatch HTTP/1.1","xff":"-","referer":"http://127.0.0.1/my/course/4","agent":"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:64.0) Gecko/20100101 Firefox/64.0","response_code":"200"}经过日志服务结构化处理后,该条日志将变为如下:agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:64.0) Gecko/20100101 Firefox/64.0body_sent: 23http_host: 127.0.0.1method: POSTreferer: http://127.0.0.1/my/course/4remote_ip: 10.135.46.111request: POST /event/dispatch HTTP/1.1response_code: 200responsetime: 0.232time_local: 22/Jan/2019:19:19:34 +0800upstreamhost: unix:/tmp/php-cgi.sockupstreamtime: 0.232url: /event/dispatchxff: -假设你的一条日志原始数据为:10.20.20.10 – ::: [Tue Jan 22 14:49:45 CST 2019 +0800] ::: GET /online/sample HTTP/1.1 ::: 127.0.0.1 ::: 200 ::: 647 ::: 35 ::: http://127.0.0.1/当日志解析的分隔符指定为:::,该条日志会被分割成八个字段,并为这八个字段定义唯一的 key,如下所示:IP: 10.20.20.10 -bytes: 35host: 127.0.0.1length: 647referer: http://127.0.0.1/request: GET /online/sample HTTP/1.1status: 200time: [Tue Jan 22 14:49:45 CST 2019 +0800]假设你的一条日志的原始数据为:1571394459,http://127.0.0.1/my/course/4|10.135.46.111|200,status:DEAD,自定义插件内容如下:{ "processors": [ { "type": "processor_split_delimiter", "detail": { "Delimiter": ",", "ExtractKeys": [ "time", "msg1","msg2"] }, "processors": [ { "type": "processor_timeformat", "detail": { "KeepSource": true, "TimeFormat": "%s", "SourceKey": "time" } }, { "type": "processor_split_delimiter", "detail": { "KeepSource": false, "Delimiter": "|", "SourceKey": "msg1", "ExtractKeys": [ "submsg1","submsg2","submsg3"] }, "processors": [] }, { "type": "processor_split_key_value", "detail": { "KeepSource": false, "Delimiter": ":", "SourceKey": "msg2" } } ] } ]}经过日志服务结构化处理后,该条日志将变为如下:time: 1571394459submsg1: http://127.0.0.1/my/course/4submsg2: 10.135.46.111submsg3: 200status: DEAD

·过滤器:LogListener 仅采集符合过滤器规则的日志,Key 支持完全匹配,过滤规则支持正则匹配,如仅采集 ErrorCode = 404 的日志。你可以根据需求开启过滤器并配置规则。

·日志时间戳来源:你可选择以日志采集时间或者指定日志字段两种时间作为日志的时间戳:

·上传解析失败日志:建议开启上传解析失败日志。开启后,LogListener 会上传各式解析失败的日志。若关闭上传解析失败日志,则会丢弃失败的日志。

·高级配置:通过勾选,选择你需要定义的高级配置。

多行-完全正则提取模式下,支持配置以下高级配置(其他模式仅支持前2 种):

名称 描述 配置项
超时属性 该配置控制日志文件的超时时间。如果一个日志文件在指定时间内没有任何更新,则为超时。超时的日志文件 LogListener 将不再采集。当你的日志文件数量较大时,建议降低超时时间,避免 LogListener 性能浪费。 不超时:日志文件永不超时自定义:自定义日志文件的超时时间
最大目录深度 该配置控制日志采集的最大目录深度。LogListener 不会采集所在目录层级超过指定最大目录深度的日志文件。当你目标采集路径包含模糊匹配时,建议配置合适的最大目录深度,避免 LogListener 性能浪费。 大于0的整数。0代表不进行子目录的下钻
合并解析失败日志 注意:LogListener 2.8.8及以上版本才可以配置合并解析失败日志。该配置支持在采集时将目标日志文件中连续解析失败的日志合并为一条日志上传。 若你的首行正则表达式无法覆盖所有的多行日志, 建议开启该配置,避免因首行匹配失败的单条多行日志被拆分至多条日志。 开启/关闭

如你需要对采集到的 CLS 日志进一步处理,如结构化、脱敏、过滤,然后再写入日志主题,你可单击页面下方的数据加工,添加数据加工,最后 配置索引。

注意:说明:

六、步骤4:配置索引

1. 单击下一步,进入“索引配置”页面。

2. 在“索引配置”页面,设置如下信息。配置详情请参考 索引配置。

注意:检索必须开启索引配置,否则无法检索。

七、步骤5:检索日志

至此,即完成了 TKE K8s 集群业务日志采集的所有部署。你可以前往 CLS 控制台 > 检索分析 查看采集上来的日志。

八、管理业务日志采集配置

1. 在接入管理 > 实例接入中,找到目标 TKE 集群,并单击集群名称,进入集群详情页。

2. 在集群详情页中,你可以在日志管理 > 集群业务日志中查看并管理你的集群业务日志采集配置。

九、开启集群审计/事件日志采集

注意:说明:

十、步骤1:选择集群

1. 若采集组件状态为未安装,单击安装,安装日志采集组件。

注意:安装日志采集组件将在集群 kube-system 命名空间下,以 DaemonSet 的方式部署一个 tke-log-agent 的 pod 和一个 cls-provisioner 的 pod。请为每个节点至少预留0.1核16Mib 以上的可用资源。

2. 若采集组件状态为最新,单击集群名称,进入集群详情页,并在日志管理 – 集群业务日志中找到集群审计日志或集群事件日志。

3. 单击开启集群审计或事件日志,并进入集群审计日志或集群事件日志配置流程。

十一、步骤2:选择日志主题

进入审计或事件日志配置流程,在创建日志主题步骤中,你可选择已有或创建用于存储日志的日志主题。日志主题的相关信息请参见 日志主题。

十二、步骤3:索引配置

1. 单击下一步,进入“索引配置”页面。

2. 在“索引配置”页面,设置如下信息。配置详情请参考 索引配置。

注意:检索必须开启索引配置,否则无法检索。

十三、步骤4:检索审计与事件日志

至此,即完成了 TKE K8s 集群审计或事件业务日志采集的所有部署。你可单击日志检索,选中要检索的日志类型(审计或事件),同时选择目标集群,即可检索与选择集群相关的审计或事件日志。

十四、查看 TKE 集群审计与事件分析仪表盘

1. 完成开启 TKE 集群的审计或事件日志采集后,在顶部 Tab 栏中,选择仪表盘。

2. 在顶部二级 Tab 中,选择目标审计或事件仪表盘。

3. 在 TKE 集群下拉列表中,选择已开启审计或事件日志投递的目标 TKE 集群。

4. 选中集群后,即可查看与选中集群相关的事件或审计分析仪表盘。

十五、升级日志采集组件

在接入管理页中,找到目标 TKE 集群,若采集组件状态显示可升级,可单击升级,将日志采集组件升级至最新版本。

十六、卸载日志采集组件

在接入管理页中,找到目标 TKE 集群,单击操作中的更多,并在下拉框中单击卸载日志采集组件。

赞 (0)
上一篇 4天前
下一篇 4天前