业务端skywalking接入方案

本文涉及的产品
可观测监控 Prometheus 版,每月50GB免费额度
简介: 业务端skywalking接入方案

整体架构设计:


总体架构分为三部分:

①SkyWalking-oap:链路数据汇总分析,数据可以落地到ElasticSearch、MySQL等②SkyWalking-ui:web可视化平台,用来展示落地的数据③SkyWalking-agent:探针,以javaagent的方式无感切入到项目中,收集和发送数据到oap端


SkyWalking 在逻辑上分为四个部分:Probes、Platform backend、Storage 和 UI。


SkyWalking ⽀持从多个来源和多种格式收集遥测(指标、跟踪和⽇志)数据,包括
1. Java、.NET Core、NodeJS、PHP 和 Python ⾃动仪器代理。
2. Go 和 C++ SDK。
3. LUA 代理,特别适⽤于 Nginx、OpenResty 和 Apache APISIX。
4. 浏览器代理。
5. 服务⽹格可观察性。控制平⾯和数据平⾯。
6. 度量系统,包括 Prometheus、OpenTelemetry、Spring Sleuth(Micrometer)、Zabbix。
7. ⽇志。
8. Zipkin v1/v2 跟踪。(⽆分析)

参数解释:

/usr/local/skywalking/apache-skywalking-apm-bin-es7/agent/skywalking-agent.jar

本地agent的jar包位置

-Dskywalking.agent.service_name=art-mall-1

注册到skywalking上的服务名称

-Dskywalking.collector.backend_service=localhost:11800

skywalking接收agent发送采集数据的服务及端口


日志接入:

Skywalking集成⽇志框架,可以直接在skywalking⾥⾯查看⽇志,扔掉ELK logback官⽅配置 :https://skywalking.apache.org/docs/main/v8.5.0/en/setup/service- agent/java-agent/application-toolkit-logback-1.x/ log4j官⽅配置 :https://skywalking.apache.org/docs/main/v8.5.0/en/setup/service-agent/java- agent/application-toolkit-log4j-1.x/ log4j2j官⽅配置:https://skywalking.apache.org/docs/main/v8.5.0/en/setup/service- agent/java-agent/application-toolkit-log4j-2.x/ 引⼊依赖 添加logback-spring.xml⽂件,并配置 %tid 占位符 日志打印如下:skywalking自定义链路追踪@Trace自定义链路,需要依赖skywalking官方提供的apm-toolkit-trace包.在pom.xml的dependencies中添加如下依赖:@Trace注解其只能在方法上进行注解,使用operationName属性指定Span的名字,若不指定,会使用方法名.使用@Tags/ @Tag注解添加Span的属性


key 属性名:
value 属性值会是一个表达式,具体可以参考官方文档: enhancement rules, for more information, refer to https://github.com/apache/skywalking/blob/master/docs/en/setup/service-agent/java-agent/Customize-enhance-trace.md#how-to-configure
当然也可以看源码,入口在org.apache.skywalking.apm.toolkit.activation.util.TagUtil#tagParamsSpan
这里用到的arg[0]代表入参的第一个对象,returnedObj即返回的对象.



应用接入情况:


生产环境建议搭建(高可用):

应用

作用

Nginx代理服务器

代理转发

Skywalking OAP集群

3个节点,高可用

SkyWalking UI 服务

1个节点

ES集群

4个节点

nacos注册中心集群

3个节点,高可用


监控告警:

SkyWalking 告警功能核⼼由⼀组规则驱动,这些规则定义在config/alarm-settings.yml⽂件中。 告警 规则的定义分为两部分: 1. 告警规则:定义了应该在什么情况下触发告警。 2. Webhook(⽹络钩⼦):定义当警告触发时,需要通知到哪⾥去。 告警规则 SkyWalking 的发⾏版都会默认提供config/alarm-settings.yml⽂件,⾥⾯预先定义了⼀些常⽤的告警 规则。如下:


