简介

项目地址: https://github.com/apache/incubator-skywalking 官方文档:https://skywalking.apache.org/docs/

SkyWalking:APM(应用程序性能监控)系统,专为微服务、云原生和基于容器(Docker、Kubernetes、Mesos)架构而设计。

同类产品:Jaeger、Zipkin、

Skywalking 是本土开源的调用链追踪系统,包括监控、跟踪、诊断功能,目前已加入 Apache 孵化器,专门为微服务、云本地和基于容器(Docker、Kubernetes、Mesos)架构设计。

主要功能

1)服务、服务实例、端点指标数据分析 2)根本原因分析,在运行时评测代码 3)服务拓扑图分析 4)服务、服务实例和端点依赖性分析 5)检测到慢速服务和终结点 6)性能优化 7)分布式跟踪和上下文传播 8)数据库访问度量。检测慢速数据库访问语句(包括 SQL 语句)。 9)报警 10)浏览器性能监视

发展历程

是一个优秀的国产开源框架,2015年由个人吴晟(华为开发者)开源 , 2017年加入Apache孵化器。

架构

来源于官方的架构图: image.png

SkyWalking UI:负责提供web控制台,查看链路,查看各种指标,性能等等 Storage:数据存储。目前支持ES、MySQL、TiDB、H2(默认)等多种存储器。 Agent :负责从应用中,收集tracing(调用链数据)和metric(指标),发送给 SkyWalking OAP 服务器。目前支持 SkyWalking、Zikpin、Jaeger 等提供的 Tracing 数据信息。而我们目前采用的是,SkyWalking Agent 收集 SkyWalking Tracing 数据,传递给SkyWalking OAP 服务器。

组件

Satellite

如果业务流量不均衡,会导致OAP节点接收到的监控数据不均衡。因此,您可以添加 Satellite 组件。使用Satellite组件部署展示后,监控流量将发送到Satellite服务,Satellite负载平衡流量到 OAP 节点。

Skywalking 的三个组成部分

探针(agent)

负责进行数据的收集,包含了Tracing和Metrics的数据,agent会被安装到服务所在的服务器上,以方便数据的获取。探针使用gRPC协议与OAP平台通信并上报数据。

可观测性分析平台 OAP

(Observability Analysis Platform) 接收探针发送的数据,并在内存中使用分析引擎(Analysis Core)进行数据的整合运算,然后将数据存储到对应的存储介质上,比如 Elasticsearch、MySQL等存储服务。同时OAP还使用查询引擎(Query Core)提供HTTP查询接口。OAP默认监听两个端口gRPC协议端口11800、HTTP端口12800,gRPC用于探针上报数据,HTTP端口用于UI连接OAP平台获取数据。

Skywalking UI

Skywalking 提供单独的UI进行数据的查看,UI调用OAP提供的接口,获取对应的数据根据UI模板的配置进行展示。Skywalking UI与OAP之间使用Http协议进行通信。Skywalking UI默认监听8080端口提供Web服务。


二、SkywalKing部署

使用默认的内置数据库h2

2.1 部署skywalking-apm

1)安装JDK

$ tar zxvf jdk-8u281-linux-x64.tar.gz   -C /usr/local/

2)配置环境变量

$ echo """
export JAVA_HOME=/usr/local/jdk1.8.0_281
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
""" >> /etc/profile
$ source /etc/profile            #使配置生效

$ echo """
export JAVA_HOME=/usr/local/jdk1.8.0_281
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
""" >> ~/.bashrc
$ source ~/.bashrc
$ java  -version              #验证是否安装成功
java version "1.8.0_281"
$ which java                     #查看Java安装路径

3)下载安装包

$ wget https://archive.apache.org/dist/skywalking/8.9.1/apache-skywalking-apm-8.9.1.tar.gz
$ tar zxvf apache-skywalking-apm-8.9.1.tar.gz -C /usr/local/
$ cd /usr/local/apache-skywalking-apm-bin/
config/application.yml   核心配置
config/gateways.yml  外接网关
config/trace-sampling-policy-settings.yml
config/ alarm-settings.yml   预警
config/service-apdex-threshold.yml  服务apdex设置

├── bin								# 运行脚本
│   ├── oapService.bat
│   ├── oapServiceInit.bat
│   ├── oapServiceInit.sh # 初始化启动脚本,用于集群环境。为了防止多节点同时启动导致冲突,
	#单节点执行oapServiceInit.sh进行初始化,其他节点执行oapServiceNoInit.sh等待初始化完成后再启动。
