1. 概述

SkyWalking是一个开源可观察性平台,用于收集、分析、聚合和可视化来自服务和云原生基础设施的数据。SkyWalking提供了一种简单的方法来保持对分布式系统的清晰视图,即使是跨云。它是一种现代APM,专为云原生、基于容器的分布式系统而设计。

2. 框架结构

SkyWalking在逻辑上分为四个部分:探针、平台后端、存储和UI。

2.1 探针

探针收集数据,并根据SkyWalking要求对其进行重新格式化(不同的探测器支持不同的来源)。

2.2 平台后端

平台后端支持数据聚合、分析和流过程,涵盖跟踪、指标和日志。

2.3 存储

通过打开/可插拔的界面存储SkyWalking数据。可以选择现有的实现,如ElasticSearch、H2、MySQL、TiDB、InfluxDB。

2.4 UI

UI是一个高度可定制的基于Web的界面,允许SkyWalking最终用户可视化和管理SkyWalking数据。

3.组件即页面介绍

3.1.1探针简介

在SkyWalking中,探针是指集成到目标系统中的代理或SDK库,负责收集遥测数据,包括跟踪和度量。根据目标系统技术堆栈,探针执行此类任务的方式非常不同。但归根结底,他们都朝着同一个目标努力——收集和重新格式化数据,然后将其发送到后端。

本次我们用到的方法是基于语言的本地代理。也就是采用-javaagent命令行参数在运行时操作代码。

3.1.2 平台后端

本次的Skywalking-OAP后端采用的是Docker方式部署的,后续升级的话只需要指定最新版本即可(一般为tag为lasted)。

3.1.3 存储系统

本次后端所采用的存储系统为Elasticserach,因为相比于MySQL存储的话,它在查询上的速度会更快。

3.1.4 UI

SkyWalking原生UI为可视化提供了默认解决方案。它提供了概述、服务、服务实例、端点、跟踪和警报等可观测性相关图表,如拓扑图、依赖图、热图等。

3.2 UI各模块指标介绍

3.2.1 仪表盘-APM-Global

在Global页面,其中:

Services Load(CPM即Calls per Minutes/PPM即Packets Per Minute),是吞吐量(Throughput)指标。

Slow Services表示每个服务的响应时间。

Un-Health Services (Apdex全称是Application Performance Index,是由Apdex联盟开发的用于评估应用性能的工业标准。Apdex标准从用户的角度出发,将对应用响应时间的表现,转为用户对于应用性能的可量化范围为0-1的满意度评价)。以Apdex为性能指标对服务的健康状况进行评分。

Slow Endpoints表示到端点的响应时间。

Global Response Latency表示全局的响应时间(包括P50, P75, P90, P95, P99指标)。

Global Heatmap表示全局响应时间热力图。

3.2.2 仪表盘-APM-Service

在Service页面可以查看每个服务的具体指标。

3.2.3 仪表盘-APM-Instance

在Instance页面,其中:

JVM Memory (Java Service)表示该服务消耗的内存大小。

JVM GC Time表示该段时间发生的GC的时间。

3.2.4 仪表盘-APM- Endpoint

在Endpoint页面,其中:

Endpoint Load in Current Service表示该服务各端口的流量情况。

Slow Endpoints in Current Service表示该服务各端口的响应时间。

Successful Rate in Current Service表示该服务的成功率。

3.2.5 仪表盘- Database

在Database页面,其中:

Database Avg Response Time表示数据库的平均响应时间。

Database Access Successful Rate表示数据库连接成功率。

Database Traffic表示该段时间数据库的流量情况。

Database Access Latency Percentile表示各百分比的查询时间。

Slow Statements显示慢查询语句。

All Database Loads表示该段时间数据库的流量情况。

Un-Health Databases (Successful Rate)表示数据库的健康状态。

3.2.6 拓扑图

在拓扑图页面,我们可以看到个服务之间的关系以及依赖。同时可以查看各服务之间的连接状态。

3.2.7 追踪

在追踪页面,可以查看一次用户事件调用了那些接口,访问了哪些服务,执行了哪些SQL以及各部分消耗的时间。当然追踪也是我们用到最多的用来排查服务故障问题的一个功能。

3.2.8 告警

在告警页面,可以提醒各服务各端口响应时间超过1000ms(默认为1000ms,也可以根据自身情况修改参数)。

4. Docker安装Skywalking(ES作为数据库)

虽然Skywalking已经更新到了9.x,但是因为新的版本不太适应,因此还是采用了8.6的es版本,毕竟适合自己的才是最好的。

4.1 拉取skywalking-oap-server镜像

docker pull apache/skywalking-oap-server:8.6.0-es7

4.2 拉取skywalking-ui镜像

docker pull apache/skywalking-ui:8.6.0

4.3 启动skywalking-oap-server

docker run --name  skywalking-oap  \
-p 11800:11800  \
-p 12800:12800  \
-v /etc/localtime:/etc/localtime:ro  \
-v /etc/timezone:/etc/timezone:ro  \
-e TZ=Asia/Shanghai  \
-e SW_STORAGE=elasticsearch7  \
-e SW_NAMESPACE="webuy.monitor"  \
-e SW_STORAGE_ES_CLUSTER_NODES=xxxx:9200  \
-e SW_ES_USER="elastic" \
-e SW_ES_PASSWORD="xxxx"  \
--privileged=true  \
--restart=always  \
-d apache/skywalking-oap-server:8.6.0-es7

4.4 启动skywalking-ui

docker run --name skywalking-ui --restart always -p 8011:8080 --link skywalking-oap:skywalking-oap -d -e SW_OAP_ADDRESS=skywalking-oap:12800 apache/skywalking-ui:8.6.0

5. Skyingwalking-Agent启动参数

作为配置在运行Java程序的相关参数,需要添加-javaagent。具体参数如下:

java -javaagent:/export/servers/monitor/skywalking/agent/skywalking-apm.jar -Dskywalking.agent.service_name=xxx -Dskywalking.collector.backend_service=xxxx -Xms512M -Xmx512M -Xss2M -Dspring.profiles.active=xxxx -jar xxxx.jar

Java运行后即可在Skywalking-UI看到相关数据信息了。

Q.E.D.