1. 最近 3 分钟内服务平均响应时间超过 1 秒。
2. 最近 2 分钟服务成功率低于80%。
3. 最近 3 分钟内服务响应时间超过 1s 的百分⽐。
4. 最近 2 分钟内端点平均响应时间超过 1 秒。
5. 最近 2 分钟内数据库访问平均响应时间超过 1 秒。
6. 最近 2 分钟内端点关系平均响应时间超过 1 秒。
这时我们看我们的告警服务的⽇志就会出现我们代码⾥⾯打印的告警信息:
定制



SkyWalking ⾼可⽤搭建
搭建⼀个 SkyWalking 集群环境,步骤如下:
1. 第⼀步:搭建⼀个 Elasticsearch 服务的集群
2. 第⼆步:搭建⼀个注册中⼼、⽬前 SkyWalking ⽀持 Zookeeper、Kubernetes、Consul、Nacos
作为注册中⼼。这⾥直接使⽤前⾯课程讲到的Nacos配置中⼼。
3. 第三步:搭建⼀个 SkyWalking OAP 服务的集群,将 SkyWalking OAP 服务注册到注册中⼼nacos
上。我们对这⼀步进⾏展开。
4. 第四步:搭建⼀个 SkyWalking UI 服务的集群,同时使⽤ Nginx 进⾏负载均衡。(没必要,UI服务
⼀般不会挂,真挂了就重启下,完全不碍事),这⾥UI我们就部署⼀个。然后再设置 SkyWalking
UI 的 collector.ribbon.listOfServers 地址时,设置多个 SkyWalking OAP 服务的地址数组。
5. 第五步:启动⼀个 Spring Boot应⽤,并配置 SkyWalking Agent。另外,在设置 SkyWaling Agent
的 SW_AGENT_COLLECTOR_BACKEND_SERVICES 地址时,需要设置多个 SkyWalking OAP 服务的地址数组。


搭建 SkyWalking OAP 服务的集群


这⾥我们准备2台服务器,将单机版的安装过程在两台服务器上都安装⼀遍,这⾥修改 config/application.yml⽂件,使⽤nacos作为注册中⼼,配置如下图,设置集群为nacos模式,设置好 nacos的hostPort,namespace,账号密码。使⽤es作为存储空间那⾥依然保持不变。


这⾥配置上ES集群的各个地址,⽤逗号隔开。如果⼤家没有2个ES集群,⽤两个ES单机环境也,每个
OAP服务连⼀个ES环境。


启动后可以在nacos服务列表⾥⾯看到




未来改造方向的思考
有以下几个方向可做扩展:
打破平台Prometheus指标监控及链路监控壁垒,现有Prometheus指标监控告警,无法通过告警信息准确定位,可通过在平台SDK中自定义指标数据,放入TraceId等关键字段,达到通过告警或异常指标数据直接可定位具体请求的水平;
②  实现多渠道告警信息接收及处理,现有平台告警来源于Prometheus监控,对于业务系统来说,需要更多维度的告警监控,可通过整合Skywalking监控告警能力,提升告警监控范围;


遇到的坑:


有两种方式可以调整请求采样:

1、skywalking agent调整采样率,减少数据上传 通过agent.sample_n_per_3_secs设置3秒内采样的数量,一般500~2000是合适的值。默认-1全采样。 在设置agent采样率后,如果调用链上游进行了采样,那么下游会忽略采样率进行强制采样,保证Trace调用链完整。

2、collector调整采样率,丢弃数据 通过sampleRate调整采样率,丢弃部分数据。默认10000是全采样,如果设置为5000则会有50%数据被丢弃。 丢弃数据只会影响Trace功能,不会影响Metric功能,Metric的所有数据都是根据全量数据计算的。

Trace功能:调用链。Metric功能:性能检测指标,如成功率等等。



日志埋点:

Plain Text

