前言
日志服务(Cloud Log Service,下文简称CLS服务)是腾讯云提供的一站式日志数据解决方案,可以快速便捷的接入,享受日志采集、日志存储到日志内容搜索、统计分析等全方位稳定可靠的日志服务。下文讲解业务接入腾讯云日志服务方案。
日志采集方案
1.1 接入层日志
网络接入层日志、负载均衡日志主要是nginx 日志,业务诉求在于日志检索、监控告警、统计分析。
采集方案有负载均衡 CLB日志采集接入、腾讯云服务器 CVM安装Loglistener采集接入。CLS服务的CGI有读写频控及流控,单个主题分区写请求限制为500qps,写流量限制为5MB/s;尽管不同采集方式下日志上传策略不同,但是一般都是很难触发限制的。
- CLB日志采集agent日志采集策略:每超过10条日志开始打包压缩上传,一次最多上传1000条日志;日志极少的情况,是每10秒打包上传一次(此时10秒内日志条数不大于10)。
- Loglistener日志采集策略:loglistener会做聚合,感知到一次文件变化后,就一直读直到日志读完、或者日志到达一万条,或者读取的日志大小达到4MB(原文),然后发送请求上传日志。
按照经验,每条nginx日志平均大小约0.125KB,采用LZ4压缩,按照压缩率0.2计算;在不触发CLS服务读写频控及读写流控限制的前提下,CLB日志采集agent日志采集性能实测能达到10万条/秒,Loglistener采集性能理论值达到20万条/秒。
1.2 逻辑层日志
业务逻辑层日志,主要是各个业务模块的请求处理日志,模块运行日志,业务诉求在于日志检索、长期存储,甚至部分文件有很高的可靠性要求,需要确保日志采集、上传、存储不丢数据。不同的采集方案区别如下:
- 业务部署在CVM:使用Loglistener采集,需要确保日志文件和Loglistener的pos_file写在数据盘,以保证可靠性,故障恢复后Loglistener支持续传。注意日常运维中不要使用vim修改日志文件,由于 vim 机制会修改 inode,所以日志系统会认为是一个全新的日志文件,将会采集上报整个文件的内容。
- 业务部署在CVM,使用弹性伸缩(AS)管理集群:使用Loglistener采集,特别需要注意的是AS缩容的时候会销毁CVM,但不销毁数据盘。若日志要求不可丢失,则应避免把日志写入系统盘,否则在极端情况下,如果日志在本地积压又恰逢AS缩容时,CVM销毁会导致日志丢失。
- 业务部署在TKE:
- TKE自带采集agent,我们可以使用数据卷做持久化,日志文件写在数据卷里面 , 可保证日志不丢; pod或容器重建时都会续传。需要注意的是,多个pod 共享数据卷,所以每个pod 里的程序写日志时,日志名要区分; 例如引入pod_ip 字段,该值可通过export输出变量获取。
- 如果不作数据持久化,日志保存在容器镜像的可写层里,K8S默认的 pod 销毁重建后相关日志就会丢失。针对业务日志没上传完就进行缩容的情况,我们可以配置 preStopHook 等待日志上传完,再删除pod ;但是节点异常导致pod重建还是无法保证日志文件不丢失。
日志存储方案
CLS日志的存储当前最多支持保存90天,大于90天存储需求的日志可以投递到对象存储COS,或者消息队列Ckafka中转用于大数据场景下的统计分析、存储。例如通过 SparkStreaming 消费Ckafka,进行统计分析;或者通过 Flume 收集并存储到 Hive、HDFS、Hbase等。
CLS日志的存储时间是以日志集的维度管理的,不同的业务模块建议独享一个日志集,模块中的不同日志采集到不同的主题。
接入层日志建议保存15,逻辑层的服务日志保存30天,如有更长的日志存储需求就投递到COS并开启生命周期。
监控告警方案
CLS的“监控告警”功能目前只能简单的监控场景,当主题日志量较大,检索语法复杂的时候,可能会导致检索超时,从而导致告警失效。对于复杂的监控告警需求,建议通过搜索日志API 检索日志到本地统计分析,再上报到云监控,并配置告警。
(注:目前告警功能需要申请白名单)
3.1 日志延迟监控
目前,CLS暂未提供全链路监控告警的能力。当前情况下,日志采集失败,日志检索延迟的情况需要用户自行去监控发现;对于接入层日志,如果配置了监控告警,建议是监控日志延迟的情况;如下图配置,我们可以监控最近1分钟的日志量,当命中日志条数小于1说明日志检索延迟,或者上报失败。
3.2 流量监控
如图,根据服务集群规模配置相应的流量监控,及时发现流量增长以便扩容服务。
3.3 错误码监控
如图,我们可以对NGINX请求状态码进行监控;对于接入层日志,建议对401、403、404、499、500、502、503、504等4xx/5xx的状态码分开监控,以便在故障发生时快速定位问题。
3.4 关键字监控
通过检索关键字,监控包含关键字的场景。例如监控服务的ERROR日志,是否频繁重启,读写数据库错误,慢查询请求等等。
3.5 机器组异常监控
机器组异常时,我们会在控制台->机器组管理-> 机器组 查看异常的采集机器,那么我们该如何对这一情况监控,及时发现异常的机器呢?答案是使用云监控产品。 配置如下
日志统计分析
日志服务提供 SQL 统计能力,对采集的日志进行数据分析并支持以图表的形式展示分析结果。腾讯云官网文档的“Nginx 访问日志分析案例” 提供了丰富的SQL分析示例,我们可以结合控制台“仪表盘”功能,根据业务需求绘制相应的分析图表。
需要注意的事,用户使用日志分析需要配置相应的索引,这会涉及到索引流量费用和索引存储费用;费用与日志量有关,和我们配置分析报表的数量无关,故建议对已开启索引的字段配置相应分析报表;索引流量费用及索引存储费用一般都比较少,可忽略。如果是每日日志量非常非常大(上百T),那么是否开启索引,以及索引字段的多寡就值得评估了,开启后我们可以在日志服务控制台“概览”业务查看索引流量及索引存储量的变化,以评估费用增长。