随着容器技术的发展,微服务架构C位出道! 不服不行,微服务架构确实好处多多,比如每个服务都比较简单,只专注于一个业务功能;服务之间松耦合,灵活性更高;每个服务都可以由不同团队独立开发、部署,互不影响,开发效率更高等等。
然而,微服务架构带来福利的同时,也带来了复杂性。由于微服务之间松耦合,各服务独立部署,使得服务间的依赖关系越来越复杂,调用方式也越来越多样化,一旦出现问题,故障定位简直难上加难……
别怕,天象带你玩转“微服务”!天象通过对微服务调用链日志数据的“采”“存”“用”,可对每一个请求进行全链路跟踪,锁定每一个请求的每一个环节并关联关键信息,实现了对服务运行情况的全局把控,可为故障诊断提供有效的帮助,持续提升运维的效率。
天象提供了服务运行监控、服务拓扑图、请求链路跟踪、服务资源监控等核心功能。
服务运行监控
实时监控系统各微服务的运行情况,包括运行的微服务数及实例数、调用次数、调用失败数、平均响应时间、微服务状态等,帮助用户快速识别有问题的服务。
服务拓扑图
提供微服务动态拓扑图、静态拓扑图。动态拓扑图根据微服务近一个小时调用链记录自动生成调用关系拓扑图,展示不同服务的调用情况及调用的监控数据,包含调用次数、调用频率、平均调用时间和错误次数,方便用户定位服务问题所在;静态拓扑图根据调用关系的配置,展示微服务的静态依赖关系,帮助用户从全局了解整个微服务集群的部署情况。
请求链路跟踪
通过全链路跟踪技术把单个请求经过各个服务的调用数据关联起来,比如性能数据、错误日志信息等等,帮助用户快速定位问题根源。
服务资源监控
监控微服务的资源使用情况,包括堆内存使用量、非堆内存使用量、年轻代GC次数/耗时、年老代GC次数/耗时等等,帮助用户清晰知晓微服务的资源消耗,快速定位资源不足问题。
如此强大的微服务监控功能,背后自然少不了天象的“硬核技术”啦!
下面重点介绍下天象调用链路监控:
Span:基本工作单元,比如发送一次RPC请求就是一个新的span
pSpan:父工作单元,比如A -> B B->C那么A->B就是B->C的父span
Trace:一系列的span组成的树状结构,traceid在服务中可通过header传递,在方法中可通过threadlcoal传递。
天象的服务调用链路通过添加springmvc拦截器来实现,继承HandlerInterceptorAdapter实现preHandle,postHandle,afterCompletion方法来完成Span的封装(包括服务调用开始时间,结束时间,请求路径,类名,方法名,参数等)。天象将Span存入到Elasticsearch,通过Traceid可以查询出所有链路Span,根据Span和pSpan则可以构建出服务调用的拓扑图。再通过可视化的展现方式,便可直观的反映服务的调用情况了。
在现实场景中,有些服务提供了复杂的功能,可能会涉及到几十个方法的调用,那么我们又该如何根据服务调用异常来具体定位到是哪个方法异常的方法调用呢?
天象的方法调用链路监控主要依赖于javaagent加载探针。首先,通过ASM增强servlet的service方法,拦截请求信息,记录服务调用的服务路径;然后,在应用程序方法开始和结束增加探针逻辑,采集方法调用信息,构建span输出到kafka;最后,logstash解析处理输出到ElasticSearch。如此,便实现了服务调用路径到调用方法的完整链路监控。
最后,通过一个简单的例子,我们一起来看看天象调用链路监控的实践应用:
天象,带你玩转“微服务“,哪里异常看哪里,故障定位再也不难啦!