可观测性建设实践之 - 日志分析的权衡取舍
指标、日志、链路是服务可观测性的三大支柱,在服务稳定性保障中,通常指标侧重于发现故障和问题,日志和链路分析侧重于定位和分析问题,其中日志实际上是串联这三大维度的一个良好桥梁。
但日志分析往往面临成本和效果之间的权衡问题,没有完美的方案只有适合的方案,本文将结合实战经验,介绍一种日志分析的实现,分析如何在稳定性保障中用好日志这个维度,以及日志如何与指标、链路相互配合形成故障定位的最佳实践。
日志分析难点
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 如何解决这些问题,做到效果和成本最佳,也最具落地的可行性。
相关文章:
可观测性建设实践之 - 日志分析的权衡取舍
指标、日志、链路是服务可观测性的三大支柱,在服务稳定性保障中,通常指标侧重于发现故障和问题,日志和链路分析侧重于定位和分析问题,其中日志实际上是串联这三大维度的一个良好桥梁。 但日志分析往往面临成本和效果之间的权衡问…...
Ceres使用
之前用过Ceres,但是只是跑例程,现在来着重学习一下使用流程。 1. 解决的问题 主要解决非线性优化问题。Ceres是一个较为通用的库。 参考链接 2. 如何使用 这个是求解的函数,主要关注这三个参数 CERES_EXPORT void Solve(const Solver::O…...
深度学习第1天:深度学习入门-Keras与典型神经网络结构
☁️主页 Nowl 🔥专栏《机器学习实战》 《机器学习》 📑君子坐而论道,少年起而行之 文章目录 神经网络 介绍 结构 基本要素 Keras 介绍 导入 定义网络 模型训练 前馈神经网络 特点 常见类型 代码示例 反馈神经网络 特点 …...
青云科技容器平台与星辰天合存储产品完成兼容性互认证
近日, 北京青云科技股份有限公司(以下简称:青云科技)的 KubeSphere 企业版容器平台成功完成了与 XSKY星辰天合的企业级分布式统一数据平台 V6(简称:XEDP)以及天合翔宇分布式存储系统 V6…...
谈谈基于Redis的分布式锁
目录 前言 基本介绍 演化过程 防死锁 防误删 自动续期 可重入 主从一致 总结 前言 在我们没有了解分布式锁前,使用最多的就是线程锁和进程锁,但他们仅能满足在单机jvm或者同一个操作系统下,才能有效。跨jvm系统,无法…...
逸学java【初级菜鸟篇】10.I/O(输入/输出)
hi,我是逸尘,一起学java吧 目标(任务驱动) 1.请重点的掌握I/O的。 场景:最近你在企业也想搞一个短视频又想搞一个存储的云盘,你一听回想到自己对于这些存储的基础还不是很清楚,于是回家开始了…...
【Python进阶笔记】md文档笔记第6篇:Python进程和多线程使用(图文和代码)
本文从14大模块展示了python高级用的应用。分别有Linux命令,多任务编程、网络编程、Http协议和静态Web编程、htmlcss、JavaScript、jQuery、MySql数据库的各种用法、python的闭包和装饰器、mini-web框架、正则表达式等相关文章的详细讲述。 全套md格式笔记和代码自…...
基于Vue+SpringBoot的数字化社区网格管理系统
项目编号: S 042 ,文末获取源码。 \color{red}{项目编号:S042,文末获取源码。} 项目编号:S042,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 源码 & 项目录屏 二、功能模块三、开发背景四、系统展示五…...
【数据库设计和SQL基础语法】--数据库设计基础--数据建模与ER图
一、数据建模的基本概念 1.1. 数据模型的概念 数据模型是对现实世界中事物及其之间关系的一种抽象表示。它提供了描述数据结构、数据操作、数据约束等的方式,是数据库设计的基础。数据模型帮助我们理解数据之间的关系,提供了一种规范化的方式来组织和存…...
Vue3 设置点击后滚动条移动到固定的位置
需求: 点击不通过按钮,显示红框中表单,且滚动条滚动到底部 (显示红框中表单默认不显示) <el-button click"onApprovalPass">不通过</el-button> <div class"item" v-if"app…...
外部 prometheus监控k8s集群资源(pod、CPU、service、namespace、deployment等)
prometheus监控k8s集群资源 一,通过CADvisior 监控pod的资源状态1.1 授权外边用户可以访问prometheus接口。1.2 获取token保存1.3 配置prometheus.yml 启动并查看状态1.4 Grafana 导入仪表盘 二,通过kube-state-metrics 监控k8s资源状态2.1 部署 kube-st…...
LLMLingua:集成LlamaIndex,对提示进行压缩,提供大语言模型的高效推理
大型语言模型(llm)的出现刺激了多个领域的创新。但是在思维链(CoT)提示和情境学习(ICL)等策略的驱动下,提示的复杂性不断增加,这给计算带来了挑战。这些冗长的提示需要大量的资源来进行推理,因此需要高效的解决方案,本文将介绍LLM…...
数据资产确权的难点
数据是企业的重要资产之一,但是许多企业对于这项资产在管理上都面临着一些挑战,其中最关键就是数据确权的问题。接下来,将探讨数据资产确权的难点,并提出相应的解决方案,一起来看吧。 首先介绍一下数据资产入表的背景以…...
EMG肌肉电信号处理合集(二)
本文主要展示常见的肌电信号特征的提取说明。使用python 环境下的Pysiology计算库。 目录 1 肌电信号第一次burst的振幅, getAFP 函数 2 肌电信号波长的标准差计算,getDASDV函数 3 肌电信号功率谱频率比例,getFR函数 4 肌电信号直方图…...
2023亚马逊云科技re:Invent引领科技新潮流:云计算与生成式AI共塑未来
2023亚马逊云科技re:Invent引领科技新潮流:云计算与生成式AI共塑未来 历年来,亚马逊云科技re:Invent,不仅是全球云计算从业者的年度狂欢,更是全球云计算领域每年创新发布的关键节点。 2023年亚马逊云科技re:Invent大会在美国拉斯…...
案例018:基于微信小程序的实习记录系统
文末获取源码 开发语言:Java 框架:SSM JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序…...
视频剪辑技巧:如何高效批量转码MP4视频为MOV格式
在视频剪辑的过程中,经常会遇到将MP4视频转码为MOV格式的情况。这不仅可以更好地编辑视频,还可以提升视频的播放质量和兼容性。对于大量视频文件的转码操作,如何高效地完成批量转码呢?现在一起来看看云炫AI智剪如何智能转码&#…...
node.js获取unsplash图片
1. 在Unsplash的开发者页面注册并创建一个应用程序,以便获取一个API访问密钥(即Access Key)。 2. 安装axios: npm install axios3. 使用获取到的API密钥进行请求。 示例代码如下: const axios require(axios);con…...
Git远程库操作(GitHub)
GitHub 网址:https://github.com/ 创建远程仓库 远程仓库操作 命令名称作用git remote -v查看当前所有远程地址别名git remote add 别名 远程地址起别名git push 别名 分支推送本地分支上的内容到远程仓库git clone 远程地址将远程仓库的内容克隆到本地git pull 别…...
java计算下一个整10分钟时间点
最近工作上遇到需要固定在整10分钟一个周期调度某个任务,所以需要这样一个功能,记录下 package org.example;import com.google.gson.Gson; import org.apache.commons.lang3.time.DateUtils;import java.io.InputStream; import java.util.Calendar; i…...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...
