pinpoint

全链路监控的起源&解决方案

↘锁芯ラ 提交于 2021-01-09 05:16:54
全链路监控的思想 APM(Application Performance Management)的核心思想是什么? 在应用服务各节点相互调用的时候,从中记录并传递一个应用级别的标记,这个标记可以用来关联各个服务节点之间的关系。 比如两个应用服务节点之间使用HTTP作为传输协议的话,那么这些标记就会被加入到HTTP头中。 可见如何传递这些标记是与应用服务节点之间使用的通讯协议有关的,常用的协议就相对容易加入这些内容,一些按需定制的可能就相对困难些,这一点也直接决定了实现分布式追踪系统的难度。 它通过探针自动收集所需的指标,并进行分布式追踪。 通过这些调用链路以及指标,APM会感知应用间关系和服务间关系,并进行相应的指标统计。 如何衡量一个大规模集群的跟踪系统的优劣? 它应该满足 低损耗 、 应用透明的 、 大范围部署 这三个需求的。 全链路监控系统的功能 web应用过程: 分析url调用过程中性能消耗原因,抓取超过阈值url的详细数据 数据库性能: 支持多种数据库类型的监测,定位并追踪慢SQL语句问题 错误分析: 记录错误发生时的详细信息,统计应用错误率,定位问题具体至代码行 外部API调用: 可以监测所有服务端应用外部调用API的耗时,并进行汇总统计 线程剖析: 可以实现生产环境下实时在线的线程剖析,可在运行时了解代码性能 NoSQL分析: 实时监控Memcache,

微服务应该这么搞

久未见 提交于 2020-11-26 09:04:52
微服务越来越火。很多互联网公司,甚至一些传统行业的系统都采用了微服务架构。体会到微服务带来好处的同时,很多公司也明显感受到微服务化带来的一系列让人头疼的问题。本文是笔者对自己多年微服务化经历的总结。 如果你正准备做微服务转型,或者在微服务化过程中遇到了困难,此文很可能会帮到你! 写在前面 正文开始前,为了让各位读友更好的理解本文内容,先花两分钟了解一下微服务的优缺点。 微服务的好处 聊起微服务,很多朋友都了解微服务带来的好处,罗列几点: 模块化,降低耦合 将单体应用按业务模块拆分成多个服务,如果某个功能需要改动,大多数情况,我们只需要弄清楚并改动对应的服务即可。只改动一小部分就能满足要求,降低了其他业务模块受影响的可能性。从而降低了业务模块间的耦合性。 屏蔽与自身业务无关技术细节 例如,很多业务需要查询用户信息,在单体应用的情况下,所有业务场景都通过 DAO 去查询用户信息,随着业务发展,并发量增加,用户信息需要加缓存,这样所有业务场景都需要关注缓存,微服务化之后,缓存由各自服务维护,其他服务调用相关服务即可,不需要关注类似的缓存问题。 数据隔离,避免不同业务模块间的数据耦合 不同的服务对应不同数据库表,服务之间通过服务调用的方式来获取数据。 业务边界清晰,代码边界清晰 单体架构中不同的业务,代码耦合严重,随着业务量增长,业务复杂后,一个小功能点的修改就可能影响到其他业务点

Spring Cloud Gateway全链路实现

China☆狼群 提交于 2020-11-23 20:38:13
随着微服务架构的流行,服务按照不同的维度进行拆分,一次请求往往需要涉及到多个服务。而诸多的服务可能分布在了几千台服务器,横跨多个不同的数据中心。为了快速定位和解决故障,应用性能进行分析,全链路监控组件就在这样的问题背景下产生了。最出名的是谷歌公开的论文提到的Google Dapper。本文主要介绍了Spring Cloud Gateway全链路实现解决方案。主要讲解全链路原理和方案;最后分享如何实现探针全链路。 全链路原理 主流的全链路方案都是采用谷歌公开的论文提到的Google Dapper方案。 一个Span表示一个服务的调用开始到结束。 如果一个Span没有父ID则被称之为入口Span,需负责生成本次链路调用全局唯一的TxId。 如果服务间有调用,则透传TxId、SpanId和pSpanId,每个SpanId需重新生成,pSpanId采用调用方的SpanId。 被调用服务需将透传的头信息恢复,继续透传后续节点。 最终根据Span的关联性生成链路树。 将应用以角色进行区分,分为Server端和Client端。 Server端负责接收请求,其流程主要分为三步: 创建入口Span 解析并恢复上游头信息: TxId、SpanId和pSpanId 结束入口Span Client端负责发送请求,其流程也分为三步: 创建子Span 传递给下游头信息:TxId

