腾讯云容器服务日志采集最佳实践

时间:2021-07-15 | 标签: | 作者:Q8 | 来源:roc 陈鹏网络

小提示:您能找到这篇{腾讯云容器服务日志采集最佳实践}绝对不是偶然,我们能帮您找到潜在客户,解决您的困扰。如果您对本页介绍的腾讯云容器服务日志采集最佳实践内容感兴趣,有相关需求意向欢迎拨打我们的服务热线,或留言咨询,我们将第一时间联系您!

概述

< ">本文介绍如何利用腾讯云容器服务TKE的日志功能对日志进行采集、存储与查询,分析各种功能用法与场景,给出一些最佳实践建议。

< ">注:本文仅适用于TKE集群。

如何快速上手?

< ">TKE的日志功能入口在集群运维-日志规则,更多关于如何为TKE集群启用日志采集与基础用法,参考TKE日志采集产品文档:https://cloud.tencent.com/document/product/457/36771。

技术架构是怎样的?

< ">TKE集群开启日志采集后,tke-log-agent作为DaemonSet部署在每个节点上,负责根据采集规则采集节点上容器的日志,然后上报到CLS日志服务,由CLS进行统一存储、检索与分析:

采集哪里的日志?

< ">在TKE使用日志采集时,需要在集群运维-日志规则里新建日志采集规则,首先需要确定采集的目标数据源是什么,下面介绍支持的3种类型数据源及其各自使用场景与建议。

采集标准输出



< ">最简单也是最推荐的方式是将Pod内容器的日志输出到标准输出,日志内容就会由容器运行时(docker,containerd)来管理,有以下几点好处:

< ">1.不需要额外挂载volume。

< ">2.可以直接通过kubectl logs查看日志内容。

< ">3.业务不需要关心日志轮转,容器运行时会对日志进行存储和自动轮转,避免因个别Pod日志量大将磁盘写满。

< ">4.不需要关心日志文件路径,可以使用比较统一的采集规则,用更少的采集规则数量覆盖更多的工作负载,减少运维复杂度。

< ">采集配置示例:

采集容器内的文件

< ">很多时候业务通过写日志文件的方式来记录日志,使用容器跑业务时,日志文件被写到容器内:



< ">1.如果日志文件所在路径没有挂载volume,日志文件会被写入容器可写层,落盘到容器数据盘里,通常路径是/var/lib/docker(建议给此路径挂盘,避免与系统盘混用),容器停止后日志会被清理。

< ">2.如果日志文件所在路径挂载了volume,日志文件会落盘到对应volume类型的后端存储;通常用emptydir,容器停止后日志会被清理,运行期间日志文件会落盘到宿主机的/var/lib/kubelet路径下,此路径通常没有单独挂盘,也就是会使用系统盘;由于使用了日志采集,有统一存储侨兴电话机的危机公关的能力,不推荐再挂载其它持久化存储来存日志文件(如云硬盘CBS,对象存储COS,共享存储CFS)。

< ">许多开源日志采集器需要给Pod日志文件路径挂载volume才能采集,使用TKE的日志采集则不需要,所以如果将日志输出到容器内的文件里,不需要关心是否挂载volume。

< ">采集配置示例:

采集宿主机上的文件

< ">如果业务将日志写入日志文件,但又想容器停止之后还能保留原始日志文件,好有个备份,避免采集异常时导致日志完全丢失,这时可以给日志文件路径挂载hostPath,日志文件会落盘到宿主机指定目录,并且容器停止后不会清理日志文件。

< ">由于不会自动清理日志文件,有同学就可能会担心日志会被重复采集,比如Pod调度走又调度回来,日志文件被写在之前相同路径。是否会重复采集,这里分两种情况:

< ">1.文件名相同,比如固定文件路径/data/log/nginx/access.log。此时不会重复采集,因为采集器会记住之前采集过的日志文件的位点,只采集增量部分。

< ">2.文件名不同,通常是业务用的日志框架会按照一定时间周期自动进行日志轮转,一般是按天轮转,自动为旧日志文件进行重命名,加上时间戳后缀。如果采集规则里使用了"*"作为通配符匹配日志文件名,可能就会重复采集,因为日志框架对日志文件重命名后,采集器就会认为匹配到了新写入的日志文件,就又对其进行采集一次。

