SkyWalking
SkyWalking是一个开源的用于分析 采集 分析 聚合服务和云原生平台的可视化监控平台. Skywalking提供了非常易用的方式来监控分布式系统.它是一个现代化的APM(Application Performance Monitoring)工具,专为云原生和基于容器的分布式系统而设计.
Why SkyWalking?
SkyWalking提供了不同应用场景下的分布式系统下的监控解决方案.SkyWalking为不同的服务提供了自动采集agent代理,也提供了手动采集的SKD工具包(比如java C# Nodejs的支持). 现在云原生组件的发展使得应用更加强大,但是系统更加的复杂.SkyWalking解决分布式系统下的链路追踪监控的痛点 并且支持 service mesh K8S Istio 等技术
SkyWalking为 服务(Service) 实例(Instance) 端点(Endpoint) 提供了监控的能力
- 服务 Service 表示对于请求拥有相同处理行为的一个集合. 在使用Auto agent 或者 手动 SK可以自定义Service name. 类似与微服务中的一个服务的概念
- 实例 Service Instance: 在一个服务下的某一个单独提供服务实例. 类似 K8s中的Pod,或者微服务下同一个服务下负载的不同的实例应用.是操作系统下一个真实的进程
- 端点 Endpoint 特定接受服务的请求路径 如HTTP 的URL 或者 gRPC服务的 服务名+方法签名
类比现在的微服务的话,假如 一个注册到nacos中的user服务,下面挂了2个实例,请求/getUserInfo接口
分别 user服务代表 服务 Service, 2个实例对应实例 Service Instance ,请求路径/getUserInfo代表一个端点Endpoint
架构图
- Probe 探针 Skywalking中用来采集和格式化数据的单元 不同的探针提供不同的采集方式
- Platform backend 后台处理平台 SkyWalking中用于数据聚合 分析 流处理 度量和日志功能的模块
- Storage 持久化 SkyWalking中用于存储数据的模块 它是一个可选的插件式的模块. 我们可以选择ES H2 MySQL TiDB InfluxDB等存储介质来保存我们的数据
- UI SkyWalking中的可选模块用于从Platform backed 获取数据用于展示的模块,可以自定义也可以使用提供的Rocketbot UI 来展示我们收集到的监控数据
Quick Start
安装Skywalking
-
首先我们选择ES 来作为SkyWalking的存储介质 为了方便采用了docker ES7的模式快速搭建一个ES服务
docker pull elasticsearch:7.12.0 docker network create es docker run -d --name es --net es -p9200:9200 -p9300:9300 -e -e "discovery.type=single-node" elasticsearch:7.12.0
-
查看我们ES是否安装成功
docker ps
GET http://localhost:9200
-
通过以上步骤我们已经安装好了ES 下一步安装Skywalking 从官网下载最新的SkyWalking APM
https://skywalking.apache.org/downloads/
-
下载完成之后解压
- bin 是二进制脚本文件 用于启动SkyWalking
- logs 日志目录
- webapp 是Skywalking 自动的UI界面
- config 用于配置Skywalking的细节 主要需要修改持久化的方式
- agent 探针工具用于监控采集服务的数据
-
首先我们需要修改config目录下application.yml文件配置文件 修改持久化数据源选择ES7
-
修改storage标签下的selector 为elasticsearch7 如果ES中有多个集群或者namespace 用户密码的需要修改elasticsearch7下的配置
-
修改UI 的配置文件 webapp目录下的 webapp.yml文件 主要是修改一下port 避免端口冲突
# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. server: port: 8090 collector: path: /graphql ribbon: ReadTimeout: 10000 # Point to all backend's restHost:restPort, split by , listOfServers: 127.0.0.1:12800
-
进去bin目录启动Skywalking 如果是Windows使用startup.bat Linux使用startup.sh
- oapServer.xx 用于启动 采集平台
- webappService.xxx 启动UI界面
- startup.xxx 同时启动以上2个组件
-
访问localhost:8090查看
-
此时SkyWalking的监控端已经启动
启动监控Spring Boot项目
-
在启动Spring Boot的java -jar 命令中添加JVM参数 因为Skywalking使用了javaagent技术所以在启动Spring Boot应用时添加 -javaagent:/path/to/SkyWalking/agent/skywalking-agent.jar 路径需要传入对应SkyWalking中agent目录下的jar的路径
-
为了区分项目需要在JVM启动参数 添加额外的参数
配置自己应用名称
-Dskywalking.agent.service_name=skywalking_test
配置skywalking APM收集器地址
-Dskywalking.collector.backend_service=xxxx:11800 -
完整启动命令
java -jar --javaagent:/path/to/SkyWalking/agent/skywalking-agent.jar -Dskywalking.agent.service_name=YOU_APPLICATION_NAME xxxx.jar -Dskywalking.collector.backend_service=xxxx:11800
-
此时通过http请求访问一个路径 就会在SkyWalking中获取到数据