如何使用Firebug或类似工具调试JavaScript / jQuery事件绑定?

爱⌒轻易说出口 提交于 2020-08-16 14:16:55
问题: I need to debug a web application that uses jQuery to do some fairly complex and messy DOM manipulation. 我需要调试一个使用jQuery进行一些相当复杂和混乱的 DOM 操作的Web应用程序。 At one point, some of the events that were bound to particular elements, are not fired and simply stop working. 某一时刻,某些与特定元素绑定的事件并未触发,只是停止工作。 If I had a capability to edit the application source, I would drill down and add a bunch of Firebug console.log() statements and comment/uncomment pieces of code to try to pinpoint the problem. 如果我有能力编辑应用程序源代码,那么我将向下钻取并添加一堆 Firebug console.log() 语句和注释/取消注释代码段以尝试找出问题所在。 But let's assume I cannot edit the

Java Agent(上)

无人久伴 提交于 2020-08-12 01:57:33
1、java agent是什么? ---》对用户透明,不侵入用户业务代码。让java虚拟机加载agent jar 2、java agent有什么用? --->应用场景例如:调用链追踪项目,在用户无感知的情况下,记录日志。目前业内使用该技术的有,SkyWalking,Pinpoint(这个监控的粒度更小) -各个 Java IDE 的调试功能,例如 eclipse、IntelliJ ; -热部署功能,例如 JRebel、XRebel、 spring-loaded; -各种线上诊断工具,例如 Btrace、Greys,还有阿里的 Arthas; -各种性能分析工具,例如 Visual VM、JConsole 等 3、java agent的实现原理? https://zhuanlan.zhihu.com/p/147375268 4、 入门案例 4.1、 如何制造自己第一个java agent jar包 4.1.1、 第一步:我们需要一个插件来帮助我们生成带特定格式的MAINIFEST.MF的jar 4.1.2、 第二步:在启动项目的时候,在jvm参数中添加 -javaagent: *\ving-agent-0.0.1-SNAPSHOT.jar (在jvm上先加载agent包) (偷偷地问)特定格式的MAINIFEST.MF是怎样的?需要包括下面的内容 Manifest-Version:

谁说Cat不能做链路跟踪的,给我站出来

こ雲淡風輕ζ 提交于 2020-08-09 10:46:44
背景 链路跟踪,我们有很多可选项。常见的有 zipkin,pinpoint,skywalking,jaeger 等。 基本上都是根据谷歌的《Dapper 大规模分布式系统的跟踪系统》这篇论文发展出来的。 今天讲下 Cat 里的链路跟踪要如何来实现,没用过 Cat 的同学可以查看我的这篇文章 《熬夜之作:一文带你了解 Cat 分布式监控》进行了解。 在 Cat 中可以很方便的看到每个请求的总耗时以及业务操作,数据库操作的耗时情况。对于服务之间的调用也可以通过埋点的方式进行监控。 如下图,可以看出请求内发起了一次 RPC 的调用,callRPC 开头的那条记录。耗时 11ms, 但是这个 RPC 服务内部耗时花在哪里了,在这边不能直接查看,只能去另一个服务中查看,不是很方便。 图片 详细的我画了一张图说明下现在的问题: 从上图可以看出,一个请求经过了多个服务,每个服务中对远程调用或者本地调用都有埋点,这样就能监控到调用的异常和性能指标。 下面一部分是在 Cat 中我们去查看这些指标的场景,Cat 中的数据展示是以项目维度来展示的,所以每个服务都有自己的监控数据。 如果我想要知道刚刚那次请求,在整个链路中哪里最慢,耗时在哪里,我得分别去 4 个服务下面才能看到这些信息,不直观。 实现方式 如下图所示: 从网关到服务,从服务到服务,都需要将 Trace 信息进行传递才可以将整个链路串起来

如何大大提升微服务的高可用性?