< ">所以,一般不会重复采集,如果日志框架会对日志进行自动轮转,建议采集规则不要使用通配符"*"来匹配日志文件。

< ">采集配置示例:

日志吐到哪里?

< ">知道了采集哪里的数据之后,我们还需要知道采集到的日志往哪里存。根据前面讲的技术架构可以知道,TKE日志采集与云上的CLS日志服务集成,日志数据也将统一上报到日志服务。日志服务通过日志集和日志主题来对日志进行管理,日志集是CLS的项目管理单元,可以包含多个日志主题;一般将同一个业务的日志放在一个同一日志集,同一业务中的同一类的应用或服务使用相同日志主题,在TKE中,日志采集规则与日志主题是一一对应的;TKE创建日志采集规则时选择消费端,就需要指定日志集与日志主题,日志集通常提前创建好,日志主题通常选择自动创建:

< ">创建好后可以根据情况对自动创建的日志主题进行重命名,方便后续检索时找到日志所在的日志主题:

如何配置日志格式解析?

< ">有了日志的原始数据,我们还需要告诉日志服务如何去解析日志,以方便后续对其进行检索。在创建日志采集规则时,需要配置日志的解析格式,下面针对各项配置给出分析与建议。

使用哪种抓取模式?

< ">首先,我们需要确定日志的抓取模式,支持5种:单行文本、JSON、分隔符、多行文本和完全正则。

< ">推荐使用JSON,因为JSON格式本身就将日志给结构化了,日志服务可以提取JSON的key作为字段名,value作为对应的字段值,不再需要根据业务日志输出格式配置复杂的匹配规则,日志示例:

{"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"}

< ">使用JSON抓取模式的前提是业务的日志本身是以JSON格式输出的,如果不是JSON格式,但切换到使用JSON格式输出成本不大,就建议进行切换,如果实在不好切换,再考虑其它抓取模式。

< ">如果日志内容是以固定格式输出的单行文本,考虑使用"分隔符"或"完全正则"抓取模式。"分隔符"适用简单格式,日志中每个字段值都以固定的字符串分隔开,比如用":::"隔开,某一条日志内容是:

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/

< ">可以配置":::"自定义分隔符,并且为每个字段按顺序配置字段名,示例:

< ">"完全正则"适用复杂格式,使用正则表达式来匹配日志的格式。如日志内容为:

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+sS+)s"(w+)s(S+)s([^"]+)"s(S+)s(d+)s(d+)s(d+)s"([^"]+)"s"([^"]+)"s+(S+)s(S+).*

< ">日志服务会使用()捕获组来区分每个字段,我们还需要为每个字段设置字段名,配置示例:

< ">如果日志没有固定的输出格式,则考虑使用"单行文本"或"多行文本"的抓取网站建设背景模式。使用这两种模式,不会对日志内容本身进行结构化处理,不会提取日志字段,每条日志的时间戳也固定由日志采集的时间决定,检索的时候也只能进行简单的模糊查询。这两种模式的区别在于日志内容是单行还是多行,如果是单行最简单,不需要设置任何匹配条件,每行都是一条单独的日志;如果是多行则需要设置首行正则表达式,也就是匹配每条日志第一行的正则,当某行日志匹配上预先设置的首行正则表达式,就认为是一条日志的开头,而下一个行首出现作为该条日志的结束标识符。假如多行日志内容是:

10.20.20.10--[Tue Jan 22 14:24:03 CST 2019+0800]GET/online/sample HTTP/1.1 127.0.0.1 200 628 35 http://127.0.0.1/group/1

Mozilla/5.0(Windows NT 10.0;WOW64;rv:64.0)Gecko/20100101 Firefox/64.0 0.310 0.310

< ">那么首行正则表达式就可以设置为:d+.d+.d+.d+s-s.*



如何过滤掉不需要的内容?

< ">有些不重要或不关心的日志可以选择将其过滤掉,降低成本。

< ">如果使用"JSON"、"分隔符"或"完全正则"的抓取模式,日志内容会进行结构化处理,可以通过指定字段来对要保留的日志进行正则匹配:

< ">对于"单行文本"和"多行文本"抓取模式,由于日志内容没有进行结构化处理,无法指定字段来过滤,通常直接使用正则来对要保留的完整日志内容进行模糊匹配:

