基于SkyWalking的分布式跟踪系统 - 微服务监控

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 上一篇文章我们搭建了基于SkyWalking分布式跟踪环境,今天聊聊使用SkyWalking监控我们的微服务(DUBBO)

服务案例


假设你有个订单微服务,包含以下组件


  • MySQL数据库分表分库(2台)


  • 生产者(2台) dubbo-provider


  • 消费者 dubbo-consumer


网络拓扑图如下


1.png


生产者的关键代码


@ServicepublicclassOrderServiceImplimplementsOrderService {    @AutowiredprotectedOrderMapperorderMapper;    @OverridepublicOrderVOgetById(longid) {        OrderVOorderVO=newOrderVO();        Orderorder=orderMapper.selectById(id);        BeanUtils.copyProperties(order,orderVO);        returnorderVO;    }}


消费者的关键代码


@RestControllerpublicclassOrderController {    @Reference(retries=0)    privateOrderServiceorderService;    @GetMapping("/order/{id}")    publicOrderVOgetOrder(@PathVariablelongid){        returnorderService.getById(id);    }}


监控启动


使用 javaagent 启动生产者


-javaagent:E:\讯飞开发工具\skywalking\agent\skywalking-agent.jar -Dskywalking.agent.service_name=dubbo-provider -Dskywalking.collector.backend_service=192.168.136.129:11800


-javaagent:E:\讯飞开发工具\skywalking\agent\skywalking-agent.jar -Dskywalking.agent.service_name=dubbo-provider2 -Dskywalking.collector.backend_service=192.168.136.129:11800


启动消费者


-javaagent:E:\讯飞开发工具\skywalking\agent\skywalking-agent.jar -Dskywalking.agent.service_name=dubbo-consumer -Dskywalking.collector.backend_service=192.168.136.129:11800


模拟请求


在浏览器访问http://localhost:9090/order/1184489161562816511,多次调用使负载生效;修改订单id参数,让调用覆盖不同的数据库


效果查看


访问skywalking监控地址http://192.168.136.129:8080/查看监控效果

2.jpg


仪表盘

3.png


网络拓扑图


4.jpg


错误日志


5.jpg


Trace查询


日志集成


这部分我们先看下调用链的原理:


请求到来生成一个全局TraceID,通过TraceID可以串联起整个调用链,一个TraceID代表一次请求。


除了TraceID外,还需要SpanID用于记录调用父子关系。每个服务会记录下Parent id和Span id,通过他们可以组织一次完整调用链的父子关系。


要查看某次完整的调用则只要根据TraceID查出所有调用记录,然后通过Parent id和Span id组织起整个调用父子关系。


正是由于TraceID如此重要,所以我们希望这个调用链的TraceID能输出在日志文件中,一旦观察到有异常调用,我们在日志分析平台直接搜索TraceID即可将关联的日志全部检索出来,大大提高我们解决问题的效率。


集成过程(log4j2)


引入日志包log4j2


<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId></dependency>


引入SW工具包


<!--SWtrace跟踪--><dependency><groupId>org.apache.skywalking</groupId><artifactId>apm-toolkit-log4j-2.x</artifactId><version>6.4.0</version></dependency>


修改日志显示格式%d [%traceId] %-5p %c{1}:%L - %m%n


启动应用,观察控制台


6.jpg


刚启动时候获取不到TraceID,所以TID显示为N/A,启动完成后调用请求再次观察控制台,发现所有链路上的日志都打上了TraceID。


7.png


