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

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

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

日志分析难点

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 如何解决这些问题,做到效果和成本最佳,也最具落地的可行性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/218432.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高级JVM

一、Java内存模型 1. 我们开发人员编写的Java代码是怎么让电脑认识的 首先先了解电脑是二进制的系统,他只认识 01010101比如我们经常要编写 HelloWord.java 电脑是怎么认识运行的HelloWord.java是我们程序员编写的,我们人可以认识,但是电脑不…

柑橘病害数据集(四类图像分类,没有打yolo标签)

1.文件夹分为训练集和测试集 在这个数据集中,有一类是新鲜柑橘,还有另外三种疾病,溃疡病、黑斑病和绿化病。 2.train文件夹 2.1.blackspot(黑斑病) 文件夹 206张照片 2.2.canker(溃疡病) 文…

【Qt之QFileInfo】使用

描述 QFileInfo类提供了与系统无关的文件信息。 QFileInfo提供有关文件的名称和位置(路径)在文件系统中的信息,以及它的访问权限、是否为目录或符号链接等。还可以获取文件的大小和最后修改/读取时间。QFileInfo还可以用于获取关于Qt资源的信…

U盘报错无法访问文件或目录损坏且无法读取

使用电脑打开U盘的部分文件时提示无法访问,文件或目录损坏且无法读取 报错内容如下图: 因为我这个U盘是那种双接口的 Type-C和USB,前段时间被我摔了一下 看网上说这种双接口的U盘USB接口容易坏掉 尝试在手机上使用OTG打开,先测试…

Canvas艺术之旅:探索锚点抠图的无限可能

说在前面 在日常的图片处理中,我们经常会遇到需要抠图的情况,无论是为了美化照片、制作海报,还是进行图片合成。抠图对于我们来说也是一种很常用的功能了,今天就让我们一起来看下怎么使用canvas来实现一个锚点抠图功能。 效果展示…

【云备份】文件操作实用工具类设计

文章目录 为什么要单独设计文件工具类?整体实现Filesize ——文件大小stat接口 LastMTime ——最后一次修改时间LastATime —— 最后一次访问时间FileName —— 文件名称GetPostLen ——获取文件指定位置 指定长度的数据GetContnet —— 读取文件数据SetContent ——…

搜索 C. Tic-tac-toe

Problem - C - Codeforces 思路:搜索,判断合法性。从起始态用搜索进行模拟,这样可以避免后面判断合法性这一繁琐的步骤。用一个map进行映射当前态及对应的结果。剪枝:如果当前字符串已经被搜索过,则直接跳过去。 代码…

交换机的VRRP主备配置例子

拓朴如下: 主要配置如下: [S1] vlan batch 10 20 # interface Vlanif10ip address 10.1.1.1 255.255.255.0vrrp vrid 1 virtual-ip 10.1.1.254vrrp vrid 1 priority 200vrrp vrid 1 preempt-mode timer delay 20 # interface Vlanif20ip address 13.1.1…

最新AI创作系统ChatGPT网站运营源码、支持GPT-4-Turbo模型,图片对话识图理解,支持DALL-E3文生图

一、AI创作系统 SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧!本系统使用NestjsVueTypescript框架技术,持续集成AI能力到本系统。支持OpenAI DALL-E3文生图,…

网页设计作业-音乐网站首页

效果图 网盘链接 链接:https://pan.baidu.com/s/1CO4jAOY0zk1AWTx_pC3UmA?pwdfuck 提取码:fuck

macos安装小软件 cmake

一,cmake下载主页 Download CMake 二,下载,解压,配置,编译,安装 0. 假设macos中已经存在了 clang和make工具 1. 通过网页下载最新的稳定版 cmake***.tar.gz 源代码 2. tar zxf cmake***.tar 3. cd cmake***…

linux的netstat命令和ss命令

1. 网络状态 State状态LISTENING监听中,服务端需要打开一个socket进行监听,侦听来自远方TCP端口的连接请求ESTABLISHED已连接,代表一个打开的连接,双方可以进行或已经在数据交互了SYN_SENT客户端通过应用程序调用connect发送一个…