家住魔仙堡 提交于 2020-08-06 05:48:24
0、前言 微服务架构现在是个热门话题,微服务的高可用性自然也是企业非常关注的。眼下互联网的架构秘籍三板斧“高可用可扩展,缓存提速,消峰减流去并发”,在微服务架构体系中有着不一样的诠释。 在微服务中消息队列不仅用来消峰,还可以通过消息队列来解决微服务之间的多耦合,把同步调用转化为异步调用,减少调用链路,提升系统稳定性。 单体应用拆分为独立的多个无形中增加了系统的响应时间,可以通过本地缓存、分布式缓存相结合的方式来弥补性能的损耗。 以前通过内部接口调用的方法变成RPC调用多个服务,服务与服务之间还有依赖关系,每个服务接口响应时间也都不一样,简单的设置单个接口的超时时间已解决不了问题,可通过服务定级,哪些服务不能出问题,哪些服务允许有异常,采用降级、熔断的方式来解决问题,以达到系统的高可用。 以上这三种方式如能合理运用,微服务的高可用性大大提升,所以说缓存、队列、熔断降级成了微服务架构中的新三板斧。 以下是相关技术应用中的一些难点解答,供大家参考。 1、微服务架构中有哪些技术手段必须在设计阶段就需要规划进去? 互联网的三板斧:熔断、消息队列、缓存,这个必须有要考虑进入,另外为了提高响应时间,并行化操作也需要提前考虑。 熔断:保障服务高可用的重要手段,用户的请求将不再直接访问服务,而是通过线程池中的空闲线程来访问服务,如果线程池已满,则会进行降级处理,用户的请求不会被阻塞

java 保证线程池中传递值

和自甴很熟 提交于 2020-08-05 17:02:49
1.阿里框架 https://github.com/alibaba/transmittable-thread-local#2-%E4%BF%9D%E8%AF%81%E7%BA%BF%E7%A8%8B%E6%B1%A0%E4%B8%AD%E4%BC%A0%E9%80%92%E5%80%BC 注意:是get的時候才會去copy父线程的值(此时有个弊端,比如链路追踪: 父方法已经执行完了。子线程才get就拿不到父方法的spanID,这样就串不起来了) 2.自定义java agent 创建线程时( java.util.concurrent.Callable , java.lang.Runnable ),将当前父线程变量传递到子线程种。而不是get的时候才去拿. (如果做链路框架推荐用此方法) https://github.com/naver/pinpoint/blob/master/plugins/thread/src/main/java/com/navercorp/pinpoint/plugin/thread/ThreadPlugin.java 来源: oschina 链接: https://my.oschina.net/xiaominmin/blog/4422032

Java Agent入门

喜你入骨 提交于 2020-08-05 12:33:09
介绍 在JDK1.5以后,我们可以使用agent技术构建一个独立于应用程序的代理程序(即为Agent),用来协助监测、运行甚至替换其他JVM上的程序。使用它可以实现虚拟机级别的AOP功能。Agent分为两种,一种是在主程序之前运行的Agent,一种是在主程序之后运行的Agent(前者的升级版,1.6以后提供)。 使用 主程序运行之前的代理程序 创建代理类 public class MyPreMainAgent { //方法名和参数都是固定的 premain表示在主程序运行之前运行 public static void premain(String agentArgs, Instrumentation inst) { System.out.println("PreMain start"); System.out.println(agentArgs); System.out.println(inst); } } Instrumentation是java1.5新提供的类,它提供在运行时重新加载某个类的的class文件的api。 public interface Instrumentation { /** * 添加一个转换器Transformer,之后的所有的类加载都会被Transformer拦截。 * ClassFileTransformer类是一个接口,使用时需要实现它

Autel MaxiTPMS TS601 Wireless TPMS Sensor Reset Relearn Activate Programming Tool

余生颓废 提交于 2020-04-26 14:59:35
Why Choose Autel TPMS TS601? MaxiTPMS TS601 is a TPMS tool with highest performance in the world. It’s the best solution for tire shops and automotive workshops to perform various TPMS services! * Capable of fully diagnosing TPMS problems as well as activating TPMS sensors and reading/ writing sensor ID to the vehicle ECU with the included obdi interface. Additional Basic OBD2 code reader function * Reads, records and plays back Autel TPMS Sensors TPMS Live data including tire pressure, signal status, temperature, battery status and more * Easy to use with intuitive navigation and step-by-step