自己有服务器怎么建设网站,郑州网络营销哪家正规,wordpress qq 群,宜春做网站的联系电话1. 概述
1.1 概念
SkyWalking 是什么#xff1f;
SkyWalking 极简入门 | Apache SkyWalking FROM Apache SkyWalking 分布式系统的应用程序性能监视工具#xff0c;专为微服务、云原生架构和基于容器#xff08;Docker、K8s、Mesos#xff09;架构而设计。 提供分布式追…1. 概述
1.1 概念
SkyWalking 是什么
SkyWalking 极简入门 | Apache SkyWalking FROM Apache SkyWalking 分布式系统的应用程序性能监视工具专为微服务、云原生架构和基于容器Docker、K8s、Mesos架构而设计。 提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。 1.2 功能列表
SkyWalking 有哪些功能 FROM Apache SkyWalking 多种监控手段。可以通过语言探针和 service mesh 获得监控是数据。多个语言自动探针。包括 Java.NET Core 和 Node.JS。轻量高效。无需大数据平台和大量的服务器资源。模块化。UI、存储、集群管理都有多种机制可选。支持告警。优秀的可视化解决方案。 1.3 整体架构
SkyWalking 整体架构如何 FROM Apache SkyWalking 整个架构分成上、下、左、右四部分 考虑到让描述更简单我们舍弃掉 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 官方文档
在 skywalking/docs at master · apache/skywalking · GitHub 地址下提供了 SkyWalking 的英文文档。
考虑到大多数胖友的英语水平和艿艿不相伯仲再加上胖友一开始对 SkyWalking 比较陌生所以比较推荐先阅读 GitHub - SkyAPM/document-cn-translation-of-skywalking: [已过期,请使用官网AI文档] The CN translation version of Apache SkyWalking document 地址提供了 SkyWalking 的中文文档。
考虑到胖友使用 SkyWalking 的目的是实现分布式链路追踪的功能所以最好去了解下相关的知识。这里推荐阅读两篇文章
《OpenTracing 官方标准 —— 中文版》Google 论文 《Dapper大规模分布式系统的跟踪系统》
2. 搭建 SkyWalking 单机环境
考虑到让胖友更快的入门我们来搭建一个 SkyWalking 单机环境步骤如下 第一步搭建一个 Elasticsearch 服务。第二步下载 SkyWalking 软件包。第三步搭建一个 SkyWalking OAP 服务。第四步启动一个 Spring Boot 应用并配置 SkyWalking Agent。第五步搭建一个 SkyWalking UI 服务。
仅仅五步按照艿艿标题党的性格应该给本文取个《10 分钟快速搭建 SkyWalking 服务》标题才对哈哈哈。
2.1 Elasticsearch 搭建 FROM Elasticsearch官方分布式搜索和分析引擎 | Elastic Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎能够解决不断涌现出的各种用例。 作为 Elastic Stack 的核心它集中存储您的数据帮助您发现意料之中以及意料之外的情况。 参考《Elasticsearch 极简入门》的「1. 单机部署」小节搭建一个 Elasticsearch 单机服务。
不过要注意本文使用的是 Elasticsearch 7.5.1 版本。因为 SkyWalking 6.6.0 版本增加了对 Elasticsearch 7.X 版本的支持。当然如果胖友使用 Elasticsearch 6.X 版本也是可以的。
2.2 下载 SkyWalking 软件包
对于 SkyWalking 的软件包有两种方式获取
手动编译官方包
一般情况下我们建议使用官方包。手动编译更多是尝鲜或者等着急修复的 BUG 的版本。
2.2.1 官方包
在 Downloads | Apache SkyWalking 下我们下载操作系统对应的发布版。
这里我们选择 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
$ cd apache-skywalking-apm-bin-es7$ ls -ls4 drwxr-xr-x 8 root root 4096 Sep 9 15:09 agent # SkyWalking Agent4 drwxr-xr-x 2 root root 4096 Sep 9 15:44 bin # 执行脚本4 drwxr-xr-x 2 root root 4096 Sep 9 15:44 config # SkyWalking OAP Server 配置文件
32 -rwxr-xr-x 1 root root 28903 Sep 9 14:32 LICENSE4 drwxr-xr-x 3 root root 4096 Sep 9 15:44 licenses
32 -rwxr-xr-x 1 root root 31850 Sep 9 14:32 NOTICE
16 drwxr-xr-x 2 root root 16384 Sep 9 15:22 oap-libs # SkyWalking OAP Server4 -rw-r--r-- 1 root root 1978 Sep 9 14:32 README.txt4 drwxr-xr-x 2 root root 4096 Sep 9 15:44 webapp # SkyWalking UI2.2.2 手动编译 友情提示如果胖友没有编译 SkyWalking 源码的诉求可以跳过本小节。 参考 How to build project 文章。
需要前置安装如下
GITJDK 8Maven
① 克隆代码
$ git clone https://github.com/apache/skywalking.git因为网络问题可能克隆会有点久。
② 初始化子模块
$ cd skywalking
$ git submodule init
$ git submodule update③ 编译
$ ./mvnw clean package -DskipTests编译过程如果机子比较差花费时间会比较久。
④ 查看编译结果
$ cd apm-dist # 编译结果目录
$ cd target
$ tar -zxvf apache-skywalking-apm-bin.tar.gz # 解压 Linux 包
$ cd apache-skywalking-apm-bin
$ ls -ls4 drwxr-xr-x 8 root root 4096 Sep 9 15:09 agent # SkyWalking Agent4 drwxr-xr-x 2 root root 4096 Sep 9 15:44 bin # 执行脚本4 drwxr-xr-x 2 root root 4096 Sep 9 15:44 config # SkyWalking OAP Server 配置文件
32 -rwxr-xr-x 1 root root 28903 Sep 9 14:32 LICENSE4 drwxr-xr-x 3 root root 4096 Sep 9 15:44 licenses
32 -rwxr-xr-x 1 root root 31850 Sep 9 14:32 NOTICE
16 drwxr-xr-x 2 root root 16384 Sep 9 15:22 oap-libs # SkyWalking OAP Server4 -rw-r--r-- 1 root root 1978 Sep 9 14:32 README.txt4 drwxr-xr-x 2 root root 4096 Sep 9 15:44 webapp # SkyWalking UI2.3 SkyWalking OAP 搭建
① 修改 OAP 配置文件 友情提示如果配置文件适合 SkyWalking 6.X 版本。 $ vi config/application.ymlstorage:elasticsearch7:nameSpace: ${SW_NAMESPACE:elasticsearch}clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200}protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:http}
# trustStorePath: ${SW_SW_STORAGE_ES_SSL_JKS_PATH:../es_keystore.jks}
# trustStorePass: ${SW_SW_STORAGE_ES_SSL_JKS_PASS:}user: ${SW_ES_USER:}password: ${SW_ES_PASSWORD:}indexShardsNumber: ${SW_STORAGE_ES_INDEX_SHARDS_NUMBER:2}indexReplicasNumber: ${SW_STORAGE_ES_INDEX_REPLICAS_NUMBER:0}# Those data TTL settings will override the same settings in core module.recordDataTTL: ${SW_STORAGE_ES_RECORD_DATA_TTL:7} # Unit is dayotherMetricsDataTTL: ${SW_STORAGE_ES_OTHER_METRIC_DATA_TTL:45} # Unit is daymonthMetricsDataTTL: ${SW_STORAGE_ES_MONTH_METRIC_DATA_TTL:18} # Unit is month# Batch process setting, refer to https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-docs-bulk-processor.htmlbulkActions: ${SW_STORAGE_ES_BULK_ACTIONS:1000} # Execute the bulk every 1000 requestsflushInterval: ${SW_STORAGE_ES_FLUSH_INTERVAL:10} # flush the bulk every 10 seconds whatever the number of requestsconcurrentRequests: ${SW_STORAGE_ES_CONCURRENT_REQUESTS:2} # the number of concurrent requestsresultWindowMaxSize: ${SW_STORAGE_ES_QUERY_MAX_WINDOW_SIZE:10000}metadataQueryMaxSize: ${SW_STORAGE_ES_QUERY_MAX_SIZE:5000}segmentQueryMaxSize: ${SW_STORAGE_ES_QUERY_SEGMENT_SIZE:200}
# h2:
# driver: ${SW_STORAGE_H2_DRIVER:org.h2.jdbcx.JdbcDataSource}
# url: ${SW_STORAGE_H2_URL:jdbc:h2:mem:skywalking-oap-db}
# user: ${SW_STORAGE_H2_USER:sa}
# metadataQueryMaxSize: ${SW_STORAGE_H2_QUERY_MAX_SIZE:5000}storage.elasticsearch7 配置项设置使用 Elasticsearch 7.X 版本作为存储器。 这里我们打开注释并记得通过 nameSpace 设置 Elasticsearch 集群名。storage.elasticsearch 配置项设置使用 Elasticsearch 6.X 版本作为存储器。 这里我们无需做任何改动。如果胖友使用 Elasticsearch 6.X 版本作为存储器记得设置这个配置项而不是 storage.elasticsearch7 配置项。storage.h2 配置项设置使用 H2 作为存储器。 这里我们需要手动注释掉因为 H2 是默认配置的存储器。 友情提示如果配置文件适合 SkyWalking 7.X 版本。 重点修改 storage 配置项通过 storage.selector 配置项来设置具体使用的存储器。storage.elasticsearch 配置项设置使用 Elasticsearch 6.X 版本作为存储器。胖友可以主要修改 nameSpace、clusterNodes 两个配置项即可设置使用的 Elasticsearch 的集群和命名空间。storage.elasticsearch7 配置项设置使用 Elasticsearch 7.X 版本作为存储器。还有 MySQL、H2、InfluxDB 等等存储器的配置可以选择胖友自己根据需要去选择哈~
② 启动 SkyWalking OAP 服务
$ bin/oapService.shSkyWalking OAP started successfully!是否真正启动成功胖友打开 logs/skywalking-oap-server.log 日志文件查看是否有错误日志。首次启动时因为 SkyWalking OAP 会创建 Elasticsearch 的索引所以会“疯狂”的打印日志。最终我们看到如下日志基本可以代表 SkyWalking OAP 服务启动成功 友情提示因为首次启动会创建 Elasticsearch 索引所以可能会比较慢。 2020-01-02 18:22:53,635 - org.eclipse.jetty.server.Server - 444 [main] INFO [] - Started 35249ms2.4 SkyWalking UI 搭建
① 启动 SkyWalking UI 服务
bin/webappService.shSkyWalking Web Application started successfully!是否真正启动成功胖友打开 logs/logs/webapp.log 日志文件查看是否有错误日志。最终我们看到如下日志基本可以代表 SkyWalking UI 服务启动成功
2020-01-02 18:27:02.824 INFO 48250 --- [main] o.a.s.apm.webapp.ApplicationStartUp : Started ApplicationStartUp in 7.774 seconds (JVM running for 8.316)如果想要修改 SkyWalking UI 服务的参数可以编辑 webapp/webapp.yml 配置文件。例如说
server.port SkyWalking UI 服务端口。collector.ribbon.listOfServers SkyWalking OAP 服务地址数组。因为 SkyWalking UI 界面的数据是通过请求 SkyWalking OAP 服务来获得的。
② 访问 UI 界面
浏览器打开 http://127.0.0.1:8080 。界面如下图 2.5 SkyWalking Agent
大多数情况下我们在启动项目的 Shell 脚本上通过 -javaagent 参数进行配置 SkyWalking Agent 。我们在 「2.3.1 Shell」 小节来看。
考虑到偶尔我们需要在 IDE 中也希望使用 SkyWalking Agent 所以我们在 「2.3.2 IDEA」 小节来看。
2.3.1 Shell
① Agent 软件包
我们需要将 apache-skywalking-apm-bin/agent 目录拷贝到 Java 应用所在的服务器上。这样Java 应用才可以配置使用该 SkyWalking Agent。我们来看看 Agent 目录下有哪些
$ ls -lstotal 351760 drwxr-xr-x 7 yunai staff 224 Dec 24 14:20 activations0 drwxr-xr-x 4 yunai staff 128 Dec 24 14:21 bootstrap-plugins0 drwxr-xr-x 3 yunai staff 96 Dec 24 14:12 config # SkyWalking Agent 配置0 drwxr-xr-x 3 yunai staff 96 Jan 2 19:29 logs # SkyWalking Agent 日志0 drwxr-xr-x 13 yunai staff 416 Dec 24 14:22 optional-plugins # 可选插件0 drwxr-xr-x 68 yunai staff 2176 Dec 24 14:20 plugins # 插件
35176 -rw-r--r-- 1 yunai staff 18006420 Dec 24 14:12 skywalking-agent.jar # SkyWalking Agent关于 SkyWalking Agent 提供的插件列表可以看看《SkyWalking 文档 —— 插件支持列表》。
因为艿艿是在本机测试所以无需拷贝SkyWalking Agent 目录是 /Users/yunai/skywalking/apache-skywalking-apm-bin-es7/agent/。
考虑到方便胖友艿艿这里提供了一个最简的 Spring Boot 应用 lab-39-demo-2.2.2.RELEASE.jar。对应 Github 仓库是 lab-39-demo。
② 配置 Java 启动脚本
# SkyWalking Agent 配置
export SW_AGENT_NAMEdemo-application # 配置 Agent 名字。一般来说我们直接使用 Spring Boot 项目的 spring.application.name 。
export SW_AGENT_COLLECTOR_BACKEND_SERVICES127.0.0.1:11800 # 配置 Collector 地址。
export SW_AGENT_SPAN_LIMIT2000 # 配置链路的最大 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通过环境变量进行配置。更多的变量可以在 /work/programs/skywalking/apache-skywalking-apm-bin/agent/config/agent.config 查看。要注意可能有些变量是被注释掉的例如说 SW_AGENT_SPAN_LIMIT 对应的 agent.span_limit_per_segment 。
③ 执行脚本
直接执行上述的 Shell 脚本启动 Java 项目。在启动日志中我们可以看到 SkyWalking Agent 被加载的日志。日志示例如下
DEBUG 2020-01-02 19:29:29:400 main AgentPackagePath : The beacon class location is jar:file:/Users/yunai/skywalking/apache-skywalking-apm-bin-es7/agent/skywalking-agent.jar!/org/apache/skywalking/apm/agent/core/boot/AgentPackagePath.class.
INFO 2020-01-02 19:29:29:402 main SnifferConfigInitializer : Config file found in /Users/yunai/skywalking/apache-skywalking-apm-bin-es7/agent/config/agent.config.同时也可以在 /Users/yunai/skywalking/apache-skywalking-apm-bin-es7/agent/agent/logs/skywalking-api.log 查看对应的 SkyWalking Agent 日志。日志示例如下
DEBUG 2020-01-02 19:37:22:539 SkywalkingAgent-5-ServiceAndEndpointRegisterClient-0 ServiceAndEndpointRegisterClient : ServiceAndEndpointRegisterClient running, status:CONNECTED.这里我们看到 status:CONNECTED 表示 SkyWalking Agent 连接 SkyWalking OAP 服务成功。
④ 简单测试
完事可以去 SkyWalking UI 查看是否链路收集成功。
1、首先使用浏览器访问下 http://127.0.0.1:8079/demo/echo 地址请求下 Spring Boot 应用提供的 API。因为我们要追踪下该链路。
2、然后继续使用浏览器打开 http://127.0.0.1:8080/ 地址进入 SkyWalking UI 界面。如下图所示 这里我们会看到 SkyWalking 中非常重要的三个概念 服务(Service) 表示对请求提供相同行为的一系列或一组工作负载。在使用 Agent 或 SDK 的时候你可以定义服务的名字。如果不定义的话SkyWalking 将会使用你在平台例如说 Istio上定义的名字。 这里我们可以看到 Spring Boot 应用的服务为 demo-application就是我们在环境变量 SW_AGENT_NAME 中所定义的。 服务实例(Service Instance) 上述的一组工作负载中的每一个工作负载称为一个实例。就像 Kubernetes 中的 pods 一样, 服务实例未必就是操作系统上的一个进程。但当你在使用 Agent 的时候, 一个服务实例实际就是操作系统上的一个真实进程。 这里我们可以看到 Spring Boot 应用的服务为 {agent_name}-pid:{pid}{hostname}由 Agent 自动生成。关于它我们在「5.1 hostname」小节中有进一步的讲解胖友可以瞅瞅。 端点(Endpoint) 对于特定服务所接收的请求路径, 如 HTTP 的 URI 路径和 gRPC 服务的类名 方法签名。 这里我们可以看到 Spring Boot 应用的一个端点为 API 接口 /demo/echo。
3、之后点击「拓扑图」菜单进入查看拓扑图的界面。如下图所示 4、再之后点击「追踪」菜单进入查看链路数据的界面。如下图所示 2.3.2 IDEA
我们统一使用 IDEA 作为开发 IDE 所以忽略 Eclipse 的配置方式。
具体参考下图比较简单