详解最新链路追踪skywalking框架介绍、架构、环境本地部署&配置、整合微服务springcloudalibaba 、日志收集、自定义链路追踪、告警等

06-01 1697阅读

文章目录

      • 1.skywalking介绍
      • 3.skywalking 日志收集
      • 4.skywalking 自定义链路追踪
      • 5.skywalking 告警
      • 6.参考资料

        1.skywalking介绍

        • 多种监控手段,可以通过语言探针和service mesh 获得监控数据
        • 支持多种语言自动探针,包含java/net/nodejs
        • 轻量高效,无需大数据平台和大量的服务器资源
        • 模块化,UI、存储、集群管理都有多种机制可选
        • 支持告警
        • 优秀的可视化解决方案

          整体架构

          详解最新链路追踪skywalking框架介绍、架构、环境本地部署&配置、整合微服务springcloudalibaba 、日志收集、自定义链路追踪、告警等

          • 上部分 Agent :负责从应用中收集链路信息,发送给SkyWalking OAP服务器,目前支持SkyWalking、Zikpin、Jaeger等提供的Tracing 数据信息。而目前采用的是SkyWalking Agent收集 SkyWalking Tracing数据,传递给服务器

          • 下部分SkyWalking OAP :负责接收Agent发送的Tracing数据信息,然后进行分析(Analysis Core) ,存储到外部存储器(Storage ),最终提供查询( Query )功能

          • 右部分 Storage :Tracing 数据存储。目前支持ES、MySQL、Sharding Sphere、TiDB、H2多种存储器,目前采用的是 ES ,主要考虑是 SkyWalking 开发团队自己的生产环境采用 ES 为主

          • 左部分 SkyWalking UI :负责提供控台,查看链路等等

            skywalking demo

            默认登录账户: skywalking skywalking

            https://demo.skywalking.apache.org/

            资料

            官网:https://skywalking.apache.org/

            下载 skywalking本地安装包:

            https://skywalking.apache.org/downloads/

            文档:https://skywalking.apache.org/docs/#SkyWalking

            github: https://github.com/apache/skywalking

            https://skywalking.apache.org/docs/main/latest/en/setup/backend/backend-setup/#applicationyml

            1. SkyWalking 环境搭建部署(单机版)

            详解最新链路追踪skywalking框架介绍、架构、环境本地部署&配置、整合微服务springcloudalibaba 、日志收集、自定义链路追踪、告警等

            1.安装elasticSearch

            • 参考之前博文安装&启动

              elasticsearch.bat 或者elasticsearch.sh启动服务

            • 访问默认地址:http://localhost:9200/

              2.搭建skywalking 服务

              • 下载skywalking 安装包

                对于 SkyWalking 的软件包,有两种方式获取:

                • 手动编译
                • 官方包 (建议官方包,bug少)
                • 修改 skywalking config目录application.yml配置

                  详解最新链路追踪skywalking框架介绍、架构、环境本地部署&配置、整合微服务springcloudalibaba 、日志收集、自定义链路追踪、告警等

                  详解最新链路追踪skywalking框架介绍、架构、环境本地部署&配置、整合微服务springcloudalibaba 、日志收集、自定义链路追踪、告警等

                • 修改skywalking 安装目录中的webapp目录中的webapp.yml配置

                  详解最新链路追踪skywalking框架介绍、架构、环境本地部署&配置、整合微服务springcloudalibaba 、日志收集、自定义链路追踪、告警等

                • 启动skywalking server &webapp 执行如下命令:

                  详解最新链路追踪skywalking框架介绍、架构、环境本地部署&配置、整合微服务springcloudalibaba 、日志收集、自定义链路追踪、告警等

                  备注说明:如果启动有问题,可以查看日志

                  详解最新链路追踪skywalking框架介绍、架构、环境本地部署&配置、整合微服务springcloudalibaba 、日志收集、自定义链路追踪、告警等

                • skywalking ui访问地址:

                  默认 http://localhost:8080

                  详解最新链路追踪skywalking框架介绍、架构、环境本地部署&配置、整合微服务springcloudalibaba 、日志收集、自定义链路追踪、告警等

                  3.启动一个 Spring Boot 应用,并配置 SkyWalking Agent

                  首先,下载skywalking agent 包如下:

                  详解最新链路追踪skywalking框架介绍、架构、环境本地部署&配置、整合微服务springcloudalibaba 、日志收集、自定义链路追踪、告警等

                  详解最新链路追踪skywalking框架介绍、架构、环境本地部署&配置、整合微服务springcloudalibaba 、日志收集、自定义链路追踪、告警等

                  其次,启动探针

                  通过探针方式配置微服务链路追踪*

                     java -javaagent:/path/to/skywalking-agent.jar \
                       -Dskywalking.agent.service_name=order-service \
                       -Dskywalking.collector.backend_service=localhost:11800 \
                       -jar order-service.jar
                  

                  linux启动

                  详解最新链路追踪skywalking框架介绍、架构、环境本地部署&配置、整合微服务springcloudalibaba 、日志收集、自定义链路追踪、告警等

                  idea中配置探针

                  #设置skywalking-agent.jar路径
                  -javaagent:D:\resource\skywalking\skywalking-agent\skywalking-agent.jar
                  #在skywalking上显示微服务名称
                  -DSW_AGENT_NAME=wemedia-oss-user
                  #skywalking的collector服务的ip以及端口
                  -DSW_AGENT_COLLECTOR_BACKEND_SERVICES=localhost:11800
                  

                  详解最新链路追踪skywalking框架介绍、架构、环境本地部署&配置、整合微服务springcloudalibaba 、日志收集、自定义链路追踪、告警等

                  启动服务之后,调用服务api:http://127.0.0.1:8889/api/user/vipRecharge ,在skywalking ui上查看服务如下:

                  详解最新链路追踪skywalking框架介绍、架构、环境本地部署&配置、整合微服务springcloudalibaba 、日志收集、自定义链路追踪、告警等

                  查看拓扑图如下:

                  详解最新链路追踪skywalking框架介绍、架构、环境本地部署&配置、整合微服务springcloudalibaba 、日志收集、自定义链路追踪、告警等

                  发现拓扑图不显示gateway服务,分析这是skywalking的bug,解决方法:

                  到agent optional-plugins目录下 复制最新的gateway lib到agent plugins目录里

                  详解最新链路追踪skywalking框架介绍、架构、环境本地部署&配置、整合微服务springcloudalibaba 、日志收集、自定义链路追踪、告警等

                  详解最新链路追踪skywalking框架介绍、架构、环境本地部署&配置、整合微服务springcloudalibaba 、日志收集、自定义链路追踪、告警等

                  重启skywalking

                  重启微服务

                  重新访问接口微服务:http://127.0.0.1:8889/api/user/vipRecharge

                  再次访问skywalking ui:

                  详解最新链路追踪skywalking框架介绍、架构、环境本地部署&配置、整合微服务springcloudalibaba 、日志收集、自定义链路追踪、告警等

                  3.skywalking 日志收集

                  1. 引入skywalking日志收集依赖

                        
                            
                                org.apache.skywalking
                                apm-toolkit-logback-1.x
                                9.3.0
                            
                    
                  2. 调整logback-spring.xml

                    
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        
                        
                            
                                
                                
                                    ${CONSOLE_LOG_PATTERN}
                                
                                
                                utf8
                            
                        
                        
                            0
                            1024
                            true
                            
                        
                        
                        
                            
                                
                                    ${CONSOLE_LOG_PATTERN}
                                
                                utf8
                            
                        
                        
                        
                            ${log.path}/sys-info.log
                            
                                
                                ${log.path}/sys-info-%d{yyyy-MM-dd}.log
                                
                                ${log.save.time.day}
                            
                            
                                
                                    
                                    %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n
                                
                            
                        
                        
                        
                            ${log.path}/sys-error.log
                            
                            
                                
                                ${log.path}/sys-error.%d{yyyy-MM-dd}.log
                                
                                ${log.save.time.day}
                            
                            
                                ${log.pattern}
                            
                            
                                
                                ERROR
                                
                                ACCEPT
                                
                                DENY
                            
                        
                        
                        
                        
                        
                        
                            
                            
                            
                        
                    
                    

                  备注说明: [%X{tid}] :添加skywalking 追踪id,方便追踪整个调用链路

                  1. 访问接口,查看skywalking ui log界面,日志正常显示如下:

                    详解最新链路追踪skywalking框架介绍、架构、环境本地部署&配置、整合微服务springcloudalibaba 、日志收集、自定义链路追踪、告警等

                  4.skywalking 自定义链路追踪

                  • 自定义链路追踪主要是为了对项目中的业务方法,实现链路追踪,方便排查问题

                  • 引入依赖

                     
                            
                                org.apache.skywalking
                                apm-toolkit-trace
                                9.3.0
                            
                    
                  • 自定义链路

                    方法1:使用@Trace注解在要追踪的接口上,只需要记录方法的出参 ,入参;如果要打印返回结果,一定要重写返回结果toString()方法,不然返回对象的地址

                    ​ 加入@Tags或@Tag记录参数和返回信息

                    ​ @Tag注解中key= 方法名 value= returnedObj 返回值 arg[0] 参数

                    详解最新链路追踪skywalking框架介绍、架构、环境本地部署&配置、整合微服务springcloudalibaba 、日志收集、自定义链路追踪、告警等

                    /***
                    *controller方法
                    */
                    @GetMapping("/vipRecharge")
                        public CommonResult vipReCharge() {
                            userService.vipReCharge("123");
                            return CommonResult.success("vip用户充值成功!");
                        }
                    /***
                    * servrice方法
                    */
                     
                       @Trace
                       @Tags({@Tag(key = "vipReCharge",value = "returnedObj"),
                       @Tag(key = "vipReCharge",value = "arg[0]")
                       })
                     @SentinelResource(value = "vipReCharge",blockHandler ="vipReChargeFallback" )
                        @Override
                        public CommonResult vipReCharge(String num) {
                            List userList=tUserMapper.selectAll();
                            System.out.println("userList:"+userList.size());
                            CommonResult result=payFeignApi.callWechatPay();
                            System.out.println("调用第三方payFeignApi.callWechatPay 返回结果:"+result);
                            return CommonResult.success("调用支付服务成功!");
                        }
                    

                    再次查看skywalking链路追踪trace,发现上面该方法已经被加载进链路中

                    详解最新链路追踪skywalking框架介绍、架构、环境本地部署&配置、整合微服务springcloudalibaba 、日志收集、自定义链路追踪、告警等

                    增加Tags之后, 查看方法请求和返回值

                    详解最新链路追踪skywalking框架介绍、架构、环境本地部署&配置、整合微服务springcloudalibaba 、日志收集、自定义链路追踪、告警等

                    方法2:编码的方式,适合逻辑比较多,多个地方需要记录一些参数或关键信息,info,debug 或堆栈日志等

                    使用skywalking 的 ActiveSpan.error(); ActiveSpan.info();ActiveSpan.debug()等在需要追踪的关键地方记录日志

                        @GetMapping("/callWechatPay")
                        public CommonResult callWechatPay(HttpServletRequest request) {
                            log.info("X-Token value:"+request.getHeader("X-Token"));
                            ActiveSpan.tag("PayController.callWechatPay()","调用支付controller中callWechatPay()方法!");
                            try {
                                //模拟异常情况:
                                int i=10/0;
                    //            TimeUnit.SECONDS.sleep(2);
                            } catch (Exception e) {
                                //ActiveSpan.error();//skywalking追踪事件为error级别 或debug或info级别
                               // ActiveSpan.error("是除零异常");//错误message
                                ActiveSpan.error(new RuntimeException("是除零异常"));
                               // throw new RuntimeException(e);
                            }
                            return CommonResult.success("调用微信支付成功!");
                        }
                    

                    再次查看skywalking ui结果如下:

                    详解最新链路追踪skywalking框架介绍、架构、环境本地部署&配置、整合微服务springcloudalibaba 、日志收集、自定义链路追踪、告警等

                    方法3 使用OpenTracing Java API定义链路追踪

                    1. 在pom文件中引入依赖

                       
                                  org.apache.skywalking
                                  apm-toolkit-opentracing
                                  9.3.0
                              
                      
                    2. 在代码中增加自定义的链路追踪代码,最后一定要进行finish,否则也收集不到信息。

                      //在service中增加自定义链路追踪代码 
                      @Override
                          public CommonResult vipReCharge(String num) {
                              //在代码中使用opentracing代码自定义链路追踪
                              Tracer tracer=new SkywalkingTracer();
                              Tracer.SpanBuilder spanBuilder=tracer.buildSpan("UserServiceImpl.vipRecharge(String num)方法");
                              Span span=spanBuilder.withTag("startTag",false).startManual();
                              List userList=tUserMapper.selectAll();
                              System.out.println("userList:"+userList.size());
                              CommonResult result=payFeignApi.callWechatPay();
                              System.out.println("调用第三方payFeignApi.callWechatPay 返回结果:"+result);
                              
                              span.log("调用第三方payFeignApi.callWechatPay 返回结果:"+result);
                              span.finish();
                              return CommonResult.success("调用支付服务成功!");
                          }
                      
                    3. 查看结果如下:

                      详解最新链路追踪skywalking框架介绍、架构、环境本地部署&配置、整合微服务springcloudalibaba 、日志收集、自定义链路追踪、告警等

                    5.skywalking 告警

                    详解最新链路追踪skywalking框架介绍、架构、环境本地部署&配置、整合微服务springcloudalibaba 、日志收集、自定义链路追踪、告警等

                    配置告警接口:

                    详解最新链路追踪skywalking框架介绍、架构、环境本地部署&配置、整合微服务springcloudalibaba 、日志收集、自定义链路追踪、告警等

                    实现高级接口nofity或go-wechat

                    6.参考资料

                    • SkyWalking 极简入门:https://skywalking.apache.org/zh/2020-04-19-skywalking-quick-start/

                      https://github.com/SkyAPM/document-cn-translation-of-skywalking/blob/master/docs/zh/8.0.0/setup/backend/backend-setup.md

                    • 本地安装参考文档:https://blog.csdn.net/seashouwang/article/details/111156985

                    • 分布式监控Skywalking安装及使用教程:

                      https://blog.csdn.net/m0_74825488/article/details/145787488?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0-145787488-blog-111156985.235

                    • skywalking 中文教程 https://www.echo.cool/docs/category/skywalking-%E6%95%99%E7%A8%8B

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码