分布式链路追踪SkyWalking进阶实战之RPC上报和WebHook通知(三)
目录
1.自定义SkyWalking链路追踪配置
1.1 什么是TraceId
1.2 使用的背景
1.3 编码
2.SkyWalking-RocketBot性能剖析
3.SkyWalking链路追踪-日志和RPC上报实战
4.源码部署 Apache SkyWalking
5.SkyWalking链路追踪-告警模块和WebHook通知《上》
6.SkyWalking链路追踪-告警模块和WebHook通知《下》
7.Jar包和微服务方式打包运行整合Skywalking
本篇主要介绍SkyWalking性能剖析,慢业务代码定位以及通知告警
SkyWalking和Springboot的整合以及基础页面介绍见下面2篇博客
分布式链路追踪SkyWalking快速入门之环境安装界面指标介绍(一)_这是王姑娘的微博的博客-CSDN博客本篇简单介绍SkyWalking是什么,特点和整体架构组成,使用docker安装部署,页面指标项的介绍https://blog.csdn.net/wnn654321/article/details/128594125Springboot整合分布式链路追踪SkyWalking之探针使用和链路采集实战(二)_这是王姑娘的微博的博客-CSDN博客本篇主要展示SkyWalking和Springboot项目的整合以及探针链路采集展示https://blog.csdn.net/wnn654321/article/details/128594365
1.自定义SkyWalking链路追踪配置
1.1 什么是TraceId
用来标识一条请求链路,一条请求链路中包含一个Trace ID,多个Span ID
1.2 使用的背景
对业务代码进行链路追踪,方便排查问题
比如,某个接口请求耗时慢,想对业务接口方法进行追踪
controller->service 方法,记录业务方法加入到链路中,记录入参、返回值等
1.3 编码
添加依赖
<dependency><groupId>org.apache.skywalking</groupId><artifactId>apm-toolkit-trace</artifactId><version>8.5.0</version>
</dependency>
业务方法添加注解 @Trace
需要记录入参和返回值的话增加 tag注解
注意!!POJO记得重写toString方法
@Tags(
{@Tag(key = "方法名-input", value = "arg[0]"),
@Tag(key = "方法名-output", value = "returnedObj")
}
)
Demo:
缺点:代码有侵入性
2.SkyWalking-RocketBot性能剖析
性能剖析
新建任务:新建需要分析的端点
左侧列表:对任务进行采样
右侧:每个端点的链路信息
性能分析:可以查看对应方法的调用栈,找出问题点 可直接定位到代码方法和代码行
注意:一个服务在监控持续时间内只能设置一个端点监控任务
新建任务后开始请求接口,然后等待几秒刷新性能剖析列表,就会出来接口对应的分析结果
点击分析按钮,出来对应的堆栈信息 ,可查看自己熟悉的包名类名调用
3.SkyWalking链路追踪-日志和RPC上报实战
使用背景:
用户请求接口,怎么在我们日志中找到traceId来跟踪系统调用链路 / 需要在系统日志打印出traceId
添加依赖:pom.xml
<dependency><groupId>org.apache.skywalking</groupId><artifactId>apm-toolkit-logback-1.x</artifactId><version>8.5.0</version>
</dependency>
配置logback打印日志(SpringBoot默认使用Logback),配置文件名 logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration> <!-- 控制台输出 --><appender name="console" class="ch.qos.logback.core.ConsoleAppender"><encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"><layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout"><Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{36} -%msg%n</Pattern></layout></encoder></appender><!--系统操作日志--><root level="INFO"> <appender-ref ref="console"/> <appender-ref ref="grpc-log"/> </root>
</configuration>
代码打印日志:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;Logger logger = LoggerFactory.getLogger(ProductController.class);//代码中 logger.info 打印日志
重启服务后打印日志: 可以看到TID
将日志上传到skywalking oap中,查看更方便
<?xml version="1.0" encoding="UTF-8"?>
<configuration> <!-- 控制台输出 --><appender name="console" class="ch.qos.logback.core.ConsoleAppender"><encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"><layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout"><Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{36} -%msg%n</Pattern></layout></encoder></appender><!-- skywalking grpc 日志收集上报服务端 8.4.0版本后支持 --><appender name="grpc-log" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender"><encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"><layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout"><Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{36} -%msg%n</Pattern></layout></encoder></appender><!--系统操作日志--><root level="INFO"> <appender-ref ref="console"/> <appender-ref ref="grpc-log"/> </root>
</configuration>
注意:
skywaling agent 默认是上传到本地的oap,如果oap server地址不是本地,则需要单独配置oap server地址
agent文件夹里面config配置 增加以下几个
#日志数据的grpc服务器的主机
plugin.toolkit.log.grpc.reporter.server_host=${SW_GRPC_LOG_SERVER_HOST:112.xxx.xx.xxx}
#日志数据的grpc服务器的端口
plugin.toolkit.log.grpc.reporter.server_port=${SW_GRPC_LOG_SERVER_PORT:11800}
#日志数据的最大大小
plugin.toolkit.log.grpc.reporter.max_message_size=${SW_GRPC_LOG_MAX_MESSAGE_SIZE:10485760}
#发送数据时将超时多长时间。单位是秒
plugin.toolkit.log.grpc.reporter.upstream_timeout=${SW_GRPC_LOG_GRPC_UPSTREAM_TIMEOUT:30}
重启后访问连接,在日志模块可以看到控制台输出的信息
日志详情:
根据TID搜索控制台日志
同步搜索UI 日志模块
查看日详情
4.源码部署 Apache SkyWalking
解压:
配置更改:config配置文件 application.yml 存储
H2(默认)/ ElasticSearch 6, 7/MySQL /TiDB /InfluxDB
启动:路径 /skywalking/apache-skywalking-apm-bin/bin
方式一:bin/startup.sh startup.sh里面是启动了 oap和ui的
方式二:分开启动
#端口 11800
bin/oapService.sh
#端口8080
bin/webappService.sh
完成启动~
查看日志 #oap日志 skywalking-oap-server.log
#ui界面日志 webapp.log
5.SkyWalking链路追踪-告警模块和WebHook通知《上》
需求:
监控业务相关接口性能,超过阈值则触发告警功能
通过调用webhook接口进行触发,具体的webhook接口地址可以自行定义路径
注意:要OAP Server的网络可以触发的webhook接口 一个是阿里云 一个是本机电脑,直接是通不了的 可以增加小米球 / Ngrok内网穿透
开发人员可以在webhook接口中编写告警方式,比如邮件、短信等,就是一个http接口
Apache Skywalking默认的告警规则配置
安装目录下的config文件夹下 alarm-settings.yml文件
默认内置多个规则
最近3分钟内服务的平均响应时间超过1秒
最近2分钟服务成功率低于80%
最近3分钟90%服务响应时间超过1秒
最近2分钟内服务实例的平均响应时间超过1秒配置含义:
metrics-name 脚本中的度量名称
threshold 阈值
op 比较操作符,可以设定>,<,=
period 多久检查一次当前的指标数据是否符合告警规则,单位分钟
count 达到多少次后,触发告警消息
silence-period 在多久时间之内,忽略相同的告警消息,在时间T触发了某告警,那么在(T+10)这个时间段,不会再次触发相同告警
message 告警消息内容
webhooks 配置告警产生时的触发的调用地址
6.SkyWalking链路追踪-告警模块和WebHook通知《下》
编码:
public class AlarmMessage {private int scopeId;private String scope;private String name;private String id0;private String id1;private String ruleName;private String alarmMessage;private long startTime;private transient int period;private transient boolean onlyAsCondition;//.........set get toString...........
}@RestController
public class CallbackController {Logger logger = LoggerFactory.getLogger(CallbackController.class);private List<AlarmMessage> messageList = new ArrayList<>();@PostMapping("webhook")public void webhook(@RequestBody List<AlarmMessage> alarmMessageList){logger.info("收到消息 该消息接收到后,可以推送邮箱或者短信:"+alarmMessageList);messageList.addAll(alarmMessageList);}@GetMapping("list_alarm_msg")public List<AlarmMessage> list(){return messageList;}}
配置webhook接口,POST方式推送
注意:要重启oap server!!!!!!!!
webhooks:
- http://127.0.0.1:8081/webhook/
更改config目录下的alarm-settings.yml
重启oap server 先停止8080和11800 然后再启动
业务代码更改:
修改睡眠时间为2秒,模拟接口响应慢
启动业务代码,访问连接,结果:
2-10分钟之内, 服务下的接口请求超过1秒响应 则进行告警推送,在skywalking的告警页面可见。
代码中接收到的错误信息,实际应用中可以获取到信息 然后推送钉钉 或者短信邮件等渠道
Springboot整合短信发送见下面这篇博文:
springboot2.x 接入阿里云市场短信发送_这是王姑娘的微博的博客-CSDN博客1.短信平台购买次数地址https://market.aliyun.com/products/57000002/cmapi00046920.html提供测试模板、免审核、测试成本更低2.测试学习使用的话,3块钱75多次够用了3.购买后在跳转成功页面记录AppSecret、key、code4.记录模板ID5.上代码环节@Configurationpublic class RestTemplateConfig { @Bean public .https://blog.csdn.net/wnn654321/article/details/121578434
Springboot整合邮箱发送见下面这篇博文:
springboot2.x整合邮箱发送_这是王姑娘的微博的博客-CSDN博客1.邮件传输协议◦SMTP协议:全称为 Simple Mail Transfer Protocol,简单邮件传输协议。它定义了邮件客户端软件和SMTP邮件服务器之间,以及两台SMTP邮件服务器之间的通信规则◦POP3协议:全称为 Post Office Protocol,邮局协议。它定义了邮件客户端软件和POP3邮件服务器的通信 规则◦IMAP协议:全称为 Internet Message Access Protocol,Internet消息访问协议,它是对POP3协议一种扩展,也是定义了邮件客户端https://blog.csdn.net/wnn654321/article/details/114228363
7.Jar包和微服务方式打包运行整合Skywalking
项目打包:
springboot项目和springcloud项目都一样,jar方式运行
通过java -jar 加入参数
项目打包:mvn install
启动:
nohup java -jar -javaagent:/root/apache-skywalking-apm-bin/agent/skywalking-agent.jar -Dskywalking.agent.service_name=WnnShop -Dskywalking.collector.backend_service=112.xxx.xxx.240:11800 wnn-sky-0.0.1-SNAPSHOT.jar &
分布式链路追踪SkyWalking进阶实战之RPC上报和WebHook通知(三)相关推荐
- 微服务治理之分布式链路追踪--3.zipkin实战
微服务治理之分布式链路追踪–3.zipkin实战 本节是基于zipkin分布式追踪系统搭建,因为对 scala 和 play framework 2 框架不熟悉,所以,没有采用opentelemetr ...
- PHP分布式链路追踪,SkyWalking:分布式架构链路追踪-SkyWalking介绍
前面几篇文章提到了微服务相关系统的使用与搭建,在微服务架构下的问题也比较突出.正常系统下我们的每个请求都会在同一个系统中进行输出.但是在微服务架构中一个请求可能设置一到多个服务进行处理.服务之间相互依 ...
- 分布式链路追踪-skywalking入门体验
背景 旁友,你的线上服务是不是偶尔来个超时,或者突然抖动一下,造成用户一堆反馈投诉.然后你费了九牛二虎之力,查了一圈圈代码和日志才总算定位到问题原因了.或者公司内部有链路追踪系统,虽然可以很轻松地通过 ...
- 分布式链路追踪-skywalking
一.分布式调用链 随着业务的高速发展,服务之间的调用关系愈加复杂 线上每一个请求会经过多个业务系统,并产生对各种缓存或者DB 的访问,业务流会经过很多个微服务的处理和传递. 问题: • -次请求的流量 ...
- 分布式链路追踪Skywalking过滤Url
问题 当系统集成了SpringbootAdmin等,健康监测的Url会不停的传到Skywalking的收集器,展示到控制台页面.我们需要进行过滤. 解决 好在这个问题Skywalking已经为我们提供 ...
- 分布式链路追踪之SkyWalking
一 链路追踪简介 在微服务架构中,一次请求往往涉及到多个模块,多个中间件,多台机器的相互协作才能完成.这一系列调用请求中,有些是串行的,有些是并行的,那么如何确定这个请求背后调用了哪些应用,哪些模 ...
- NET Core微服务之路:SkyWalking+SkyApm-dotnet分布式链路追踪系统的分享
对于普通系统或者服务来说,一般通过打日志来进行埋点,然后再通过elk或splunk进行定位及分析问题,更有甚者直接远程服务器,直接操作查看日志,那么,随着业务越来越复杂,企业应用也进入了分布式服务化的 ...
- 分布式链路追踪之Spring Cloud Sleuth夺命连环9问?
点击上方☝码猿技术专栏 轻松关注,设为星标! 及时获取有趣有料的技术 大家好,我是不才陈某~ 这是<Spring Cloud 进阶>第九篇文章,往期文章如下: 五十五张图告诉你微服务的灵魂 ...
- 原来10张图就可以搞懂分布式链路追踪系统原理
分布式系统为什么需要链路追踪? 随着互联网业务快速扩展,软件架构也日益变得复杂,为了适应海量用户高并发请求,系统中越来越多的组件开始走向分布式化,如单体架构拆分为微服务.服务内缓存变为分布式缓存.服务 ...
最新文章
- mysql 查看blob字段大小_MYSQL BLOB 字段大小以及个数的限制测试。
- 欢迎给图灵教育微信平台投食
- 企业网络推广专员浅析企业网络推广日常维护要做好
- 10个免费开源的项目管理工具
- PHP随机配菜_PHP+JS三级菜单联动菜单实现方法
- SAP 电商云 Spartacus UI Component 级别的延迟加载实现(Lazy Load)
- 产品经理如何进行需求管理?
- linux ntfs 新建,Linux在NTFS中创建的文件的权限
- 接口进阶 java 1614956772
- python 3d游戏记录路径_基于osg的python三维程序开发(五)------沿路径运动
- 莫桑比克wcdma频段_开放医疗记录社区支持莫桑比克的新系统
- 遍历进程链表,打印pcb相关字段的内核模块
- 学会java要多久_多长时间可以学会Java?
- storm的优化以及雪崩问题
- 给VS2008安装MSDN
- Halcon 错误 提示 2021 System clock has been set back 解决方法
- 量子计算机人类意识云,我们的大脑很可能就是一台高度发达的量子计算机
- 【CVPR2020 论文翻译】 | Explaining Knowledge Distillation by Quantifying the Knowledge
- CDS 获取系统日期时间
- LeetCode 剑指 Offer II 前缀树(上) 专题总结
热门文章
- 1997-2022年市场化指数/市场化指数分享/含计算原始代码
- 国内市场主流音视频产品主要功能分析
- # 2017-2018-1 20155312《信息安全技术》实验二——Windows口令破解实验报告
- 2015年职称计算机考试大纲,2015年河北省职称计算机考试大纲.doc
- easyui filebox 上传图片预览
- 企业应规避OA系统选型的四大误区
- 品类甚至远比品牌更能影响一个企业
- 长视频+正版+精准化广告 从奇艺网看三网合一
- md5 php 漏洞,PHP实现MD5密码加盐处理
- 01.大数据介绍以及环境配置