业务端skywalking接入方案

简介: 业务端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的异步传递...


相关文章
|
2月前
|
存储 Java 分布式数据库
|
6月前
|
消息中间件 Cloud Native Apache
RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践(1)
RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践
46 0
RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践(1)
|
消息中间件 监控 前端开发
前端日志采集方案浅析
在前端部署过程中,通常会使用nginx作为部署服务器,而对于默认的nginx服务来说,其提供了对应的日志记录,可以用于记录服务器访问的相关日志,对于系统稳定性及健壮性监控来说,日志采集、分析等能够提供更加量化的指标性建设,本文旨在简述前端应用及打点服务过程中所需要使用的nginx采集方案。
179 0
|
消息中间件 存储 监控
RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践
RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践
RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践
|
容灾 中间件 测试技术
全链路压测(7):核心链路四问
很多企业都会有自己核心的业务范围,这些核心业务也往往是主要的企业利润来源。以电商企业为例,为用户提供商品的购买服务,为商家提供商品的管理和上架及定价展示,利润大多为撮合用户和商家交易所带来的服务费以及广告等相关费用。
全链路压测(7):核心链路四问
|
存储 监控 NoSQL
【微服务】分布式如何利用Skywalking实现链路追踪与监控?
微服务下的分布式如何实现链路追踪和监控。
796 1
【微服务】分布式如何利用Skywalking实现链路追踪与监控?
|
监控 NoSQL Java
分布式系统快速接入pinpoint1.8.3指南
关于pinpointpinpoint是一款调用链跟踪工具,目前最新版是1.8.5,今天就来实战如何让系统快速接入pinpoint
525 0
分布式系统快速接入pinpoint1.8.3指南
|
存储 监控 前端开发
【SkyWalking】从零接入全链路追踪解决方案
Skywalking是一个国产的开源框架,2015年有吴晟个人开源,2017年加入Apache孵化器,国人开源的产品,本次分享下从零接入SkyWalking。
589 0
【SkyWalking】从零接入全链路追踪解决方案
|
存储 监控 数据可视化
链路监控(skywalking)集成
链路监控(skywalking)集成
241 0
链路监控(skywalking)集成
|
监控 Kubernetes Cloud Native
专为云原生、微服务架构而设计的链路追踪工具 【SkyWalking介绍及搭建】(上)
专为云原生、微服务架构而设计的链路追踪工具 【SkyWalking介绍及搭建】(上)
专为云原生、微服务架构而设计的链路追踪工具 【SkyWalking介绍及搭建】(上)