网站建设方案doc,网站建设犭金手指a排名12,网站设计创意,烟台网站title优化Spring Cloud Alibaba 集成 Skywalking 链路追踪
简介
skywalking 是一个国产开源框架#xff0c;2015 年由吴晟开源 #xff0c; 2017 年加入 Apache 孵化器。skywalking 是分布式系统的应用程序性能监视工具#xff0c;专为微服务、云原生架构和基于容器#xff08;Doc…Spring Cloud Alibaba 集成 Skywalking 链路追踪
简介
skywalking 是一个国产开源框架2015 年由吴晟开源 2017 年加入 Apache 孵化器。skywalking 是分布式系统的应用程序性能监视工具专为微服务、云原生架构和基于容器Docker、K8s、Mesos架构而设计。SkyWalking 是观察性分析平台和应用性能管理系统提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。
官网http://skywalking.apache.org/
OpenTracing 的组织旨在推进调用链监控的一些规范和标准工作。
SkyWalking 是一个开源监控平台用于从服务和云原生基础设施收集、分析、聚合和可视化数据。SkyWalking 提供了一种简单的方法来维护分布式系统的清晰视图甚至可以跨云查看。它是一种现代APM专门为云原生、基于容器的分布式系统设计。SkyWalking 从三个维度对应用进行监视service服务, service instance实例, endpoint端点。服务和实例就不多说了端点是服务中的某个路径或者说URI。SkyWalking 允许用户了解服务和端点之间的拓扑关系查看每个服务/服务实例/端点的度量并设置警报规则。
选型
Zipkin 是 Twitter 开源的调用链分析工具目前基于 springcloud sleuth 得到了广泛的使用特点是轻量使用部署简单。Pinpoint 是韩国人开源的基于字节码注入的调用链分析以及应用监控分析工具。特点是支持多种插件UI 功能强大接入端无代码侵入。SkyWalking 是本土开源的基于字节码注入的调用链分析以及应用监控分析工具。特点是支持多种插件UI 功能较强接入端无代码侵入。目前已加入 Apache 孵化器。CAT 是大众点评开源的基于编码和配置的调用链分析应用监控分析日志采集监控报警等一系列的监控平台工具。
链路追踪框架对比
项目CatZipkinSkywalking调用可视化有有有聚合报表非常丰富少较丰富服务依赖图简单简单好埋点方式侵入式侵入式非侵入字节码加强VM监控指标好无有支持语言java/.net丰富java/.net/nodejs/php/go存储机制mysql/本地文件/HDFS内存/ES/mysqlh2/mysql/es/tidb社区支持国内国外Apache支持使用案例美团、携程、陆金所京东、阿里华为、小米、当当、微众银行APM是否是开发基础eBay calGoogle DapperGoogle Dapper是否支持webflux否是是github stars12.3K12.2K18K
主要功能
多种监控手段。可以通过语言探针和 service mesh 获得监控是数据。多个语言自动探针。包括 Java.NET Core 和 Node.JS。轻量高效。无需大数据平台和大量的服务器资源。模块化。UI、存储、集群管理都有多种机制可选。支持告警。优秀的可视化解决方案。
组成
SkyWalking主要的几个组成模块: Agent探针 主要负责从系统中采集各种指标链路数据发送给 oap 服务。oap 服务接收 Agent 发送过来的数据存储执行分析提供查询和报警功能。Storage 和 UI 负责存储数据以及查看数据。
构建后包括Skywalking后端和Web UI的目录
├── bin
├── config
├── config-examples
├── LICENSE
├── licenses
├── logs
├── NOTICE
├── oap-libs
├── README.txt
├── tools
└── webappSkyWalking 整体架构如何 整个架构分成上、下、左、右四部分 考虑到让描述更简单我们舍弃掉 Metric 指标相关而着重在 Tracing 链路相关功能。 上部分 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 负责提供控台查看链路等等。
部署前提
目前阿里等云厂商也有各种Sass服务
官网新版的都是源码需要自己去构建
JDK 8MySQL/Elasticsearchmysql 启动需要下载对应的jar包到/oap-libs服务器内存 2G
服务端部署
服务 包括以下部分
OAP serverOAP ui
修改配置项
创建库 swtest
DROP DATABASE IF EXISTS swtest;
CREATEDATABASE swtest DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;修改application.yaml
storage:selector: ${SW_STORAGE:mysql}mysql:properties:jdbcUrl: ${SW_JDBC_URL:jdbc:mysql://xxx:3306/swtest?rewriteBatchedStatementstrue}dataSource.user: ${SW_DATA_SOURCE_USER:root}dataSource.password: ${SW_DATA_SOURCE_PASSWORD:xxx}三种运行方式
单服务直接启动docker 部署docker-compose 部署
单服务启动
skywalking国内下载
https://mirrors.cloud.tencent.com/apache/skywalking
https://archive.apache.org/dist/skywalking/
./startup.shwget http://maven.aliyun.com/nexus/content/groups/public/mysql/mysql-connector-java/5.1.48/mysql-connector-java-5.1.48.jarwget http://maven.aliyun.com/nexus/content/groups/public/mysql/mysql-connector-java/8.0.28/mysql-connector-java-8.0.28.jardocker 启动
**镜像地址**https://hub.docker.com/r/apache/skywalking-java-agent
oap mysql 需要自己设置镜像
docker run --name oap -d --restart always \
-p 11800:11800 \
-p 12800:12800 \
-e SW_STORAGEmysql \
-e SW_JDBC_URLjdbc:mysql://xxx:3306/swtest?useUnicodetruecharacterEncodingutf8zeroDateTimeBehaviorconvertToNulluseSSLtrue \
-e SW_DATA_SOURCE_USERroot \
-e SW_DATA_SOURCE_PASSWORDxpccyc_2022 \
apache/skywalking-oap-server:8.9.1oap elasticsearch
docker run --name oap -d --restart always \
-e TZAsia/Shanghai \
-p 12800:12800 \
-p 11800:11800 \
--link elasticsearch:elasticsearch \
-e SW_STORAGEelasticsearch \
-e SW_STORAGE_ES_CLUSTER_NODESelasticsearch:9200 \
apache/skywalking-oap-server:6.6.0-es7UI 启动
docker run -d --name oap-ui \
--restartalways \
-e TZAsia/Shanghai \
-p 8868:8080 \
--link oap:oap \
-e SW_OAP_ADDRESShttp://xxx:12800 \
apache/skywalking-uidocker-compose 部署
elasticsearch 作为 skywalking 的存储保存链路和日志数据等oap 数据接收和分析 Observability Analysis Platformui web端的数据展示
# 创建配置文件保存的目录
mkdir -p /data/docker/admin/skywalking
# 切换到刚创建的目录
cd /data/docker/admin/skywalking
# 将下面的 docker-compose.yml 文件保存到这个目录
vi docker-compose.yml
# 拉去镜像并启动
docker-compose up -d
# 查看日志
docker-compose logs -fdocker-compose.yml
version: 3.8
services:elasticsearch:image: docker.elastic.co/elasticsearch/elasticsearch:7.14.1container_name: elasticsearchrestart: alwaysports:- 9200:9200healthcheck:test: [CMD-SHELL, curl --silent --fail localhost:9200/_cluster/health || exit 1]interval: 30stimeout: 10sretries: 3start_period: 40senvironment:- discovery.typesingle-node- bootstrap.memory_locktrue- ES_JAVA_OPTS-Xms512m -Xmx512m- TZAsia/Shanghaiulimits:memlock:soft: -1hard: -1oap:image: apache/skywalking-oap-server:8.7.0-es7container_name: oapdepends_on:- elasticsearchlinks:- elasticsearchrestart: alwaysports:- 11800:11800- 12800:12800healthcheck:test: [CMD-SHELL, /skywalking/bin/swctl]interval: 30stimeout: 10sretries: 3start_period: 40senvironment:TZ: Asia/ShanghaiSW_STORAGE: elasticsearch7SW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200ui:image: apache/skywalking-ui:8.7.0container_name: uidepends_on:- oaplinks:- oaprestart: alwaysports:- 8088:8080environment:TZ: Asia/ShanghaiSW_OAP_ADDRESS: http://oap:12800
访问
http://IP:8080
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TcTYQ9d2-1689842932926)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220915191747007.png)]
微服务集成
通过设置启动脚本添加请求启动参数字节码注入的方式
agent发行包包含在Apache官方发行版中。最新的agent包结构如下。
-- agent-- activationsapm-toolkit-log4j-1.x-activation.jarapm-toolkit-log4j-2.x-activation.jarapm-toolkit-logback-1.x-activation.jar...-- configagent.config -- pluginsapm-dubbo-plugin.jarapm-feign-default-http-9.x.jarapm-httpClient-4.x-plugin.jar.....-- optional-pluginsapm-gson-2.x-plugin.jar.....-- bootstrap-pluginsjdk-http-plugin.jar.....-- logsskywalking-agent.jar下载
skywalking的java agent迁移到了新仓库
https://github.com/apache/skywalking-java
下载后使用idea打开
新版需要下载源码自己打包获取skywalking-agent.jar
有一些proto的文件需要生成使用如下命令行编译生成
mvn clean package -DskipTests老版https://archive.apache.org/dist/skywalking/8.2.0/apache-skywalking-apm-8.2.0.tar.gz
启动脚本 nohup java -javaagent:/data/init/skywalking-agent.jar \-Dskywalking.agent.service_name${ENV}::$SERVER_NAME \-Dskywalking.collector.backend_service10.32.120.156:11800 \-jar -Xms256m -Xmx512m -Dspring.profiles.active${ENV} $JAR_NAME /data/project/$SERVER_NAME/info.log 21 老版本注意此处存在 bug跟踪链路不显示 gateway
拷贝 skywalking-agent/optional-plugins 目录下的 gateway 插件到 agent/plugins 目录
自定义链路追踪
如果我们希望对项目中的业务方法实现链路追踪方便排查问题可以导入如下依赖版本号尽量和skywalking保持一致
它可以将任意业务方法加入到skywalkingUI界面中的链路追踪可以看到自定义的链路节点耗费时间并包括参数返回值等常规信息
dependencygroupIdorg.apache.skywalking/groupIdartifactIdapm-toolkit-trace/artifactIdversion${skywalking.version}/version
/dependency代码中使用traceId
RequestMapping(/list)
public ListUser list(){//TraceContext可以绑定key-valueTraceContext.putCorrelation(name, fox);OptionalString op TraceContext.getCorrelation(name);log.info(name {} , op.get());//获取跟踪的traceIdString traceId TraceContext.traceId();log.info(traceId {} , traceId);return userService.list();
}Trace 将方法加入追踪链路
如果一个业务方法想在 ui 界面的跟踪链路上显示出来只需要在业务方法上加上 Trace 注解即可
我们还可以为追踪链路增加其他额外的信息比如记录参数和返回信息。实现方式在方法上增加 Tag 或者 Tags。
Trace
Tag(key list, value returnedObj)
public ListUser list(){ return userMapper.list();
}Trace
Tags({Tag(key param, value arg[0]),
Tag(key user, value returnedObj)})
public User getById(Integer id){ return userMapper.getById(id);
}日志
我们需要在日志中记录下来每次请求的唯一标识(trace-id)这样就可以在SkyWalking定位到有问题的trace-id然后通过这个trace-id我们就可以通过日志系统去定位到相关的日志从而发现并解决问题。
引入apm-toolkit-logback-1.x依赖
dependencygroupIdorg.apache.skywalking/groupIdartifactIdapm-toolkit-logback-1.x/artifactIdversion${skywalking.version}/version
/dependency日志配置
?xml version1.0 encodingUTF-8?
configuration scantrue scanPeriod60 seconds debugfalse!-- 日志存放路径 --property namelog.path valuelogs/!-- 日志输出格式 --property namelog.patternvalue%d{HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{20} - [%method,%line] - %msg%n/!-- 控制台输出 --appender nameconsole classch.qos.logback.core.ConsoleAppenderencoderpattern${log.pattern}/pattern/encoder/appender!-- 系统日志输出 --appender namefile_info classch.qos.logback.core.rolling.RollingFileAppenderfile${log.path}/info.log/file!-- 循环政策基于时间创建日志文件 --rollingPolicy classch.qos.logback.core.rolling.TimeBasedRollingPolicy!-- 日志文件名格式 --fileNamePattern${log.path}/info.%d{yyyy-MM-dd}.log/fileNamePattern!-- 日志最大的历史 10天 --maxHistory10/maxHistory/rollingPolicyencoder classch.qos.logback.core.encoder.LayoutWrappingEncoderlayout classorg.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayoutpattern${log.pattern}/pattern/layout/encoderfilter classch.qos.logback.classic.filter.LevelFilter!-- 过滤的级别 --levelINFO/level!-- 匹配时的操作接收记录 --onMatchACCEPT/onMatch!-- 不匹配时的操作拒绝不记录 --onMismatchDENY/onMismatch/filter/appenderappender namefile_error classch.qos.logback.core.rolling.RollingFileAppenderfile${log.path}/error.log/file!-- 循环政策基于时间创建日志文件 --rollingPolicy classch.qos.logback.core.rolling.TimeBasedRollingPolicy!-- 日志文件名格式 --fileNamePattern${log.path}/error.%d{yyyy-MM-dd}.log/fileNamePattern!-- 日志最大的历史30天 --maxHistory30/maxHistory/rollingPolicyencoderpattern${log.pattern}/pattern/encoderfilter classch.qos.logback.classic.filter.LevelFilter!-- 过滤的级别 --levelERROR/level!-- 匹配时的操作接收记录 --onMatchACCEPT/onMatch!-- 不匹配时的操作拒绝不记录 --onMismatchDENY/onMismatch/filter/appender!-- 系统模块日志级别控制 --logger namecom.idea levelinfo/!-- Spring日志级别控制 --logger nameorg.springframework levelwarn/!--系统操作日志--root levelinfoappender-ref refconsole/appender-ref reffile_info/appender-ref reffile_error//root/configuration打开 agent/config/agent.config 配置文件添加如下配置信息
plugin.toolkit.log.grpc.reporter.server_host${SW_GRPC_LOG_SERVER_HOST:192.168.3.100}
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}复制代码
以上配置是默认配置信息,agent 与 oap 在本地的可以不配
告警
Apache SkyWalking告警是由一组规则驱动这些规则定义在config/alarm-settings.yml文件中。
告警规则的定义分为三部分。
告警规则定义了触发告警所考虑的条件。webhook当告警触发时被调用的服务端点列表。gRPCHook当告警触发时被调用的远程gRPC方法的主机和端口。Slack Chat Hook当告警触发时被调用的Slack Chat接口。微信 Hook当告警触发时被调用的微信接口。钉钉 Hook当告警触发时被调用的钉钉接口。
告警规则
告警规则有两种类型单独规则Individual Rules和复合规则Composite Rules复合规则是单独规则的组合。
单独规则Individual Rules
单独规则主要有以下几点
规则名称在告警信息中显示的唯一名称必须以_rule结尾。metrics-name度量名称也是OAL脚本中的度量名。默认配置中可以用于告警的度量有服务实例端点服务关系实例关系端点关系。它只支持long,double和int类型。include-names包含在此规则之内的实体名称列表。exclude-names排除在此规则以外的实体名称列表。include-names-regex提供一个正则表达式来包含实体名称。如果同时设置包含名称列表和包含名称的正则表达式则两个规则都将生效。exclude-names-regex提供一个正则表达式来排除实体名称。如果同时设置排除名称列表和排除名称的正则表达式则两个规则都将生效。include-labels包含在此规则之内的标签。exclude-labels排除在此规则以外的标签。include-labels-regex提供一个正则表达式来包含标签。如果同时设置包含标签列表和包含标签的正则表达式则两个规则都将生效。exclude-labels-regex提供一个正则表达式来排除标签。如果同时设置排除标签列表和排除标签的正则表达式则两个规则都将生效。
标签的设置必须把数据存储在meter-system中例如Prometheus, Micrometer。以上四个标签设置必须实现LabeledValueHolder接口。
threshold阈值。
对于多个值指标例如percentile阈值是一个数组。像value1 value2 value3 value4 value5这样描述。 每个值可以作为度量中每个值的阈值。如果不想通过此值或某些值触发警报则将值设置为 -。 例如在percentile中value1是P50的阈值value2是P75的阈值那么--value3, value4, value5的意思是没有阈值的P50和P75的percentile告警规则。
op操作符支持, , , , 。period多久告警规则需要被检查一下。这是一个时间窗口与后端部署环境时间相匹配。count在一个周期窗口中如果按op计算超过阈值的次数达到count则发送告警。only-as-conditiontrue或者false指定规则是否可以发送告警或者仅作为复合规则的条件。silence-period在时间N中触发报警后在N - N silence-period这段时间内不告警。 默认情况下它和period一样这意味着相同的告警同一个度量名称拥有相同的Id在同一个周期内只会触发一次。message该规则触发时发送的通知消息。
举个例子
rules:service_resp_time_rule:metrics-name: service_resp_timeop: threshold: 1000period: 10count: 2silence-period: 10message: 服务【{name}】的平均响应时间在最近10分钟内有2分钟超过1秒service_instance_resp_time_rule:metrics-name: service_instance_resp_timeop: threshold: 1000period: 10count: 2silence-period: 10message: 实例【{name}】的平均响应时间在最近10分钟内有2分钟超过1秒endpoint_resp_time_rule:metrics-name: endpoint_avgthreshold: 1000op: period: 10count: 2message: 端点【{name}】的平均响应时间在最近10分钟内有2分钟超过1秒复合规则Composite Rules
复合规则仅适用于针对相同实体级别的告警规则例如都是服务级别的告警规则service_percent_rule service_resp_time_percentile_rule。 不可以编写不同实体级别的告警规则例如服务级别的一个告警规则和端点级别的一个规则service_percent_rule endpoint_percent_rule。
复合规则主要有以下几点
规则名称在告警信息中显示的唯一名称必须以_rule结尾。expression指定如何组成规则支持, ||, ()操作符。message该规则触发时发送的通知消息。
举个例子
rules:service_resp_time_rule:metrics-name: service_resp_timeop: threshold: 1000period: 10count: 2silence-period: 10message: 服务【{name}】的平均响应时间在最近10分钟内有2分钟超过1秒service_sla_rule:metrics-name: service_slaop: threshold: 8000period: 10count: 2silence-period: 10message: 服务【{name}】的成功率在最近10分钟内有2分钟低于80
composite-rules:comp_rule:expression: service_resp_time_rule service_sla_rulemessage: 服务【{name}】在最近10分钟内有2分钟超过1秒平均响应时间超过1秒并且成功率低于80Webhook
Webhook 要求一个点对点的 Web 容器。告警的消息会通过 HTTP 请求进行发送请求方法为 POSTContent-Type 为 application/jsonJSON 格式包含以下信息
scopeId目标 Scope 的 ID。name目标 Scope 的实体名称。id0Scope 实体的 ID。id1未使用。ruleName您在 alarm-settings.yml 中配置的规则名。alarmMessage. 告警消息内容。startTime. 告警时间戳当前时间与 UTC 1970/1/1 相差的毫秒数。
举个例子
[{scopeId: 1, scope: SERVICE,name: one-more-service, id0: b3JkZXItY2VudGVyLXNlYXJjaC1hcGk.1, id1: , ruleName: service_resp_time_rule,alarmMessage: 服务【one-more-service】的平均响应时间在最近10分钟内有2分钟超过1秒,startTime: 1617670815000
}, {scopeId: 2,scope: SERVICE_INSTANCE,name: e4b31262acaa47ef92a22b6a2b8a7cb1192.168.30.11 of one-more-service,id0: dWF0LWxib2Mtc2VydmljZQ.1_ZTRiMzEyNjJhY2FhNDdlZjkyYTIyYjZhMmI4YTdjYjFAMTcyLjI0LjMwLjEzOA,id1: ,ruleName: instance_jvm_young_gc_count_rule,alarmMessage: 实例【e4b31262acaa47ef92a22b6a2b8a7cb1192.168.30.11 of one-more-service】的YoungGC次数在最近10分钟内有2分钟超过10次,startTime: 1617670815000
}, {scopeId: 3,scope: ENDPOINT,name: /one/more/endpoint in one-more-service,id0: b25lcGllY2UtYXBp.1_L3RlYWNoZXIvc3R1ZGVudC92aXBsZXNzb25z,id1: ,ruleName: endpoint_resp_time_rule,alarmMessage: 端点【/one/more/endpoint in one-more-service】的平均响应时间在最近10分钟内有2分钟超过1秒,startTime: 1617670815000
}]gRPCHook
告警消息将使用 Protobuf 类型通过gRPC远程方法发送。消息格式的关键信息定义如下
syntax proto3;option java_multiple_files true;
option java_package org.apache.skywalking.oap.server.core.alarm.grpc;service AlarmService {rpc doAlarm (stream AlarmMessage) returns (Response) {}
}message AlarmMessage {int64 scopeId 1;string scope 2;string name 3;string id0 4;string id1 5;string ruleName 6;string alarmMessage 7;int64 startTime 8;
}message Response {
}Slack Chat Hook
您需要遵循传入Webhooks入门指南并创建新的Webhooks。
如果您按以下方式配置了Slack Incoming Webhooks则告警消息将按 Content-Type 为 application/json 通过HTTP的 POST 方式发送。
举个例子
slackHooks:textTemplate: |-{type: section,text: {type: mrkdwn,text: :alarm_clock: *Apache Skywalking Alarm* \n **%s**.}}webhooks:- https://hooks.slack.com/services/x/y/z微信Hook
只有微信的企业版才支持 Webhooks 如何使用微信的 Webhooks 可参见如何配置群机器人。
如果您按以下方式配置了微信的 Webhooks 则告警消息将按 Content-Type 为 application/json 通过HTTP的 POST 方式发送。
举个例子
wechatHooks:textTemplate: |-{msgtype: text,text: {content: Apache SkyWalking 告警: \n %s.}}webhooks:- https://qyapi.weixin.qq.com/cgi-bin/webhook/send?keydummy_key钉钉 Hook
您需要遵循自定义机器人开放并创建新的Webhooks。为了安全起见您可以为Webhook网址配置可选的密钥。
如果您按以下方式配置了钉钉的 Webhooks 则告警消息将按 Content-Type 为 application/json 通过HTTP的 POST 方式发送。
举个例子
dingtalkHooks:textTemplate: |-{msgtype: text,text: {content: Apache SkyWalking 告警: \n %s.}}webhooks:- url: https://oapi.dingtalk.com/robot/send?access_tokendummy_tokensecret: dummysecret问题 MySQL Failed to get driver instance for jdbcUrl
Activate MySQL as storage, and set storage provider to mysql.
NOTE: MySQL driver is NOT allowed in Apache official distribution and source codes. Please download the MySQL driver on your own. Copy the connection driver jar to oap-libs.
wget http://maven.aliyun.com/nexus/content/groups/public/maven2/mysql/mysql-connector-java/5.1.48/mysql-connector-java-5.1.48.jarwget http://maven.aliyun.com/nexus/content/groups/public/mysql/mysql-connector-java/8.0.28/mysql-connector-java-8.0.28.jar总结
Skywalking部署简单新版UI更加好用。skywalking在链路追踪、告警和性能指标统计等方面能帮助开发和运维快速定位问题在半年多的使用中发现过慢SQL语句、程序bug和报错等等。skywalking推送的告警更使各个项目的负责人对自己负责业务的性能指标做到心中有数有问题及时优化。
参考
https://xie.infoq.cn/article/9ed9c65315251d0b39614d4d0
https://skywalking.apache.org/zh/2020-04-19-skywalking-quick-start/#