史上最全SpringCloud整合skywalking
1. 概述
1.1 概念
SkyWalking 是什么?
FROM http://skywalking.apache.org/
分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。
提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。
1.2 功能列表
SkyWalking 有哪些功能?
FROM http://skywalking.apache.org/
- 多种监控手段。可以通过语言探针和 service mesh 获得监控是数据。
- 多个语言自动探针。包括 Java,.NET Core 和 Node.JS。
- 轻量高效。无需大数据平台,和大量的服务器资源。
- 模块化。UI、存储、集群管理都有多种机制可选。
- 支持告警。
- 优秀的可视化解决方案。
1.3 整体架构SkyWalking 整体架构如何?
FROM http://skywalking.apache.org/
文章图片
整个架构,分成上、下、左、右四部分:
考虑到让描述更简单,我们舍弃掉 Metric 指标相关,而着重在 Tracing 链路相关功能。
- 上部分 Agent :负责从应用中,收集链路信息,发送给 SkyWalking OAP 服务器。目前支持 SkyWalking、Zikpin、Jaeger 等提供的 Tracing 数据信息。而我们目前采用的是,SkyWalking Agent 收集 SkyWalking Tracing 数据,传递给服务器。
- 下部分 SkyWalking OAP :负责接收 Agent 发送的 Tracing 数据信息,然后进行分析(Analysis Core) ,存储到外部存储器( Storage ),最终提供查询( Query )功能。
- 右部分 Storage :Tracing 数据存储。目前支持 ES、MySQL、Sharding Sphere、TiDB、H2 多种存储器。而我们目前采用的是 ES ,主要考虑是 SkyWalking 开发团队自己的生产环境采用 ES 为主。
- 左部分 SkyWalking UI :负责提供控台,查看链路等等。
1.4 官方文档在 https://github.com/apache/skywalking/tree/master/docs 地址下,提供了 SkyWalking 的英文文档。
考虑到大多数胖友的英语水平和艿艿不相伯仲,再加上胖友一开始对 SkyWalking 比较陌生,所以比较推荐先阅读 https://github.com/SkyAPM/document-cn-translation-of-skywalking 地址,提供了 SkyWalking 的中文文档。
考虑到胖友使用 SkyWalking 的目的,是实现分布式链路追踪的功能,所以最好去了解下相关的知识。这里推荐阅读两篇文章:
- 《OpenTracing 官方标准 —— 中文版》
- Google 论文 《Dapper,大规模分布式系统的跟踪系统》
?
2.搭建 2.1 Elasticsearch 搭建
#直接拉取镜像
sudo docker pull elasticsearch:7.4.2#创建所需目录:
mkdir -p /mydata/elasticsearch/config/
mkdir -p /mydata/elasticsearch/data/
echo "http.host: 0.0.0.0">>/mydata/elasticsearch/config/elasticsearch.yml#创建实例并启动:
sudo docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e ES_JAVA_OPS="-Xms512m -Xmx512m" \
-v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:7.4.2
参数说明:
注意要有访问权限:
chmod -R 777 /mydata/elasticsearch
参数说明:
-p 9200:9200 将容器的9200端口映射到主机的9200端口;
--name elasticsearch 给当前启动的容器取名叫 elasticsearch
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data 将数据文件夹挂载到主机;
-v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml 将配置文件挂载到主机;
-d 以后台方式运行(daemon)
-e ES_JAVA_OPS="-Xms256m -Xmx256m" 测试时限定内存小一点
访问elasticsearch:http://IP:9200/ ?
?
2.2 下载 SkyWalking 软件包 对于 SkyWalking 的软件包,有两种方式获取:
- 手动编译
- 官方包
2.2.1 官方包
在 http://skywalking.apache.org/downloads/ 下,我们下载操作系统对应的发布版。
这里,我们选择 Binary Distribution for ElasticSearch 7 (Linux) 版本,因为艿艿是 Mac 环境,再加上想使用 Elasticsearch 7.X 版本作为存储。如果胖友想用 Elasticsearch 6.X 版本作为存储,记得下载 Binary Distribution (Linux) 版本。
① 下载:
# 创建目录
$ mkdir -p /Users/yunai/skywalking
$ cd /Users/yunai/skywalking# 下载
$ wget http://mirror.bit.edu.cn/apache/skywalking/6.6.0/apache-skywalking-apm-es7-6.6.0.tar.gz
② 解压:
# 解压
$ tar -zxvf apache-skywalking-apm-es7-6.6.0.tar.gz
$ cdapache-skywalking-apm-bin-es7$ ls -ls
4 drwxr-xr-x 8 root root4096 Sep9 15:09 agent # SkyWalking Agent
4 drwxr-xr-x 2 root root4096 Sep9 15:44 bin # 执行脚本
4 drwxr-xr-x 2 root root4096 Sep9 15:44 config # SkyWalking OAP Server 配置文件
32 -rwxr-xr-x 1 root root 28903 Sep9 14:32 LICENSE
4 drwxr-xr-x 3 root root4096 Sep9 15:44 licenses
32 -rwxr-xr-x 1 root root 31850 Sep9 14:32 NOTICE
16 drwxr-xr-x 2 root root 16384 Sep9 15:22 oap-libs # SkyWalking OAP Server
4 -rw-r--r-- 1 root root1978 Sep9 14:32 README.txt
4 drwxr-xr-x 2 root root4096 Sep9 15:44 webapp # SkyWalking UI
?
2.2 SkyWalking OAP 配置修改 修改 skywalking/config/application.yml
文章图片
文章图片
文章图片
其中 nameSpace是请求安装的es http://IP:9200/ 返回的cluster_name对应值。
?
2.3启动 【史上最全SpringCloud整合skywalking】skywalking/bin/ 目录下 sh startup.sh 即可启动
?
2.4访问 http://IP:8080/
文章图片
3.SpringCloud 服务接入SkyWalking 3.1 SkyWalking Agent 大多数情况下,我们在启动项目的 Shell 脚本上,通过 -javaagent 参数进行配置 SkyWalking Agent 。
考虑到偶尔我们需要在 IDE 中,也希望使用 SkyWalking Agent ,所以我们在 下面IDE小节来看。
3.1.1 Shell
① Agent 软件包
我们需要将 apache-skywalking-apm-bin/agent 目录,拷贝到 Java 应用所在的服务器上。这样,Java 应用才可以配置使用该 SkyWalking Agent。我们来看看 Agent 目录下有哪些:
$ ls -lstotal 35176
0 drwxr-xr-x@7 yunaistaff224 Dec 24 14:20 activations
0 drwxr-xr-x@4 yunaistaff128 Dec 24 14:21 bootstrap-plugins
0 drwxr-xr-x@3 yunaistaff96 Dec 24 14:12 config # SkyWalking Agent 配置
0 drwxr-xr-x@3 yunaistaff96 Jan2 19:29 logs # SkyWalking Agent 日志
0 drwxr-xr-x@ 13 yunaistaff416 Dec 24 14:22 optional-plugins # 可选插件
0 drwxr-xr-x@ 68 yunaistaff2176 Dec 24 14:20 plugins # 插件
35176 -rw-r--r--@1 yunaistaff18006420 Dec 24 14:12 skywalking-agent.jar # SkyWalking Agent
- 关于 SkyWalking Agent 提供的插件列表,可以看看《SkyWalking 文档 —— 插件支持列表》。
② 配置 Java 启动脚本
# SkyWalking Agent 配置
export SW_AGENT_NAME=demo-application # 配置 Agent 名字。一般来说,我们直接使用 Spring Boot 项目的 `spring.application.name` 。
export SW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800 # 配置 Collector 地址。
export SW_AGENT_SPAN_LIMIT=2000 # 配置链路的最大 Span 数量。一般情况下,不需要配置,默认为 300 。主要考虑,有些新上 SkyWalking Agent 的项目,代码可能比较糟糕。
export JAVA_AGENT=-javaagent:/Users/yunai/skywalking/apache-skywalking-apm-bin-es7/agent/skywalking-agent.jar # SkyWalking Agent jar 地址。# Jar 启动
java -jar $JAVA_AGENT -jar lab-39-demo-2.2.2.RELEASE.jar#复杂脚本可参考:
nohup java -javaagent:/data/application/skywalking/agent/skywalking-agent.jar -Xmx512m -Xms512m -jar ${APP_NAME} --spring.profiles.active=dev --spring.cloud.nacos.discovery.server-addr=192.168.0.79:8848 --spring.cloud.nacos.discovery.password=nacos --spring.cloud.nacos.discovery.username=nacos --spring.cloud.nacos.config.server-addr=192.168.0.79:8848 >/dev/null 2>&1 &
- 通过环境变量,进行配置。
- 更多的变量,可以在 /agent/config/agent.config 查看。要注意,可能有些变量是被注释掉的,例如说 SW_AGENT_SPAN_LIMIT 对应的 agent.span_limit_per_segment 。
3.1.2 IDEA
我们统一使用 IDEA 作为开发 IDE ,所以忽略 Eclipse 的配置方式。
具体参考下图,比较简单:
文章图片
3.2 微服务接入日志 3.2.1 日志打印接入
- 加入依赖
org.apache.skywalking apm-toolkit-logback-1.x8.5.0
- logback日志使用grpc收集,logback.xml 片段为:
%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{36} -%msg%n INFO ACCEPT DENY %d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{36} -%msg%n ERROR ACCEPT DENY
3.logback.xml完整内容为:
${log.pattern.traceId} %d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{36} -%msg%n INFO ACCEPT DENY %d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{36} -%msg%n ERROR ACCEPT DENY ${log.path}/info.log ${log.path}/info.%d{yyyy-MM-dd}.log 60 ${log.pattern.traceId} INFO ACCEPT DENY ${log.path}/error.log ${log.path}/error.%d{yyyy-MM-dd}.log 60 ${log.pattern.traceId} ERROR ACCEPT DENY
skywalking/agent/config/agent.config
# Backend service addresses.
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:192.168.0.77:11800}plugin.toolkit.log.grpc.reporter.server_host=${SW_GRPC_LOG_SERVER_HOST:192.168.0.77}
plugin.toolkit.log.grpc.reporter.server_port=${SW_GRPC_LOG_SERVER_PORT:11800}
plugin.toolkit.log.grpc.reporter.max_message_size=${SW_GRPC_LOG_MAX_MESSAGE_SIZE:10485760}
plugin.toolkit.log.grpc.reporter.upstream_timeout=${SW_GRPC_LOG_GRPC_UPSTREAM_TIMEOUT:30}
3.2.2.加入对SpringCloud gateway网关的支持 将skywalking/plugins目录下的apm-spring-cloud-gateway-2.1.x-plugin-8.5.0.jar、apm-spring-cloud-gateway-2.0.x-plugin-8.5.0.jar 拷贝到skywalking/optional-plugins目录下即可
?
3.2.3 忽略跟踪某项节点(url) 1.将skywalking/plugins目录下的apm-trace-ignore-plugin-8.5.0.jar 拷贝到skywalking/optional-plugins目录下
2.在skywalking/agent/config下创建apm-trace-ignore-plugin.config文件,并加入trace.ignore_path=${SW_AGENT_TRACE_IGNORE_PATH:/api-docs/**} 为例,来忽略访问swaggerUI的追踪
?
参考:https://skywalking.apache.org/zh/2020-04-19-skywalking-quick-start/
推荐阅读
- 这份史上最经典的3大学习方法,清华北大学霸都在用!
- “三家分晋”最终三国还是归晋,历史上可怕的惊人巧合
- 历史上的今天|【历史上的今天】2 月 16 日(世界上第一个 BBS 诞生;中国计算机教育开端;IBM 机器人赢得智能竞赛)
- 中国古代的“网红”(盘点历史上各个朝代的第一名人)
- 幸耶(不幸耶?)
- 【SpringCloud-Alibaba系列教程】8.一文学会使用sentinel
- 史上最有“演技”的演员(刘备)
- 带孩子玩转东京,你需要这份最全面的攻略
- 历史上的娱乐与今天直播的必然联系。以及智能和互联网
- 刘禅不呆傻,呆傻的是我