2022-05-25 20:07:53.335 [TID:N/A] INFO  [erListUpdater-0] c.n.config.ChainedDynamicProperty [checkAndFlip:115]: - Flipping property: service-b.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647
2022-05-25 20:08:01.289 [TID:16535298a7a84d6fa1e7f5cb9fd3f9ef.57.16534804812730001] INFO  [io-9021-exec-10] c.r.demo.controller.SkyController [getInfo$original$Ahy0vB7z:22]: - 1-skyController 测试一下tranceId的异步传递...
2022-05-25 20:08:04.523 [TID:16535298a7a84d6fa1e7f5cb9fd3f9ef.48.16534804845200003] INFO  [nio-9021-exec-1] c.r.demo.controller.SkyController [getInfo$original$Ahy0vB7z:22]: - 1-skyController 测试一下tranceId的异步传递...
2022-05-25 20:08:05.845 [TID:16535298a7a84d6fa1e7f5cb9fd3f9ef.49.16534804858410003] INFO  [nio-9021-exec-2] c.r.demo.controller.SkyController [getInfo$original$Ahy0vB7z:22]: - 1-skyController 测试一下tranceId的异步传递...
2022-05-25 20:08:07.044 [TID:16535298a7a84d6fa1e7f5cb9fd3f9ef.50.16534804870420003] INFO  [nio-9021-exec-3] c.r.demo.controller.SkyController [getInfo$original$Ahy0vB7z:22]: - 1-skyController 测试一下tranceId的异步传递...
2022-05-25 20:08:08.330 [TID:16535298a7a84d6fa1e7f5cb9fd3f9ef.51.16534804883260003] INFO  [nio-9021-exec-4] c.r.demo.controller.SkyController [getInfo$original$Ahy0vB7z:22]: - 1-skyController 测试一下tranceId的异步传递...
2022-05-25 20:08:09.662 [TID:16535298a7a84d6fa1e7f5cb9fd3f9ef.52.16534804896600003] INFO  [nio-9021-exec-5] c.r.demo.controller.SkyController [getInfo$original$Ahy0vB7z:22]: - 1-skyController 测试一下tranceId的异步传递...
2022-05-25 20:08:10.873 [TID:16535298a7a84d6fa1e7f5cb9fd3f9ef.53.16534804908700003] INFO  [nio-9021-exec-6] c.r.demo.controller.SkyController [getInfo$original$Ahy0vB7z:22]: - 1-skyController 测试一下tranceId的异步传递...
2022-05-25 20:08:12.071 [TID:16535298a7a84d6fa1e7f5cb9fd3f9ef.54.16534804920670003] INFO  [nio-9021-exec-7] c.r.demo.controller.SkyController [getInfo$original$Ahy0vB7z:22]: - 1-skyController 测试一下tranceId的异步传递...
2022-05-25 20:08:13.219 [TID:16535298a7a84d6fa1e7f5cb9fd3f9ef.55.16534804932170003] INFO  [nio-9021-exec-8] c.r.demo.controller.SkyController [getInfo$original$Ahy0vB7z:22]: - 1-skyController 测试一下tranceId的异步传递...
2022-05-25 20:08:13.978 [TID:16535298a7a84d6fa1e7f5cb9fd3f9ef.56.16534804939760003] INFO  [nio-9021-exec-9] c.r.demo.controller.SkyController [getInfo$original$Ahy0vB7z:22]: - 1-skyController 测试一下tranceId的异步传递...
2022-05-25 20:08:14.306 [TID:16535298a7a84d6fa1e7f5cb9fd3f9ef.57.16534804943030003] INFO  [io-9021-exec-10] c.r.demo.controller.SkyController [getInfo$original$Ahy0vB7z:22]: - 1-skyController 测试一下tranceId的异步传递...
2022-05-25 20:08:15.725 [TID:16535298a7a84d6fa1e7f5cb9fd3f9ef.48.16534804957230005] INFO  [nio-9021-exec-1] c.r.demo.controller.SkyController [getInfo$original$Ahy0vB7z:22]: - 1-skyController 测试一下tranceId的异步传递...
2022-05-25 20:08:17.636 [TID:16535298a7a84d6fa1e7f5cb9fd3f9ef.49.16534804976350005] INFO  [nio-9021-exec-2] c.r.demo.controller.SkyController [getInfo$original$Ahy0vB7z:22]: - 1-skyController 测试一下tranceId的异步传递...
2022-05-25 20:12:02.657 [TID:N/A] INFO  [trap-executor-0] c.n.d.s.r.aws.ConfigClusterResolver [getClusterEndpoints:43]: - Resolving eureka endpoints via configuration
2022-05-25 20:17:02.686 [TID:N/A] INFO  [trap-executor-0] c.n.d.s.r.aws.ConfigClusterResolver [getClusterEndpoints:43]: - Resolving eureka endpoints via configuration
2022-05-25 20:17:08.513 [TID:16535298a7a84d6fa1e7f5cb9fd3f9ef.52.16534810284980005] INFO  [nio-9021-exec-5] c.r.demo.controller.SkyController [getInfo$original$Ahy0vB7z:22]: - 1-skyController 测试一下tranceId的异步传递...
2022-05-25 20:17:10.601 [TID:16535298a7a84d6fa1e7f5cb9fd3f9ef.53.16534810305940005] INFO  [nio-9021-exec-6] c.r.demo.controller.SkyController [getInfo$original$Ahy0vB7z:22]: - 1-skyController 测试一下tranceId的异步传递...