< ">需要注意的是,匹配内容一定记住是用正则而不是完整匹配,比如想只保留a.test.com域名的日志,匹配的表达式应该写a.test.com而不是a.test.com。

日志时间戳如何自定义?

< ">每条日志都需要有个时间戳,这个时间戳主要用于检索,在检索的时候可以选择时间范围。默认情况下,日志的时间戳由采集的时间决定,也可以进行自定义,选择某个字段作为时间戳,这样在某些情况下可能更精确些,比如在创建采集规则之前,服务已经运行了一段时间,如果不设置自定义时间格式,采集时会将之前的旧日志的时间戳设置为当前的时间,导致时间不准确。

< ">如何进行自定义呢?由于"单行文本"和"多行文本"抓取模式不会对日志内容进行结构化处理,也就没有字段可以指定为时间戳,无法自定义时间格式解析。其它的抓取模式都可以支持,具体做法是关闭"使用采集时间",然后选取要作为时间戳的字段名称,并配置时间格式。

< ">假如使用日志的time字段作为时间戳,其中一条日志time的值为2020-09-22 18:18:18,时间格式就可以设置为%Y-%m-%d%H:%M:%S,示例:

< ">更多时间格式配置参考日志服务官方文档配置时间格式:https://cloud.tencent.com/document/product/614/38614。

< ">需要注意的是,日志服务时间戳暂时只支持精确到秒,也就是如果业务日志的时间戳字段精确到了毫秒,将无法使用自定义时间戳,只能使用默认的采集时间作为时间戳,不过时间戳精确到毫秒后续将会得到支持。

如何查询日志?

< ">日志采集规则配好了,采集器就会自动开始采集日志并上报到日志服务,然后就可以在日志服务-检索分析中查询日志了,支持Lucene语法,但前提是需要开启索引,有以下3类索引:

< ">1.全文索引。用于模糊搜索,不用指定字段。

< ">2.键值索引。索引结构化处理过的日志内容,可以指定日志字段进行检索。

< ">3.元字段索引。上报日志时额外自动附加的一些字段,比如pod名称、namespace等,方便检索时指定这些字段进行检索。

< ">查询示例:

如何将日志投递到其它地方?

< ">日志服务支持将日志投递到COS对象存储和Ckafka(腾讯云托管的Kafka),可以在日志主题里设置投递:

< ">可以用在以下场景:

< ">1.对日志数据进行长期归档存储。日志集默认存储7天的日志数据,可以调整时长,但数据量越大,成本就越高,通常只保留几天的数据,如果需要将日志存更长时间,可以投递到COS进行低成本存储。

< ">2.需要对日志进行进一步处理(如离线计算),可以投递到COS或Ckafka,由其它程序消费来处理。

< ">< color: rgb(31, 73, 125);">参考资料

< ">TKE日志采集用法指引:https://cloud.tencent.com/document/product/457/36771

< ">日志服务配置时间格式:https://cloud.tencent.com/document/product/614/38614

< ">日志服务投递COS:https://cloud.tencent.com广告广告视频费用/document/product/614/37908

< ">日志服务投递Ckafka:https://cloud.tencent.com/document/product/614/33342

腾讯云容器服务日志采集最佳实践

上一篇:Instagram来吸引更多网站流量!
下一篇:华为应用市场快应用流量资源


版权声明:以上主题为“腾讯云容器服务日志采集最佳实践"的内容可能是本站网友自行发布,或者来至于网络。如有侵权欢迎联系我们客服QQ处理,谢谢。
相关内容
推荐内容
扫码咨询
    腾讯云容器服务日志采集最佳实践
    打开微信扫码或长按识别二维码

小提示:您应该对本页介绍的“腾讯云容器服务日志采集最佳实践”相关内容感兴趣,若您有相关需求欢迎拨打我们的服务热线或留言咨询,我们尽快与您联系沟通腾讯云容器服务日志采集最佳实践的相关事宜。

关键词:腾讯云容器服务日志采集

关于 | 业务 | 案例 | 免责 | 隐私
客服邮箱:sales@1330.com.cn
电话:400-021-1330 | 客服QQ:865612759
沪ICP备12034177号 | 沪公网安备31010702002418号