首页 > 其他分享 >可观测性建设实践之 - 日志分析的权衡取舍

可观测性建设实践之 - 日志分析的权衡取舍

时间:2023-11-25 09:55:18浏览次数:32  
标签:分析 trace 权衡 系统 取舍 指标 链路 日志

指标、日志、链路是服务可观测性的三大支柱,在服务稳定性保障中,通常指标侧重于发现故障和问题,日志和链路分析侧重于定位和分析问题,其中日志实际上是串联这三大维度的一个良好桥梁。

但日志分析往往面临成本和效果之间的权衡问题,没有完美的方案只有适合的方案,本文将结合实战经验,介绍一种日志分析的实现,分析如何在稳定性保障中用好日志这个维度,以及日志如何与指标、链路相互配合形成故障定位的最佳实践。

日志分析难点

1)规范问题:服务模块的语言和框架各异,日志格式不规范,分析困难;
2)管理问题:微服务模块众多,日志收集和管理困难;
3)成本问题:日志的保存和计算分析需要消耗大量的资源,主要是存储计算资源,使用成本高;

日志分析方案

本文推荐一种在稳定性保障中,经过考量和实战的日志分析方案。故障处理场景中日志分析的核心思路:

  • 日志到指标:基于网关日志分析接口、域名、渠道、端等维度的关键指标(流量、成功率、延迟);
  • 指标到大盘:网关日志分析计算出的维度指标(流量、成功率、延迟)用作全局服务大盘/大屏的建设,用以观察服务的全局状态;
  • 指标到日志:这类维度指标的生成来源于日志计算,天然可以实现指标到日志的关联,在发现指标趋势异常时,能够方便的调出相应时间的日志原文;
  • 日志到链路:具体的日志原文中带有 traceid,或模块和接口的信息,基于此信息可打通trace系统,调出具体请求或模块的trace信息,展示请求的调用链路,分析调用异常的底层来源;
  • 链路到日志:在trace的异常点下钻查询日志系统,调出对应模块和接口的详细日志,做进一步的异常判断;
  • 日志到特征:另一个分析思路,基于网关日志做异常指标的特征分析,如,下单接口异常,则自动分析异常请求在来源IP、接入层实例分布、upstream分布等等维度上是否有聚集特征或特征变化,如果在某个特征上出现了特征的变化和聚集,则可以针对这类特征确定止损的方案或进一步追查的方向;

问题追查典型路径

优点和权衡

这个方案的优点和权衡点在于:

  • 分析性价比高:网关日志通常较为规范,如Nginx日志,并且也容易治理,同时网关日志也最为靠近用户端,无论从分析和治理的难易度,以及分析的价值上看,都是最佳的选择;
  • 治理性价比高:程序模块日志由于语言格式各异,治理难度高,且分析的价值大打折扣。治理的重点可以转移到落地trace系统上来,程序模块一旦使用了trace的sdk或agent,则可以输出规范的trace信息和有价值的定位信息。落地trace也会有相当的成本,但对类似Java这类语言,成本会低很多,可以使用javaagent方案做到无侵入实现;
  • 扬长避短:程序模块的日志原文格式可能各异也不标准,但异常日志的信息仍然是判断问题原因的重要依据,因此在这个过程中能在合适的分析步骤中查询调出即可,这部分日志的价值优势在于原文信息而不在于分析计算;

该方案以日志为中心,实现了一条日志、指标、trace相互串联的问题发现和分析路径,这条路径也是故障问题分析的典型路径。

同时从方案的落地和推动成本上来讲也是一个比较合适的取舍。如果可观测产品支持好这条路径信息的串联,会大幅提升异常问题定位分析的效率。

方案落地要点

混合云资源、观测系统众多,是目前很典型的企业基础设施现状,在此基础上要实现这个方案可能需要重点解决以下几个问题:

1)存量系统如何打通:指标、日志、trace都可能已经有各自独立的系统,如何串联融合不同系统的数据?
2)云上云下如何打通:很多企业使用了私有化和公有云的混合云方案,日志可能也同时使用了私有化的ELK和云上的日志系统,如阿里云SLS和腾讯云CLS;
3)风险成本如何控制:如果为此要全部推导重建,用一套系统替代原有系统,风险和成本都太高,周期长也不可控;

产品实践

