快速搞懂监控、链路追踪、日志三者的区别
点击上方蓝色“程序猿DD”,选择“设为星标”
回复“资源”获取独家整理的学习资料!
作者 | Xenojoshua
来源 | https://xenojoshua.com/2019/04/monitoring-tracing-logging/
1. Monitoring & Tracing & Logging
对于一个系统来说,标题中提到的这三者需求都是必然存在的,而有的时候我们会搞不清楚这三者相互之间是什么关系。我之前在做系统设计的时候也考虑过,是不是有必要引入那么多组件,毕竟如果这三者完全分开每一个一项的话,就有三个组件了(事实上就是:Prometheus+Grafana、Jaeger、ELK)。
因此想做个笔记尝试举例来梳理下。
外部链接:
Metrics, tracing, and logging,地址:http://peter.bourgon.org/blog/2017/02/21/metrics-tracing-and-logging.html
2. Monitoring
Monitoring(监控)举例来说就是:定期体检
。使用监控系统把需要关注的指标采集起来,形成报告,并对需要关注的异常数据进行分析形成告警。
特点是:
低频
定期
定量
这也是Prometheus的架构做得非常简单的原因,Monitoring的需求并没有包含非常高的并发量和通讯量。反过来说:高并发、大数据量的需求并不适用于Monitoring这个点。
3. Tracing
Tracing(链路追踪)举例来说就是:对某一项工作的定期汇报
。某个工作开始做了A,制作A事件的报告,收集起来,然后这个工作还有B、C、D等条目,一个个处理,然后都汇总进报告,最终的结果就是一个Tracing。
特点是:
高频
巨量
有固定格式
因为Tracing是针对某一个事件(一般来说就是一个API),而这个API可能会和很多组件进行沟通,后续的所有的组件沟通无论是内部还是外部的IO,都算作这个API调用的Tracing的一部分。可以想见在一个业务繁忙的系统中,API调用的数量已经是天文数字,而其衍生出来的Tracing记录更是不得了的量。其特点就是高频、巨量,一个API会衍生出大量的子调用。
也因此适合用来做Monitoring的系统就不一定适合做Tracing了,用Prometheus这样的系统来做Tracing肯定完蛋(Prometheus只有拉模式,全部都是HTTP请求,高并发直接挂掉)。一般来说Tracing系统都会在本地磁盘IO上做日志(最高效、也是最低的Cost),然后再通过本地Agent慢慢把文本日志数据发送到聚合服务器上,甚至可能在聚合服务器和本地的Agent之间还需要做消息队列,让聚合服务器慢慢消化巨量的消息。
Tracing在现在的业界是有标准的:OpenTracing
,因此它不是很随意的日志/事件聚合,而是有格式要求的日志/事件聚合,这就是Tracing和Logging最大的不同。
4. Logging
Logging(日志)举例来说就是:废品回收站
。各种各样的物品都会汇总进入到配品回收站里,然后经过分门别类归纳整理,成为各种可回收资源分别回收到商家那里。一般来说我们在大型系统中提到Logging说的都不是简单的日志
,而是日志聚合系统
。
从本质上来说,Monitoring和Tracing都是Logging,Logging是这三者中覆盖面最大的超集,而前两者则是其一部分的子集。Logging最麻烦的是,开发者也不会完全知道最后记录进入到日志系统里的一共会有哪些东西,只有在使用(检索)的时候才可能需要汇总查询总量中的一部分。
要在一般的Loggin系统中进行Monitoring也是可以的,直接把聚合进来的日志数据提取出来,定期形成数据报告,就是监控了。Tracing也是一样,只要聚合进了Logging系统,有了原始数据,后面要做都是可以做的。因此Logging系统最为通用,其特点和Tracing基本一致,也是需要处理高频并发和巨大的数据量。
5. 总结
这样一看就很清楚了,每个组件都有其存在的必要性:
Monitoring系统(Prometheus)从根本的需求和基本设计上就不可能支持Tracing和Logging:低频 vs 高频、低量 vs 高量,其从设计到实现就只为了监控服务
Tracing系统(Jaeger)对提供的数据有格式要求,且处理方式和一般的Logging也不同,有更限定的应用范围
Logging系统(ELK)可以处理前两者的需求,但前两者的领域有更专业的工具就不推荐直接使用普通的日志聚合系统了;Logging系统一般用来处理大型系统的日志聚合以及检索查询
DD自研的沪牌代拍业务,点击直达
【往期推荐】
读完《Effective Java》后,总结了 50 条开发技巧
2020-11-20
35岁之后,你还会继续写代码吗?
2020-11-19
11月全国招程序员34万人,猜猜平均工资是多少?
2020-11-18
一个复杂系统的拆分改造,压力真大!
2020-11-19
双十一,你买了哪些大呼过瘾的编程书?
2020-11-17
扫一扫,关注我
一起学习,一起进步
每周赠书,福利不断
﹀
﹀
﹀
深度内容
推荐加入
快速搞懂监控、链路追踪、日志三者的区别相关推荐
- 原来10张图就可以搞懂分布式链路追踪系统原理
分布式系统为什么需要链路追踪? 随着互联网业务快速扩展,软件架构也日益变得复杂,为了适应海量用户高并发请求,系统中越来越多的组件开始走向分布式化,如单体架构拆分为微服务.服务内缓存变为分布式缓存.服务 ...
- 一文快速搞懂Kudu到底是什么
文章目录 引言 文章传送门: Kudu 介绍 背景介绍 新的硬件设备 Kudu 是什么 Kudu 应用场景 Kudu 架构 数据模型 分区策略 列式存储 整体架构 Kudu Client 交互 Kud ...
- 快速搞懂平面设计视觉思维的窍门
在这个商业氛围很浓的社会中,各种设计海报让人眼花缭乱,如何脱颖而出?需要靠设计的视觉冲击力.所以做平面设计中,要掌握好视觉设计思维,才能更胜一筹.这里给大家讲几个小窍门,让你们快速搞懂平面设计视觉思维 ...
- 资源放送丨《如何从零快速搭建一整套监控体系(日志采集+主机+数据库)》PPT视频...
前段时间,墨天轮分享了直播<如何从零快速搭建一整套监控体系(日志采集+主机+数据库)>,在这里我们共享一下PPT和视频,供大家参考学习. 客户转型去O使用分布式架构的情况下,作为DBA需要 ...
- 一文快速搞懂对95%置信区间的理解
一文快速搞懂对95%置信区间的理解 综合知乎上各大神的解答和网络资料得到本文对95%置信区间的理解 先给出结论 最常出现的对置信区间的错误理解: 在95%置信区间内,有95%的概率包括真实参数 (错 ...
- 5个品牌案例,6张优质模板,帮你快速搞懂「商业模式画布」!
新入职.新行业,新人如何快速搞懂它的业务模式?新领域.新业务,投资人如何快速搞明白一个公司?新商机.新模式,创业者如何快速一个业务的商业前景? 推荐大家使用商业模式画布,它可以让你轻松看透商业模式.对 ...
- (转)从一道面试题彻底搞懂hashCode与equals的作用与区别及应当注意的细节
背景:学习java的基础知识,每次回顾,总会有不同的认识.该文系转载 最近去面试了几家公司,被问到hashCode的作用,虽然回答出来了,但是自己还是对hashCode和equals的作用一知半解的, ...
- 一分钟搞懂JavaME、JavaSE和JavaEE的区别
一分钟搞懂JavaME.JavaSE和JavaEE的区别 JavaME微缩版 JavaSE标准版 JavaEE企业版 多数编程语言都有预选编译好的类库以支持各种特定的功能,在Java中,类库以包(pa ...
- 微信小程序从入坑到放弃二十九:一个小场景搞懂冒泡事件bindtap和catchtap的区别
摘要: 在微信小程序中,bindtap事件会产生冒泡,若不加以拦截,会一直冒泡到顶端.在某些情况下,一次点击会触发若干点击事件.为了防止冒泡,使用catchtap即可解决问题.在有全屏半透明背景的弹出 ...
最新文章
- echart旭日图_150Echarts - 旭日图(Sunburst Label Rotate)
- JSTL标签显示动态控件
- 基于FPGA的UART接口协议设计
- 不玩了?王思聪退出香蕉娱乐董事长职务,麻闻多接任
- unity3d人物跳_Unity3D研究院之角色控制器组件研究(二十二)
- 搭建一个服务器框架,进程间利用管道通信,线程处理数据
- python中的赋值运算符_整理Python中的赋值运算符
- 提升PPT逼格的利器!只需1招,让PPT页面化腐朽为神奇~
- 「C/C++经典项目开发」黑客远程桌面监控手机摄像头系统
- EM9636数据上传百度云
- python+win10toast—实现PC端通知栏消息推送
- 公司邮箱精选-国际通用的电子邮箱有哪些?
- 商络转债上市价格预测
- ZYNQ之FPGA学习----Vivado软件使用
- linux程序执行失败,调试时提示 .dynamic section for .so.* is not at the expected address
- 【python实例6.5】一篇文章让你弄懂政府工作报告词云~总结笔记
- 新手站长说说之织梦DedeCMS列表页标题SEO优化
- 神经网络图用什么软件做,神经网络示意图怎么画
- NOLO使用记录——遇到的问题(NOLO助手)
- 键盘按键键码值(keyCode)对照表
热门文章
- 大学生就业重心能否“二线城市化”?
- docker 报错 non-overlapping IPv4 address pool among the defaults to assign to the network 解决方法
- golang 时间日期 时区 格式 简介
- java 反序列化漏洞 利用思路简介
- python3 实现 php bin2hex 函数
- python 查看函数调用栈
- Win7 64位的SSDTHOOK(2)---64位SSDT hook的实现
- Windows窗口风格
- 寻找调用DebugPort的函数
- WEB 容器、WEB服务和应用服务器的区别与联系