│   ├── oapServiceNoInit.bat
│   ├── oapServiceNoInit.sh
│   ├── oapService.sh				# OAP 启动并初始化
│   ├── startup.bat
│   ├── startup.sh					# 启动并初始化脚本(同时启动OAP与UI)
│   ├── webappService.bat
│   └── webappService.sh			# Skywalking UI 启动脚本
├── config							# 配置文件
│   ├── alarm-settings.yml			# 告警配置
│   ├── application.yml				# OAP 主配置文件
│   ├── component-libraries.yml		# 组件库配置,定义被监控应用中使用的组件库
│   ├── endpoint-name-grouping.yml	# 接口名称分组规则
│   ├── envoy-metrics-rules			# envoy 网关监控策略
│   │   ├── envoy-svc-relation.yaml
│   │   └── envoy.yaml
│   ├── fetcher-prom-rules			# Prometheus Fetcher 配置文件,用于OAP自监测。
│   │   └── self.yaml
│   ├── gateways.yml				# 网关配置,单节点无需配置
│   ├── lal
│   │   ├── default.yaml
│   │   └── envoy-als.yaml
│   ├── log4j2.xml					# 日志配置
│   ├── log-mal-rules
│   │   └── placeholder.yaml
│   ├── metadata-service-mapping.yaml
│   ├── meter-analyzer-config
│   │   └── spring-sleuth.yaml
│   ├── oal							# oal监控度量指标
│   │   ├── browser.oal
│   │   ├── core.oal
│   │   ├── disable.oal
│   │   ├── dotnet-agent.oal
│   │   ├── event.oal
│   │   ├── java-agent.oal
│   │   └── tcp.oal
│   ├── openapi-definitions		 	
│   │   └── serviceA
│   ├── otel-oc-rules				# OpenTelemetry receiver规则
│   │   ├── istio-controlplane.yaml
│   │   ├── k8s-cluster.yaml
│   │   ├── k8s-node.yaml
│   │   ├── k8s-service.yaml
│   │   ├── oap.yaml
│   │   └── vm.yaml
│   ├── service-apdex-threshold.yml	# apdex配置
│   ├── trace-sampling-policy-settings.yml	# 采样配置
│   ├── ui-initialized-templates	# UI配置模板
│   │   ├── apm.yml
│   │   ├── browser.yml
│   │   ├── database.yml
│   │   ├── event.yml
│   │   ├── istio-dp.yml
│   │   ├── istio.yml
│   │   ├── k8s.yml
│   │   ├── self-observability.yml
│   │   ├── spring-sleuth.yml
│   │   ├── topology-endpoint-relation.yml
│   │   ├── topology-endpoint.yml
│   │   ├── topology-instance.yml
│   │   ├── topology-service-instance-relation.yml
│   │   ├── topology-service-relation.yml
│   │   ├── topology-service.yml
│   │   └── vm.yml
│   └── zabbix-rules			# zabbix 规则
│       └── agent.yaml
├── config-examples						# 配置文件示例
│   ├── alarm-settings.yml
│   ├── lal.yaml
│   └── log-mal.yaml
├── LICENSE
├── licenses
├── NOTICE
├── oap-libs							# OAP Jar文件与依赖库
├── README.txt
├── tools								# 开发运维工具
│   └── profile-exporter
│       ├── application.yml
│       ├── profile_exporter_log4j2.xml
│       └── profile_exporter.sh
└── webapp								# Skywalking UI
    ├── skywalking-webapp.jar
    └── webapp.yml						# Skywalking UI 配置文件

4)修改配置

$ vim webapp/webapp.yml
server:
  port: 8080    #修改前端访问端口

5)启动服务

$ sh bin/startup.sh
SkyWalking OAP started successfully!
SkyWalking Web Application started successfully!

启动后会出现个logs文件夹,可以查看对应的日志文件来排查故障。

6)浏览器登录Skywalking UI

在浏览器地址栏输入主机IP:服务端口访问Skywalking的Web UI管理界面。 image.png

2.2 部署Agent客户端

1)下载安装包

$ wget https://archive.apache.org/dist/skywalking/java-agent/8.9.0/apache-skywalking-java-agent-8.9.0.tgz
$ tar zxvf apache-skywalking-java-agent-8.9.0.tgz -C /usr/local/
$ cd  /usr/local/skywalking-agent/

├── activations			#工具包,默认加载。
├── bootstrap-plugins		#启动插件,默认加载。
├── config
│   └── agent.config  #配置文件
├── LICENSE
├── licenses
├── logs
├── NOTICE
├── optional-plugins			#可选扩展插件,启动不加载,如需加载将其移到到plugins目录下。
├── optional-reporter-plugins			#可选统计类插件,启动不加载。
├── plugins								#服务类插件
└── skywalking-agent.jar					#客户端主程序,需要被服务启动是引用。

2)启动Java-Agent

方式一、 编写启动脚本

$ echo """
# SkyWalking Agent配置
export SW_AGENT_NAME=springboot‐skywalking‐demo #Agent名字,一般使用`spring.application.name`
export SW_AGENT_COLLECTOR_BACKEND_SERVICES=192.168.2.120:11800  #配置 Collector 地址。
export SW_AGENT_SPAN_LIMIT=2000  #配置链路的最大Span数量,默认为 300。
export JAVA_AGENT=‐javaagent:/usr/local/skywalking-agent/skywalking‐agent.jar
java $JAVA_AGENT ‐jar springboot‐skywalking‐demo‐0.0.1‐SNAPSHOT.jar #jar启动 """ > java-agent-start.sh
$ chmod +x java-agent-start.sh

方式二、

$ java  -javaagent:/usr/local/skywalking-agent/skywalking-agent.jar  \
 ‐DSW_AGENT_COLLECTOR_BACKEND_SERVICES=192.168.2.120:11800  \
 ‐DSW_AGENT_NAME=skywalking‐demo  ‐jar springboot‐skywalking‐demo‐0.0.1‐SNAPSHOT.jar

‐DSW_AGENT_NAME:指定服务名称(如果有nacos 最好与nacos保持一致)
-DWS_AGENT_COLLECTOR_BACKEND_SERVICES: 指定sw oap服务端监控端口

java -javaagent:/usr/xxx/xxx/skywalking-agent.jar -DWS_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800 -DSW_AGENT_NAME=user -jar ourProject.jar