很简单的几步就让你的微服务加上了调用链监控,你还不赶紧试试?

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
30天前
|
消息中间件 分布式计算 中间件
秀出天际!阿里甩出的988页分布式微服务架构进阶神仙手册我粉了
秀出天际!阿里甩出的988页分布式微服务架构进阶神仙手册我粉了
|
7天前
|
存储 运维 监控
软件设计不是 CRUD:像搭积木一样搭建应用系统(下)——微服务化系统的搭建
【6月更文挑战第8天】微服务架构现为构建复杂应用的主流方法,通过拆分小型独立服务实现灵活组合。服务划分依据业务功能,通信常采用HTTP API或RPC,强调接口简洁、稳定和可扩展。数据管理需保证一致性,示例代码展示了服务间交互。实际搭建还需考虑部署、监控、日志及分布式事务处理等挑战。微服务是一个持续演进的过程,要求开发团队有深厚技术基础和协作能力。它提升了软件的灵活性、可扩展性和可靠性,随着技术进步,微服务架构将持续发展。
34 0
|
7天前
|
监控 数据管理 Java
智慧城管源码,基于微服务+java+springboot+vue+uniapp开发的城管综合执法系统源码
智慧城管执法系统利用微服务和Java技术提升城市管理水平,涵盖事件处理、投诉、处罚等功能,包含PC和APP源码。系统支持执法APP,便于领导随时随地审批,具备文书模板、地图定位、法规查询等功能。此外,执法办案系统通过监控视频分析事件,实现案件全程闭环管理,包括组织、案件、信用和执法队伍管理,以及法规库等基础支撑。系统旨在优化流程,提高数据管理和效率。
智慧城管源码,基于微服务+java+springboot+vue+uniapp开发的城管综合执法系统源码
|
10天前
|
存储 缓存 NoSQL
了解Redis,第一弹,什么是RedisRedis主要适用于分布式系统,用来用缓存,存储数据,在内存中存储那么为什么说是分布式呢?什么叫分布式什么是单机架构微服务架构微服务的本质
了解Redis,第一弹,什么是RedisRedis主要适用于分布式系统,用来用缓存,存储数据,在内存中存储那么为什么说是分布式呢?什么叫分布式什么是单机架构微服务架构微服务的本质
|
17天前
|
Java 持续交付 API
Java的分布式系统与微服务架构
Java的分布式系统与微服务架构
|
20天前
|
监控 测试技术 数据库
探索微服务架构下的系统调优实践
【5月更文挑战第27天】在当今软件开发领域,微服务架构因其灵活性、可扩展性而受到青睐。然而,随之而来的是复杂性增加和性能调优的挑战。本文将深入探讨在微服务环境中进行系统调优的策略与实践,通过分析真实案例,揭示优化过程中的关键步骤和考虑因素,为追求高性能微服务系统的开发者提供参考。
31 1
|
1月前
|
缓存 负载均衡 监控
探索分布式系统演进之路:从负载均衡到微服务架构
小米分享了分布式系统的发展,从早期的负载均衡(入口级、网关和客户端)到微服务架构的演进。微服务实现服务解耦,增强系统弹性,但带来了新的挑战。为优化数据库性能,实施了主备读写分离、全文搜索引擎、缓存集群等措施。通过微服务治理,如服务注册、动态配置、灰度发布等,提升了系统稳定性和可靠性。未来将继续优化分布式系统,提供更好的服务体验。关注公众号“软件求生”了解更多。
40 6
|
1月前
|
数据采集 存储 运维
如何使用SkyWalking收集分析分布式系统的追踪数据
通过以上步骤,你可以使用 SkyWalking 工具实现对分布式系统的数据采集和可视化。SkyWalking 提供了强大的追踪和度量功能,帮助开发者和运维人员更好地理解系统的性能状况。欢迎关注威哥爱编程,一起学习成长。
|
1月前
|
负载均衡 应用服务中间件 nginx
服务器架构、分布式系统、负载均衡、微服务、高可用性
**分布式系统取代单体架构,以微服务实现高扩展性和灵活性。通过负载均衡技术增强性能,防止单点故障,结合冗余备份与故障切换保障高可用性,这种架构是支撑大规模在线业务的关键。**
62 3
|
1月前
|
API 开发者 UED
构建高效微服务架构:后端开发的新趋势移动应用与系统:开发与优化的艺术
【4月更文挑战第30天】 随着现代软件系统对可伸缩性、灵活性和敏捷性的日益需求,传统的单体应用架构正逐渐向微服务架构转变。本文将探讨微服务架构的核心概念,分析其优势,并着重讨论如何利用最新的后端技术栈实现一个高效的微服务系统。我们将涵盖设计模式、服务划分、数据一致性、服务发现与注册、API网关以及容器化等关键技术点,为后端开发者提供一份实操指南。 【4月更文挑战第30天】 在数字化时代的浪潮中,移动应用和操作系统的紧密交织已成为日常生活和商业活动的基石。本文将深入探讨移动应用开发的关键技术、跨平台开发工具的选择以及移动操作系统的架构和性能优化策略。通过分析当前移动应用开发的挑战与机遇,我们将