目录

概况

应用场景

架构分析

目录结构

部署应用

服务端

配置

部署

客户端

部署配置

本地idea配置

linux接入

使用Console

look Strong appearance!


概况

国产开源,Apache孵化器产品。支持非侵入式埋点,是一款基于分布式跟踪的应用程序性能监控系统。

官网:https://skywalking.apache.org/

官方文档:https://github.com/apache/skywalking/tree/master/docs

下载:https://skywalking.apache.org/downloads/https://archive.apache.org/dist/skywalking/

应用场景

  • 请求链路追踪,故障快速定位:可以通过调用链结合业务日志快速定位错误信息。
  • 可视化:各个阶段耗时,进行性能分析。
  • 依赖优化:各个调用环节的可用性、梳理服务依赖关系以及优化。
  • 数据分析,优化链路:可以得到用户的行为路径,汇总分析应用在很多业务场景。

架构分析

skywalking日志和elk的日志 skywalking日志埋点_分布式

  • Skywalking Agent: 采集tracing(调用链数据)和metric(指标)信息并上报,上报通过HTTP或者gRPC方式发送数据到Skywalking Collector
  • Skywalking Collector : 链路数据收集器,对agent传过来的tracing和metric数据进行整合分析通过Analysis Core模块处理并落入相关的数据存储中,同时会通过Query Core模块进行二次统计和监控告警
  • Storage: Skywalking的存储,支持以ElasticSearch、Mysql、TiDB、H2等作为存储介质进行数据存储
  • UI: Web可视化平台,用来展示落地的数据,目前官方采纳了RocketBot作为SkyWalking的主UI

 

目录结构

skywalking日志和elk的日志 skywalking日志埋点_skywalking日志和elk的日志_02

Skywalking整体分为 3 个部分:

  • agent 代理,应用启动的时候后,通过该agent收集数据并上报backend。
  • backend 数据收集器,agent收集的数据会发送给backend,然后数据处理后入库。
  • bin目录下的oapService.sh,它就是 backend 的启动脚本
  • config目录下的application.yml,它是backend的配置信息
  • oap-libs是backend启动需要的所有jar包
  • logs目录下的skywalking-oap-server.log是启动后的日志文件。
  • ui也就是提供可视化服务的界面。一般在webapp目录下

部署应用

服务端

配置

  1. 修改配置文件conf/appliction.yml。支持mysql、es等,日志量大,生产推荐es。
  2. 当选择mysql时,由于少myql驱动,需下载mysql-connector-java.jar至oap-libs。配置数据库信息,表结构在启动后会自动同步。
  3. 修改webapp/webapp.yml。修改端口及IP信息
#8.2版本  spring2.3版本
server:
  port: 9029

collector:
  path: /graphql
  ribbon:
    ReadTimeout: 10000
    # Point to all backend's restHost:restPort, split by ,
    listOfServers: xxxx:12800

部署

  1. 启动/bin下,startup.sh:全量启动;oapService.sh后端;webappService.sh前端。启动生成日志在logs下。
  2. 访问:http://xxxx:9029/

skywalking日志和elk的日志 skywalking日志埋点_JVM_03

客户端

部署配置

1.修改 agent/config/agent.config 文件

# 在UI上显示的服务名称
agent.service_name=${SW_AGENT_NAME:cp3-cloud}
#采集端地址,注意端口11800是默认暴露出来的,不用修改
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:xxxx:11800}

2. 将 agent/optional-plugins/ 中的如下插件移动到 agent/plugins/ 里面去

apm-quartz-scheduler-2.x-plugin-8.2.0.jar # 定时任务
apm-spring-annotation-plugin-8.2.0.jar
# spring注解
apm-spring-tx-plugin-8.2.0.jar # spring事务
apm-trace-ignore-plugin-8.2.0.jar
# 自定义忽略追踪某些请求 (如nacos、eureka等定时请求)
apm-spring-cloud-gateway-2.1.x-plugin-8.2.0.jar
# 解决微服务项目 gateway 转发的问题
apm-spring-webflux-5.x-plugin-8.2.0.jar #

3.下载apm-trace-ignore-plugin插件的配置文件放到 agent/config/ 目录,取名为: apm-trace-ignoreplugin.config