这里介绍快猫星云的 Flashcat 是如何解决这些问题的。

  • 数据源抽象:常见的开源和云上现有的可观测系统都可以作为一个数据源注册到 Flashcat;
  • 数据交互:Flashcat 底层通过 API 和各数据源交互;
  • 统一分析:上层对来自各个数据源的数据,特别是日志数据做统一灵活的配置和分析,生成各类自定义维度的报表和指标数据;
  • 指标建设:日志生成的指标数据可以配置到北极星、灭火图,作为业务健康状态和系统健康状态的观测指标;
  • 下钻关联:从 Flashcat 的北极星(业务健康度量化)和灭火图(系统健康度量化)可以下钻上面描述的问题分析路径,实现从业务异常的发现、到系统异常的范围收敛,到具体问题的分析确认的全链路串联;

Flashcat 统一日志分析平台

 

Flashcat 问题下钻分析路径

Flashcat 问题下钻分析路径

总结

本文介绍了稳定性保障中日志分析系统建设面临的问题、挑战、需求和建设中的权衡取舍。并介绍了 Flashcat 如何解决这些问题,做到效果和成本最佳,也最具落地的可行性。

标签:分析,trace,权衡,系统,取舍,指标,链路,日志
From: https://www.cnblogs.com/ulricqin/p/17855221.html

相关文章

  • 详解CCE服务:一站式告警配置和云原生日志视图
    本文分享自华为云社区《新一代云原生可观测平台之CCE服务日志和告警篇》,作者:云容器大未来。告警和日志是运维人员快速定位问题、恢复异常的主要手段。运维人员日常的工作模式往往是先接收告警信息,再根据告警信息初步判断异常的范围和影响,通过相关组件的日志定位出故障原因,进行系......
  • find 查找.tar结尾的文件 unzip 批量解压 sed常用 监控linux磁盘根分区 统计 Nginx 访
    1、查找当前目录下所有以.tar结尾的文件然后移动到指定目录:find.-name“*.tar”-execmv{}./backup/;❝注解:find–name主要用于查找某个文件名字,-exec、xargs可以用来承接前面的结果,然后将要执行的动作,一般跟find在一起用的很多,find使用我们可以延伸-mtime查找修改......
  • Python使用sys.excepthook统一处理异常,并将异常信息记录到日志中
    importsysimporttimeimporttracebackfromdatetimeimportdatetimefromseleniumimportwebdriverfromselenium.webdriver.common.byimportByfromselenium.webdriver.supportimportexpected_conditionsasECfromselenium.webdriver.support.uiimportWeb......
  • Golang学习笔记-自定义日志轮转及输出
    packagepkgimport( "fmt" "log" "log/slog" "os" "time")varcontrolLogger*slog.LoggervarfileLogger*slog.Loggerconst( timeFormat="2006-01-02")funcInitLog(filepathstring){......
  • 手把手教你玩转 SpringBoot 日志
    本文根据文章:https://lebron.blog.csdn.net/article/details/132953586?spm=1001.2014.3001.5502进行修改一、日志重要吗程序中的日志重要吗?在回答这个问题前,笔者先说个事例:笔者印象尤深的就是去年某个同事,收到了客户反馈的紧急bug。尽管申请到了日志文件,但因为很多关键步骤......
  • python脚本把日志转成excel
    之前go写的,转成了python版本,日志是json格式的,按行读取{"aid":"1111","cid":"2222","callback_url":"http:\/\/ad.toutiao.com\/track\/activate\/?callback=B.eDCQxxxxxGCB&os=0&muid=","advertiser_id"......
  • core中间件全局日志
    参考学习项目zradmin在Configure中配置请求参数缓存//使可以多次多去body内容app.Use((context,next)=>{context.Request.EnableBuffering();returnnext();//请求通道走向下一步});在Configure......
  • Sqlserver日志传送高可用搭建
    1.原理主数据库定时备份事务日志到共享文件夹,辅助数据库定时从共享文件夹把事务日志备份复制到本地文件夹中,辅助数据库定时将本地文件夹中的事务日志备份还原到数据库上。2.修改服务启动账户2.1.为什么修改如果使用默认的NTSERVICE\MSSQLSERVER用户启动SQLServer,NTSERVICE\S......
  • Nginx loki监控日志的学习
    Nginxloki监控日志的学习背景学习自:https://mp.weixin.qq.com/s/Qt1r7vzWvCcJpNDilWHuxQ增加了一些自己的理解第一部分nginx日志的完善在logformat的后面增加一个:log_formatjson_analyticsescape=json'{''"msec":"$msec",'......
  • 对linux下日志文件error监控
    对日志文件中的error进行监控,当日志文件中出现error关键字时,就截取日志(grep-ierror不区分大小写进行搜索"error"关键字,但是会将包含error大小写字符的单词搜索出来),大家可以去看这编文章   1)第一类日志在每天的日志目录下生产的error日志,此日志文件每天都会自动生成,里面有......