日升时奋斗,日落时自省
目录
1、简述
2、Skywalking优越性
2.1、相同产品分析
2.2、Skywalking组成
2.3、Skywalking本质
3、Skywalking服务安装与启动
3.1、ES安装并启动
3.1.2、删除环境变量
3.1.3、预启动ES
3.1.4、关闭HTTPS认证
3.1.5、关闭登录授权
3.1.6、再次启动ES
3.1.7、验证ES
3.2、Skywalking安装并启动
3.2.1、下载并解压Skywalking
3.2.2、修改配置文件
3.2.3、启动Skywalking
3.2.4、访问验证
4、上传数据至Skywalking
4.1、下载Agent代理
4.2、项目添加Agent代理
4.3、链路追踪
5、告警功能
5.1、设置告警规则
5.2、应用程序告警
1、简述
SkyWalking 是一个开源的分布式追踪系统,用于监测、诊断和优化分布式系统的性能。它可以帮助开发者和运维人员深入了解分布式系统中各个组件之间的调用关系、性能瓶颈以及异常情况,从而提供系统级的性能优化和故障排查。
2、Skywalking优越性
监控分布式系统:在分布式系统中,各个组件之间的调用链错综复杂难以进行全面的监控和诊断。skyWalking 提供了完善的分布式追踪功能,可以帮助开发者全面了解分布式系统的调用关系、性能瓶颈和异常情况,提供系统级的监控和诊断能力,遥测数据报告和查询相应的应用程序接口。
异常排查:当系统发生异常或错误时,需要及时定位问题并进行排查skyWalking 可以捕获和记录系统中的异常情况,并在调用链中标记异常的来源和传播路径,帮助开发者快速定位问题和解决问题。
注:上面是总述了Skywalking的功能的优点:分布式跟踪、日志管理、警报和遥控检测等
2.1、相同产品分析
Pinpoint: 韩国团队开发,它的优点: UI 丰富。缺点: 探针收集的数据粒度非常细,但性能损耗较大
CAT: 大众点评开发,它的优点: 报表功能强大。缺点: 有业务侵入性、代码比较老旧。
Zipkin: Twitter 公司开发,它的优点: 轻松接入 Spring loud 官方推荐 APM (ApplicationPerformanceManagement,系统性能管理) 系统。缺点: 有一定侵入性,但比 CAT 框架强一些
Skywalking: 国人开发,Apache 孵化和运营,是分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。它的优点: 无侵入、性能优秀、社区活跃、支持广泛、中文文档比较齐全。
2.2、Skywalking组成
Skywalking是由以下三个主要的组件构成的:
探针(Agent):提供了系统的原始数据,通过拦截HTTP请求、RPC调用等方式来捕获和记录调用链路信息
OAP 服务: Observability Analysis Platform,可观性分析平台,数据存储多种后端平台(ES,MySQL等)。它的功能主要有两个:
- 收集数据、加工处理并持久化
- 给UI界面提供查询服务
UI界面:展示数据信息(包括应用程序的调用链路、性能指标、错误日志等信息,并进行定制化查询和可视化分析)
2.3、Skywalking本质
Skywalking 本质是一个 APM (Application Performance Management,系统性能管理)系统。
而 APM 通常是实现 OpenTracing 标准的系统,OpenTracing 是一个开放标准和规范,用于实现分布式应用程序中的追踪和调用链分析。它提供了一种统一的 API 和工具,使开发者能够在不同的应用程序中实现分布式追踪功能,并将各个组件之间的调用关系和性能指标汇总起来,用于分析和监控应用程序的性能。
OpenTracing 中主要包含了 Tracing 视图,Tracing 视图有两个明显的优点:
- 清晰的看出每个模块的执行时长
- 清晰的看到问题和发现问题
普通视图:
OpenTracing视图:
3、Skywalking服务安装与启动
Skywalking数据存储支持很多数据库,例如ES、MySQL、PostgreSql等的,但是这里主要应用于查询功能,所以采用了ElasticSearch(简称ES)搜索性能很高,作为数据存储最好不过了
(1)因此对于Skywalking的安装主分为以下几步:
(2)安装并启动ES安装运行SkyWalking
- 运行Skywalking后端服务
- 运行SkywalkingUI服务
3.1、ES安装并启动
依赖环境jdk17,因为这里使用ES8.9.0版本
ES官方下载地址:Download Elasticsearch | Elastic
找个版本下载就行,当前最新是8.11的版本,版本差并大
下载完成之后,解压下载包
基本目录如下(文件后面的文是描述当前文件的):
3.1.2、删除环境变量
删除环境变量中国配置的,Java类库中的dt.jar和tools.jar,如果未配置这两个变量,可以不用管了
就是之前可能配置一个变量叫做“CLASSPATH”的
高版本的Java lib 中未包含这两个jar包,如果不删除,那么ES会判断和使用这两个Jar包,然后启动就会出错
3.1.3、预启动ES
进入bin路径,windows系统双击elasticsearch.bat进行启动:
第一次是预启动ES是为了在配置文件中生成相关配置信息
等ES启动之后,关闭控制,关闭ES服务
3.1.4、关闭HTTPS认证
在配置文件config/elasticsearch.yml中将xpack.security. http.ssl中的enabled改为“false”,如下图所示:
修改如下配置:
3.1.5、关闭登录授权
还在config/elasticsearch.yml配置文件中
3.1.6、再次启动ES
bin文件中,windows系统双击elasticsearch.bat进行启动
3.1.7、验证ES
在网页中输入:Localhost:9200 (出现以下信息就算是ES配置启动成功)
3.2、Skywalking安装并启动
3.2.1、下载并解压Skywalking
官方下载地址:https://archive.apache.org/dist/skywalking/
我这里拿的是9.6.0版本,现在最新是9.7.0版本,友友们可以拿最新,看自己喜好
解压之后的目录:
3.2.2、修改配置文件
config/applicaiton.yml (因为马上演示的时候,内存不够用,所以我这里ES配置到了云服务器docker启动的)
3.2.3、启动Skywalking
windows环境下点击Skywalking安装目录的bin/startup.bat就可以启动skywalking服务了
注:有两个弹框
3.2.4、访问验证
在没有修改过端口的号情况,访问localhost:8080 就能看见控制台
注:我这里修改了端口号,所以访问的是8088端口(如果友友们访问了,logo出来了,但是内容没有出来,只是因为加载的慢,先等等看)
4、上传数据至Skywalking
4.1、下载Agent代理
官方下载地址:https://skywalking.apache.org/downloads/#Agents
直接搜Skywalking官网也行的,里面,自己亲自去找找就当看文档了(版本找一个下,尽量都是9版本的我这里就拿9.0.0版本演示,下tar文件类型)
解压文件后 (重点在这个路径和包,记住友友你放的路径不是我的)
4.2、项目添加Agent代理
微服务项目的话,每个涉及到业务的微服务都来一遍
添加内容:
-javaagent:F:\springcloudAlibaba\skywalking\skywalking-agent\skywalking-agent.jar
-Dskywalking.agent.service_name=seata-server-storage
-Dskywalking.collector.backend_service=127.0.0.1:11800
注:-javaagent:skywalking-agent.jar的路径+skywalking-agent.jar包
-Dskywalking.agent.service_name=微服务的服务名称(就是配置参数spring.application.name)
-Dskywalking.collector.backend_service=不用修改(日志收集地址的,固定端口11800)
4.3、链路追踪
5、告警功能
告警功能开启和实现,需要以下两步:
设置告警规则
编写告警提醒代码
5.1、设置告警规则
告警规则的设置需要在config/alarm-settings.yml下配置,总共配置两块内容
第一块rules下的规则:(告警规则比较多,这里就那一条说一下,剩下都是一样的)
住:这里的数字是可以修改,看自己情况而定
另外还需要开启告警URL地址,还是在这个文件中, 在最下面
注:这个网址就是我们会写一个类专门 用来接收 告警信息;(上面钩子的url是要跟你的项目的端口+访问路径能对上的才行)
@Slf4j
@RestController
public class AlarrmController {
/*
* 模拟长时间执行
* */@RequestMapping("/timeout")public void timeout() throws InterruptedException {Thread.sleep(1500);}/** 接收到警告信息* */@RequestMapping("/webhook")public void webHook(@RequestBody List<AlarmMessage> messages){log.error("-----------钉钉报警-------");log.error("警告信息"+messages);}}
@Data
class AlarmMessage implements Serializable{private String scopeId; //告警范围private String name; //告警项目名private String id0; //skywalking主键标识private String id1; //预留字段private String ruleName; //告警名称private String alarmMessage;//告警内容private long startTime; //告警开始时间
}
注:这里实体类的属性是固定的,不能改变Skywalking已经给我们写好了的
5.2、应用程序告警
相关应用的告警提示信息
skywalking/docs/en/setup/backend/backend-alarm.md at master · apache/skywalking · GitHub
就拿钉钉来解释
首先需要你创建一个群,这个群得是企业公共的
效果如下: