目录
- 一、简介
- 1.1、APM系统
- 1.2、SkyWalking 简介
- 二、快速入门
- 2.1、下载、启动
- 2.2、界面认识
- 三、持久化存储
- 四、告警通知
- 五、自定义追踪-细粒度追踪service方法
一、简介
1.1、APM系统
APM(Application Performance Monitoring)系统是一种用于监控和管理应用程序性能的工具。它可以帮助开发人员和运维团队实时监控应用程序的性能指标、识别潜在的性能问题,并提供性能优化建议。
APM系统可以帮助用户及时发现和解决应用程序的性能问题,提升用户体验和系统稳定性。它可以应用于各种类型的应用程序,包括Web应用、移动应用、微服务架构等。
1.2、SkyWalking 简介
SkyWalking是一个开源的应用性能监控(APM)系统,用于监控和管理分布式系统的性能。它提供了实时的性能指标、事务追踪、服务依赖分析等功能,帮助开发人员和运维团队快速定位和解决性能问题。
SkyWalking的核心功能包括:
-
分布式追踪:SkyWalking可以追踪分布式系统中的请求流程,记录每个请求经过的服务和组件,以及请求在每个组件中的耗时情况。通过分析追踪数据,可以了解系统中各个组件之间的调用关系和性能瓶颈,帮助开发人员快速定位和解决问题。
-
实时监控:SkyWalking提供实时的性能监控指标,包括各个服务的请求量、响应时间、错误率等。通过监控数据,可以及时发现系统的性能问题,并进行调优和优化。
-
服务依赖分析:SkyWalking可以分析系统中各个服务之间的依赖关系,包括调用关系和数据流向。通过可视化的方式展示服务之间的依赖关系,可以帮助开发人员理解系统的架构和流程,从而更好地进行系统设计和优化。
-
告警和报警:SkyWalking可以设置各种告警规则,当系统出现异常或性能下降时,可以及时发送告警通知。这样可以帮助运维人员快速响应和解决问题,保证系统的稳定性和可靠性。
-
数据可视化:SkyWalking提供丰富的数据可视化功能,可以将监控数据以图表的形式展示,帮助用户更直观地了解系统的性能和运行情况。同时,还可以根据需求自定义仪表盘,将关键指标集中展示,方便用户监控和管理系统。
二、快速入门
2.1、下载、启动
前提:要有java环境
下载链接: https://skywalking.apache.org/downloads/
我这边使用9.3版本的apm项目
还要再下载 agent,skywalking apm是服务端,agent才是真正监控应用的探针。
这里是监控java服务,所以下载的是java agent,如果是前端可以下载 javaScript
还需要再下载elasticsearch,用于存储记录
下载链接: https://www.elastic.co/cn/downloads/elasticsearch
1、启动apm系统:
window直接进入apm项目里面bin目录下的startup.bat文件,linux 则执行 sh startup.sh
修改启动端口:进入webapp目录下,修改yml文件
启动后访问 http://localhost:8080
2、启动agent:
在我们自己的项目上,注意是我们自己开发的项目,不是skywalking的,在启动参数上加上配置:
指定到agent的jar包的位置
-javaagent:D:\code\tool\skywalking-agent\skywalking-agent.jar
-Dskywalking.agent.service_name=skywalking-service
-Dskywalking.collector.backend_service=127.0.0.1:11800
-javaagent:指定skywalking中的agent中的skywalking-agent.jar的路径
-Dskywalking.agent.service_name:指定在skywalking中的服务名称,一般是微服务的spring.application.name
-Dskywalking.collector.backend_service:指定oap服务绑定的地址,由于陈某这里是本地,并且oap服务默认的端口是11800,因此只需要配置为127.0.0.1:11800
如我在idea上添加VM options配置
项目启动完毕,再次刷新http://localhost:8080/,apm项目,就可以看到服务注册进来了
微服务启动就是,每个服务也都写上那个配置即可,需要更换名称。
如果报下面错误,则可以将classpath更换成JAR manifest
2.2、界面认识
点击服务名称,可进入更详细的监控界面
-
概览(Overview):提供整体系统的概览信息,包括各个服务的调用量、成功率、延迟等指标的总览。
-
实例(Instance):查询和监控系统中的实例,可以查看每个实例的性能指标、调用情况等信息。
-
端点(Endpoint):查询和监控系统中的端点(API、方法等),可以查看每个端点的调用量、成功率、延迟等指标。
-
拓扑(Topology):展示系统中各个服务之间的调用关系和依赖关系,可以帮助理解系统的架构和调用流程。
-
链路追踪(Trace):查询和监控系统中的请求链路,可以查看每个请求的详细信息,包括调用链路、耗时、异常等。
-
链路追踪分析(Trace Profiling):对链路追踪数据进行分析和优化,可以查看每个请求的性能瓶颈、调用路径等信息。
-
eBPF Profiling:使用eBPF技术对系统进行性能分析和优化,可以查看系统的运行状态、资源使用情况等。
-
日志(Log):查询和监控系统的日志信息,可以查看系统的日志记录、异常信息等。
Topology 鼠标放上去即可看到每个链路的耗时。
Trace 可以追踪每个节点的信息和耗时
还有很多界面,大家自己点点,可以监控很多有用的信息
微服务使用,路由追踪,需要找到自己项目的gateway版本,在optional-plugins的两个jar包复制到plugins里面,在路由追踪才会显示网关
三、持久化存储
SkyWalking在默认配置下使用了内存存储(Memory Storage),这意味着数据存储在内存中,并且在重启SkyWalking服务后会丢失。这种配置适用于开发和测试环境,但不适合生产环境。
如果您希望在重启后保留数据,您可以配置SkyWalking使用持久化存储(Persistent Storage),例如使用Elasticsearch、MySQL等数据库作为存储后端。通过将数据存储在持久化存储中,即使在重启SkyWalking服务后,数据也能够得到保留。
我这边存储在Elasticsearch7.10.2,不演示es的下载启动,es启动会有两个默认端口,
验证es启动成功
更改skywalking-apm项目config下的application.yml,更换使用存储连接方式,如果使用mysql,需要将mysql数据库驱动包拷贝到 oap-libs 目录下才可以
重启下服务即可
四、告警通知
可以通过修改config文件夹下的alarm-settings.yml文件来配置告警通知。
配置规则:
- metrics-name:要监控的指标名称,可以是系统预定义的指标名称,也可以是自定义的指标名称。
- op:触发告警的条件操作符,可以是>(大于)、>=(大于等于)、<(小于)、<=(小于等于)等。
- threshold:触发告警的阈值,当指标的值满足条件时,触发告警。
- period:触发告警的时间窗口大小,单位为分钟。在这个时间窗口内,指标的值会被收集和计算。
- count:触发告警的次数阈值,当指标的值在时间窗口内连续超过这个次数时,触发告警。
- silence-period:告警的静默期,单位为分钟。在这个静默期内,如果指标的值再次触发告警,不会重复发送告警通知。
- message:告警通知的消息内容,可以自定义告警通知的文本信息。
自带配置翻译:
# 示例告警规则
rules:
# 服务响应时间告警规则
service_resp_time_rule:
metrics-name: service_resp_time
op: ">"
threshold: 1000
period: 10
count: 3
silence-period: 5
message: 服务 {name} 的响应时间在过去的10分钟内超过1000毫秒的次数达到3次。
# 服务SLA告警规则
service_sla_rule:
metrics-name: service_sla
op: "<"
threshold: 8000
period: 10
count: 2
silence-period: 3
message: 服务 {name} 的成功率在过去的10分钟内低于80%的次数达到2次。
# 服务响应时间百分位数告警规则
service_resp_time_percentile_rule:
metrics-name: service_percentile
op: ">"
threshold: 1000,1000,1000,1000,1000
period: 10
count: 3
silence-period: 5
message: 服务 {name} 的百分位数响应时间在过去的10分钟内超过1000毫秒的次数达到3次,其中包括p50 > 1000, p75 > 1000, p90 > 1000, p95 > 1000, p99 > 1000。
# 服务实例响应时间告警规则
service_instance_resp_time_rule:
metrics-name: service_instance_resp_time
op: ">"
threshold: 1000
period: 10
count: 2
silence-period: 5
message: 服务实例 {name} 的响应时间在过去的10分钟内超过1000毫秒的次数达到2次。
# 数据库访问响应时间告警规则
database_access_resp_time_rule:
metrics-name: database_access_resp_time
threshold: 1000
op: ">"
period: 10
count: 2
message: 数据库访问 {name} 的响应时间在过去的10分钟内超过1000毫秒的次数达到2次。
# 端点关系响应时间告警规则
endpoint_relation_resp_time_rule:
metrics-name: endpoint_relation_resp_time
threshold: 1000
op: ">"
period: 10
count: 2
message: 端点关系 {name} 的响应时间在过去的10分钟内超过1000毫秒的次数达到2次。
webhooks:
# 配置Webhooks的URL,告警的时候,可以调用下面的接口去告警
- http://127.0.0.1/notify/
- http://127.0.0.1/go-wechat/
自定义告警接口:
将下面的接口写在 webhooks下即可。
五、自定义追踪-细粒度追踪service方法
1、引入依赖:
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-trace</artifactId>
<version>${skywalking.version}</version>
</dependency>
${skywalking.version} 和你当前使用的SkyWalking版本保持一致
2、注解配置
先在项目中引入依赖,然后再对应的方法上新增上注解。这里我们通过@Tag获取了name,address,token以及traceId参数。
@Trace
@Tags({@Tag(key = "name",value = "arg[0]"),
@Tag(key = "token",value = "returnedObj.token"),
@Tag(key = "address",value = "arg[1]"),
@Tag(key = "traceId",value = "returnedObj.traceId")})
public User doSkyWalkingPluginsV2(String name, String address, int id){
CachaUser cachaUser = new CachaUser();
cachaUser.setName(name);
cachaUser.setAddress(address);
cachaUser.setId(id);
String token = TokenUtils.getToken(cachaUser);
User user = new User();
user.setAge("18");
user.setName(name);
user.setToken(token);
user.setTraceId(TraceContext.traceId());
return user;
}
配置完成后,启动服务。通过postman远程调用服务,在skywalking服务页面可以看到,我们trace的doSkyWalkingPluginsV2方法也被收集到了,方法耗时也能一目了然。
点击方法查看详情,name,address,token以及traceId参数也都全部被统计收集上来了。