相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
相关文章
|
监控 网络协议 Java
分布式链路追踪- SkyWalking使用手册
分布式链路追踪- SkyWalking使用手册
1258 0
分布式链路追踪- SkyWalking使用手册
|
21天前
|
数据库连接 数据库 DataX
数据接入方案
数仓平台可直连或通过从库、堡垒机、FTP/SFTP等方式接入业务数据库,需提供可读用户权限及相应连接方式。若无法直连,可通过提供数据文件或脚本处理实现数据导入。
50 7
数据接入方案
|
25天前
|
存储 监控 数据可视化
双十一线上服务调用链路追踪SkyWalking实战分析
【11月更文挑战第27天】随着电商行业的飞速发展,双十一购物节已成为全球最大的购物狂欢节之一。在双十一期间,电商平台需要处理海量的用户请求和订单,这对系统的稳定性和性能提出了极高的要求。为了确保系统在高并发环境下的稳定运行,对线上服务的调用链路进行追踪和分析显得尤为重要。本文将通过实战案例,详细介绍如何在双十一期间使用SkyWalking对线上服务进行调用链路追踪,并结合Seata实现分布式事务管理,从而保障系统的稳定性和性能。
44 6
|
4月前
|
监控 Java
分布式链路监控系统问题之OpenTracing规范的问题如何解决
分布式链路监控系统问题之OpenTracing规范的问题如何解决
|
4月前
|
存储 监控 开发者
分布式链路监控系统问题之系统拆分后链路追踪技术的问题如何解决
分布式链路监控系统问题之系统拆分后链路追踪技术的问题如何解决
|
6月前
|
Java 监控 自然语言处理
一站式链路追踪:阿里云的端到端解决方案
端到端链路追踪是覆盖全部关联 IT 系统,能够完整记录用户行为在系统间调用路径与状态的最佳实践方案。而真正实现端到端链路追踪,需要解决三个难题:链路插桩、链路采集与加工、链路上下文透传。阿里云 ARMS 目前已支持全链路端到端追踪,快来查看转发吧~
61348 15
|
4月前
|
监控 Java API
分布式链路监控系统问题之Skywalking中的witness工作的问题如何解决
分布式链路监控系统问题之Skywalking中的witness工作的问题如何解决
|
4月前
|
监控 API 开发者
分布式链路监控系统问题之ClassMatch在Skywalking中有什么作用
分布式链路监控系统问题之ClassMatch在Skywalking中有什么作用
|
7月前
|
存储 Java 分布式数据库
|
存储 监控 NoSQL
【微服务】分布式如何利用Skywalking实现链路追踪与监控?
微服务下的分布式如何实现链路追踪和监控。
1004 1
【微服务】分布式如何利用Skywalking实现链路追踪与监控?
下一篇
DataWorks