# 需要被注入的地址
# /path/? 匹配任意单个字符
# /path/* 匹配任意数量的字符
# /path/** 匹配任意数量的字符并支持多级目录
# 多个路径使用逗号分隔, 比如: trace.ignore_path=/eureka/**,/consul/**
trace.ignore_path=${SW_AGENT_TRACE_IGNORE_PATH:/eureka/**}

4.若是分布式部署, 将agent文件夹移动到跟spring-boot的jar同一台服务器上的任意目录.

配置每个服务的启动参数.

/xxx/agent/skywalking-agent.jar 要改成你自己的skywalking-agent.jar 存放路经

# VM Options: (虚拟机参数)
-Xms128M -Xmx192M -XX:MetaspaceSize=64M -XX:MaxMetaspaceSize=128M -javaagent:/xxx/agent/skywalking-agent.jar
# Environment variables (环境变量)
SW_AGENT_NAME=xxx-server

本地idea配置

skywalking日志和elk的日志 skywalking日志埋点_JVM_04

linux接入

java -javaagent:/xxxx/agent/skywalking-agent.jar -Dskywalking.agent.service_name=xxx-server -jar xx-server.jar

使用Console

  1. 访问UI页面: http://localhost:12080 查看结果 

look Strong appearance!

Service Dashboard

Service Dashboard内分别有Global、Service、Endpoint、Instance面板,展示了全局以及服务、端点、实例的详细信息

  • global
  • Services load:服务每分钟请求数
  • Slow Services:慢响应服务,单位ms
  • Un-Health services(Apdex):Apdex性能指标,1为满分。
  • Global Response Latency:百分比响应延时,不同百分比的延时时间,单位ms
  • Global Heatmap:服务响应时间热力分布图,根据时间段内不同响应时间的数量显示颜色深度
  • 底部栏:展示数据的时间区间,点击可以调整。

skywalking日志和elk的日志 skywalking日志埋点_jar_05

  • service
  • Service Apdex(数字):当前服务的评分 
  • Service Apdex(折线图):不同时间的Apdex评分
  • Successful Rate(数字):请求成功率
  • Successful Rate(折线图):不同时间的请求成功率
  • Servce Load(数字):每分钟请求数
  • Servce Load(折线图):不同时间的每分钟请求数
  • Service Avg Response Times:平均响应延时,单位ms
  • Global Response Time Percentile:百分比响应延时
  • Servce Instances Load:每个服务实例的每分钟请求数
  • Show Service Instance:每个服务实例的最大延时
  • Service Instance Successful Rate:每个服务实例的请求成功率

skywalking日志和elk的日志 skywalking日志埋点_jar_06

  • instance
  • Service Instance Load:当前实例的每分钟请求数
  • Service Instance Successful Rate:当前实例的请求成功率
  • Service Instance Latency:当前实例的响应延时
  • JVM CPU:jvm占用CPU的百分比
  • JVM Memory:JVM内存占用大小,单位m
  • JVM GC Time:JVM垃圾回收时间,包含YGC和OGC
  • JVM GC Count:JVM垃圾回收次数,包含YGC和OGC
  • CLR XX:类似JVM虚拟机

skywalking日志和elk的日志 skywalking日志埋点_分布式_07

  • endpoint 端点(API)维度
  •  Endpoint Load in Current Service:每个端点的每分钟请求数
  • Slow Endpoints in Current Service:每个端点的最慢请求时间,单位ms
  • Successful Rate in Current Service:每个端点的请求成功率
  • Endpoint Load:当前端点每个时间段的请求数据
  • Endpoint Avg Response Time:当前端点每个时间段的请求行响应时间
  • Endpoint Response Time Percentile:当前端点每个时间段的响应时间占比
  • Endpoint Successful Rate:当前端点每个时间段的请求成功率

skywalking日志和elk的日志 skywalking日志埋点_分布式_08

Database Dashboard

Database Dashboard内可以展示数据库的响应时间、响应时间分布、吞吐量、SLA、慢SQL等详细信息,便于直观展示数据库状态

skywalking日志和elk的日志 skywalking日志埋点_skywalking日志和elk的日志_09

拓扑图

每条连线的颜色反应了服务之间的调用延迟情况,可以非常直观的看到服务与服务之间的调用状态,连线中间的点能点击,可显示两个服务之间链路的平均响应时间、吞吐率以及SLA等信息。

  • :服务告警信息
  • :服务端点追踪信息
  • :服务实例性能信息
  • :api信息面板

skywalking日志和elk的日志 skywalking日志埋点_JVM_10

接口追踪

能够显示请求的代码内部执行情况,一个完整的请求都经过了哪些服务、执行了哪些代码方法、每个方法的执行时间、执行状态等详细信息,快速定位代码问题。

  • 左侧:api接口列表,红色-异常请求,蓝色-正常请求
  •  右侧:api追踪列表,api请求连接各端点的先后顺序和时间

skywalking日志和elk的日志 skywalking日志埋点_jar_11

性能分析

  • 新建任务:新建需要分析的端点
  • 左侧列表:任务及对应的采样请求
  •  右侧:端点链路及每个端点的堆栈信息

skywalking日志和elk的日志 skywalking日志埋点_skywalking日志和elk的日志_12

告警

不同维度告警列表,可分为服务、端点和实例

skywalking日志和elk的日志 skywalking日志埋点_JVM_13