This is an automated email from the ASF dual-hosted git repository. tanjian pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/skywalking-website.git
The following commit(s) were added to refs/heads/master by this push: new ac40bbc blog:add skywalking quick start.md (#90) ac40bbc is described below commit ac40bbcbd6915f94068e1c20099c4b1a68e456ec Author: 芋道源码 <zhijiantia...@gmail.com> AuthorDate: Sat Apr 18 23:15:47 2020 -0500 blog:add skywalking quick start.md (#90) * * add md '2018-12-21-SkyWalking-source-code-read' * * revert package-lock.json * * remove blank space * * remove repeat “源码” * blog:add skywalking quick start.md --- docs/zh/blog/2020-04-19-skywalking-quick-start.md | 444 ++++++++++++++++++++++ docs/zh/blog/README.md | 5 + 2 files changed, 449 insertions(+) diff --git a/docs/zh/blog/2020-04-19-skywalking-quick-start.md b/docs/zh/blog/2020-04-19-skywalking-quick-start.md new file mode 100644 index 0000000..cc26bce --- /dev/null +++ b/docs/zh/blog/2020-04-19-skywalking-quick-start.md @@ -0,0 +1,444 @@ +目录: + +- [1. 概述](#) +- [2. 搭建 SkyWalking 单机环境](#) +- [3. 搭建 SkyWalking 集群环境](#) +- [4. 告警](#) +- [5. 注意事项](#) +- [6. Spring Boot 使用示例](#) +- [6. Spring Cloud 使用示例](#) + +> - 作者:[芋道源码](https://github.com/YunaiV) +> - [原文地址](http://www.iocoder.cn/SkyWalking/install/?skywalkinng) + + +# 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/> +> +> ![架构图](http://static.iocoder.cn/2d559e500ea828b2922ea75768d576a7) + +整个架构,分成上、下、左、右四部分: + +> 考虑到让描述更简单,我们舍弃掉 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 官方标准 —— 中文版》](https://github.com/opentracing-contrib/opentracing-specification-zh) +* Google 论文 [《Dapper,大规模分布式系统的跟踪系统》](http://www.iocoder.cn/Fight/Dapper-translation/?self) + +# 2. 搭建 SkyWalking 单机环境 + +考虑到让胖友更快的入门,我们来搭建一个 SkyWalking **单机**环境,步骤如下: + +![SkyWalking 单机环境](http://www.iocoder.cn/images/SkyWalking/2017-01-01/07.png) + +* 第一步,搭建一个 Elasticsearch 服务。 +* 第二步,下载 SkyWalking 软件包。 +* 第三步,搭建一个 SkyWalking OAP 服务。 +* 第四步,启动一个 Spring Boot 应用,并配置 SkyWalking Agent。 +* 第五步,搭建一个 SkyWalking UI 服务。 + +仅仅五步,按照艿艿标题党的性格,应该给本文取个《10 分钟快速搭建 SkyWalking 服务》标题才对,哈哈哈。 + +## 2.1 Elasticsearch 搭建 + +> FROM <https://www.elastic.co/cn/products/elasticsearch> +> +> Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。 作为 Elastic Stack 的核心,它集中存储您的数据,帮助您发现意料之中以及意料之外的情况。 + +参考[《Elasticsearch 极简入门》](http://www.iocoder.cn/Elasticsearch/install/?self)的[「1. 单机部署」](#)小节,搭建一个 Elasticsearch 单机服务。 + +不过要**注意**,本文使用的是 Elasticsearch `7.5.1` 版本。因为 SkyWalking [`6.6.0`](https://github.com/apache/skywalking/releases/tag/v6.6.0) 版本,增加了对 Elasticsearch 7.X 版本的支持。当然,如果胖友使用 Elasticsearch 6.X 版本也是可以的。 + +## 2.2 下载 SkyWalking 软件包 + +对于 SkyWalking 的软件包,有两种方式获取: +* 手动编译 +* 官方包 + +一般情况下,我们建议使用**官方包**。手动编译,更多是尝鲜或者等着急修复的 BUG 的版本。 + +### 2.2.1 官方包 + +在 <http://skywalking.apache.org/downloads/> 下,我们下载**操作系统**对应的发布版。 + +这里,我们选择 [Binary Distribution for ElasticSearch 7 (Linux)](https://www.apache.org/dyn/closer.cgi/skywalking/6.6.0/apache-skywalking-apm-es7-6.6.0.tar.gz) 版本,因为艿艿是 Mac 环境,再加上想使用 Elasticsearch 7.X 版本作为存储。如果胖友想用 Elasticsearch 6.X 版本作为存储,记得下载 [Binary Distribution (Linux)](https://www.apache.org/dyn/closer.cgi/skywalking/6.6.0/apache-skywalking-apm-6.6.0.tar.gz) 版本。 + +**① 下载**: + +```shell +# 创建目录 +$ 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 +``` + +**② 解压**: + +```shell +# 解压 +$ tar -zxvf apache-skywalking-apm-es7-6.6.0.tar.gz +$ cd apache-skywalking-apm-bin-es7 + +$ ls -ls + 4 drwxr-xr-x 8 root root 4096 Sep 9 15:09 agent # SkyWalking Agent + 4 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 LICENSE + 4 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 Server + 4 -rw-r--r-- 1 root root 1978 Sep 9 14:32 README.txt + 4 drwxr-xr-x 2 root root 4096 Sep 9 15:44 webapp # SkyWalking UI +``` + +### 2.2.2 手动编译 + +> 友情提示:如果胖友没有编译 SkyWalking 源码的诉求,可以跳过本小节。 + +参考 [How to build project](https://github.com/apache/skywalking/blob/v6.3.0/docs/en/guides/How-to-build.md) 文章。 + +需要前置安装如下: +* GIT +* JDK 8+ +* Maven + +**① 克隆代码**: + +```shell +$ git clone https://github.com/apache/skywalking.git +``` +* 因为网络问题,可能克隆会有点久。 + +**② 初始化子模块**: + +```shell +$ cd skywalking +$ git submodule init +$ git submodule update +``` + +**③ 编译** + +```shell +$ ./mvnw clean package -DskipTests +``` +* 编译过程,如果机子比较差,花费时间会比较久。 + +**④ 查看编译结果** + +```shell +$ cd apm-dist # 编译结果目录 +$ cd target +$ tar -zxvf apache-skywalking-apm-bin.tar.gz # 解压 Linux 包 +$ cd apache-skywalking-apm-bin +$ ls -ls + 4 drwxr-xr-x 8 root root 4096 Sep 9 15:09 agent # SkyWalking Agent + 4 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 LICENSE + 4 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 Server + 4 -rw-r--r-- 1 root root 1978 Sep 9 14:32 README.txt + 4 drwxr-xr-x 2 root root 4096 Sep 9 15:44 webapp # SkyWalking UI +``` + +## 2.3 SkyWalking OAP 搭建 + +**① 修改 OAP 配置文件** + +> 友情提示:如果配置文件,适合 SkyWalking 6.X 版本。 + +```YAML +$ vi config/application.yml + +storage: + 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 day + otherMetricsDataTTL: ${SW_STORAGE_ES_OTHER_METRIC_DATA_TTL:45} # Unit is day + monthMetricsDataTTL: ${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.html + bulkActions: ${SW_STORAGE_ES_BULK_ACTIONS:1000} # Execute the bulk every 1000 requests + flushInterval: ${SW_STORAGE_ES_FLUSH_INTERVAL:10} # flush the bulk every 10 seconds whatever the number of requests + concurrentRequests: ${SW_STORAGE_ES_CONCURRENT_REQUESTS:2} # the number of concurrent requests + resultWindowMaxSize: ${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 版本。 + +![配置文件](http://www.iocoder.cn/images/SkyWalking/2017-01-01/08.png) + +* 重点修改 `storage` 配置项,通过 `storage.selector` 配置项来设置具体使用的存储器。 +* `storage.elasticsearch` 配置项,设置使用 Elasticsearch 6.X 版本作为存储器。胖友可以主要修改 `nameSpace`、`clusterNodes` 两个配置项即可,设置使用的 Elasticsearch 的集群和命名空间。 +* `storage.elasticsearch7` 配置项,设置使用 Elasticsearch 7.X 版本作为存储器。 +* 还有 MySQL、H2、InfluxDB 等等存储器的配置可以选择,胖友自己根据需要去选择哈~ + +**② 启动 SkyWalking OAP 服务** + +```Bash +$ bin/oapService.sh + +SkyWalking OAP started successfully! +``` + +是否**真正**启动成功,胖友打开 `logs/skywalking-oap-server.log` 日志文件,查看是否有错误日志。首次启动时,因为 SkyWalking OAP 会创建 Elasticsearch 的索引,所以会“疯狂”的打印日志。最终,我们看到如下日志,基本可以代表 SkyWalking OAP 服务启动成功: + +> 友情提示:因为首次启动会创建 Elasticsearch 索引,所以可能会比较慢。 + +```Java +2020-01-02 18:22:53,635 - org.eclipse.jetty.server.Server - 444 [main] INFO [] - Started @35249ms +``` + +## 2.4 SkyWalking UI 搭建 + +**① 启动 SkyWalking UI 服务** + +```shell +bin/webappService.sh + +SkyWalking Web Application started successfully! +``` + +是否**真正**启动成功,胖友打开 `logs/logs/webapp.log` 日志文件,查看是否有错误日志。最终,我们看到如下日志,基本可以代表 SkyWalking UI 服务启动成功: + +```Java +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` 。界面如下图:![SkyWalking UI](http://www.iocoder.cn/images/SkyWalking/2017-01-01/01.png) + +## 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 目录下有哪些: + +```Bash +$ ls -ls + +total 35176 + 0 drwxr-xr-x@ 7 yunai staff 224 Dec 24 14:20 activations + 0 drwxr-xr-x@ 4 yunai staff 128 Dec 24 14:21 bootstrap-plugins + 0 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 文档 —— 插件支持列表》](https://github.com/SkyAPM/document-cn-translation-of-skywalking/blob/master/docs/zh/master/setup/service-agent/java-agent/Supported-list.md)。 + +因为艿艿是在本机测试,所以无需拷贝,SkyWalking Agent 目录是 `/Users/yunai/skywalking/apache-skywalking-apm-bin-es7/agent/`。 + +考虑到方便胖友,艿艿这里提供了一个最简的 Spring Boot 应用 [lab-39-demo-2.2.2.RELEASE.jar](http://static.iocoder.cn/lab-39-demo-2.2.2.RELEASE.jar)。对应 Github 仓库是 [lab-39-demo](https://github.com/YunaiV/SpringBoot-Labs/tree/master/lab-39/lab-39-demo)。 + +**② 配置 Java 启动脚本** + +```Bash +# 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 +``` +* 通过环境变量,进行配置。 +* 更多的变量,可以在 [`/work/programs/skywalking/apache-skywalking-apm-bin/agent/config/agent.config`](https://github.com/apache/skywalking/blob/master/apm-sniffer/config/agent.config) 查看。要注意,可能有些变量是被注释掉的,例如说 `SW_AGENT_SPAN_LIMIT` 对应的 `agent.span_limit_per_segment` 。 + +**③ 执行脚本:** + +直接执行上述的 Shell 脚本,启动 Java 项目。在启动日志中,我们可以看到 SkyWalking Agent 被加载的日志。日志示例如下: + +```Java +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 日志。日志示例如下: + +```Java +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 UI 界面 —— 仪表盘](http://www.iocoder.cn/images/SkyWalking/2017-01-01/02.png) + +这里,我们会看到 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、之后,点击「拓扑图」菜单,进入查看拓扑图的界面。如下图所示:![SkyWalking UI 界面 —— 拓扑图](http://www.iocoder.cn/images/SkyWalking/2017-01-01/03.png) + +4、再之后,点击「追踪」菜单,进入查看链路数据的界面。如下图所示:![SkyWalking UI 界面 —— 追踪](http://www.iocoder.cn/images/SkyWalking/2017-01-01/04.png) + +### 2.3.2 IDEA + +我们统一使用 IDEA 作为开发 IDE ,所以忽略 Eclipse 的配置方式。 + +具体参考下图,比较简单:![IDEA 界面](http://www.iocoder.cn/images/SkyWalking/2017-01-01/05.png) + +# 3. 搭建 SkyWalking 集群环境 + +在生产环境下,我们一般推荐搭建 SkyWalking 集群环境。😈 当然,如果公司比较抠门,也可以在生产环境下使用 SkyWalking 单机环境,毕竟 SkyWalking 挂了之后,不影响业务的正常运行。 + +搭建一个 SkyWalking **集群**环境,步骤如下: + +* 第一步,搭建一个 Elasticsearch 服务的**集群**。 +* 第二步,搭建一个注册中心的**集群**。目前 SkyWalking 支持 Zookeeper、Kubernetes、Consul、Nacos 作为注册中心。 +* 第三步,搭建一个 SkyWalking OAP 服务的**集群**,同时参考[《SkyWalking 文档 —— 集群管理》](https://github.com/SkyAPM/document-cn-translation-of-skywalking/blob/master/docs/zh/master/setup/backend/backend-cluster.md),将 SkyWalking OAP 服务注册到注册中心上。 +* 第四步,启动一个 Spring Boot 应用,并配置 SkyWalking Agent。另外,在设置 SkyWaling Agent 的 `SW_AGENT_COLLECTOR_BACKEND_SERVICES` 地址时,需要设置多个 SkyWalking OAP 服务的地址数组。 +* 第五步,搭建一个 SkyWalking UI 服务的**集群**,同时使用 Nginx 进行负载均衡。另外,在设置 SkyWalking UI 的 `collector.ribbon.listOfServers` 地址时,也需要设置多个 SkyWalking OAP 服务的地址数组。 + +😈 具体的搭建过程,并不复杂,胖友自己去尝试下。 + +# 4. 告警 + +在 SkyWaling 中,已经提供了告警功能,具体可见[《SkyWalking 文档 —— 告警》](https://github.com/SkyAPM/document-cn-translation-of-skywalking/blob/master/docs/zh/master/setup/backend/backend-alarm.md)。 + +默认情况下,SkyWalking 已经[内置告警规则](https://github.com/SkyAPM/document-cn-translation-of-skywalking/blob/master/docs/zh/master/setup/backend/backend-alarm.md#%E9%BB%98%E8%AE%A4%E5%91%8A%E8%AD%A6%E8%A7%84%E5%88%99)。同时,我们可以参考[告警规则](https://github.com/SkyAPM/document-cn-translation-of-skywalking/blob/master/docs/zh/master/setup/backend/backend-alarm.md#%E8%A7%84%E5%88%99),进行自定义。 + +在满足 SkyWalking 告警规则的触发规则时,我们在 SkyWaling UI 的告警界面,可以看到告警内容。如下图所示:![SkyWaling UI 界面 —— 告警](http://www.iocoder.cn/images/SkyWalking/2017-01-01/06.png) + +同时,我们自定义 [Webhook](https://github.com/SkyAPM/document-cn-translation-of-skywalking/blob/master/docs/zh/master/setup/backend/backend-alarm.md#webhook) ,对接 SkyWalking 的告警请求。而具体的邮箱、钉钉等告警方式,需要自己进行开发。至于自定义 WebHook 如何实现,可以参考: +* Java 语言: + * [《基于 SkyWalking 的分布式跟踪系统 - 异常告警》](http://www.iocoder.cn/Fight/Distributed-tracking-system-based-on-SkyWalking-abnormal-alert/?self) +* Go 语言: + * [dingding-notify-for-skywalking](https://github.com/yanmaipian/dingding-notify-for-skywalking) + * [infra-skywalking-webhook](https://github.com/weiqiang333/infra-skywalking-webhook) + +# 5. 注意事项 + +## 5.1 hostname 配置 + +在 SkyWalking 中,每个被监控的实例的名字,会包含 hostname 。格式为:`{agent_name}-pid:{pid}@{hostname}` ,例如说:`"scrm-scheduler-pid:27629@iZbp1e2xlyvr7fh67qi59oZ"` 。 + +因为有些服务器未正确设置 `hostname` ,所以我们一定要去修改,不然都不知道是哪个服务器上的实例(😈 鬼知道 `"iZbp1e2xlyvr7fh67qi59oZ"` 一串是哪个服务器啊)。 + +修改方式如下: + +**1、修改 `/etc/hosts` 的 `hostname`** : + +```Bash +127.0.0.1 localhost +::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 +10.80.62.151 pre-app-01 # 就是这个,其中 10.80.62.151 是本机内网 IP ,pre-app-01 是 hostname 。 +``` + +**2、修改本机 `hostname`** : + +参考 [《CentOS7 修改主机名(hostname)》](https://yq.aliyun.com/articles/427296) + +```Bash +$ hostname pre-app-01 # 其中 pre-app-01 就是你希望的 hostname 。 + +$ hostnamectl set-hostname pre-app-01 # 其中 pre-app-01 就是你希望的 hostname 。 +``` + +# 6. Spring Boot 使用示例 + +在 [《芋道 Spring Boot 链路追踪 SkyWalking 入门》](http://www.iocoder.cn/Spring-Boot/SkyWalking/?self) 中,我们来详细学习如何在 Spring Boot 中,整合并使用 SkyWalking 收集链路数据。😈 相比[「2.5 SkyWaling Agent」](#)来说,我们会提供更加丰富的示例哟。 + +# 7. Spring Cloud 使用示例 + +在 [《芋道 Spring Cloud 链路追踪 SkyWalking 入门》](http://www.iocoder.cn/Spring-Cloud/SkyWalking/?self) 中,我们来详细学习如何在 Spring Cloud 中,整合并使用 SkyWalking 收集链路数据。😈 相比[「2.5 SkyWaling Agent」](#)来说,我们会提供更加丰富的示例哟。 + +# 666. 彩蛋 + +本文仅仅是简单的 SkyWalking 入门文章,如果胖友想要更好的使用 SkyWalking,推荐通读下[《SkyWalking 文档》](https://github.com/SkyAPM/document-cn-translation-of-skywalking)。 + +想要进一步深入的胖友,也可以阅读如下资料: +* [《SkyWalking 源码解析》](http://www.iocoder.cn/categories/SkyWalking/?self) +* [《APM 巅峰对决:Apache Skywalking P.K. Pinpoint》](http://www.iocoder.cn/Fight/APM-Apache-Skywalking-and-Pinpoint/?self) +* [《SkyWalking 官方 —— 博客合集》](http://skywalking.apache.org/zh/blog/) + +😈 最后弱弱的问一句,上完 SkyWaling 之后,有没发现自己系统各种地方慢慢慢!嘻嘻。 diff --git a/docs/zh/blog/README.md b/docs/zh/blog/README.md index cf5103d..aca3c3d 100644 --- a/docs/zh/blog/README.md +++ b/docs/zh/blog/README.md @@ -2,6 +2,11 @@ layout: LayoutBlog blog: +- title: SkyWalking 极简入门 + name: 2020-04-19-skywalking-quick-start + time: 芋道源码,4月19日,2020 + short: 从 0 开始入门 SkyWalking,搭建 SkyWalking 服务,并接入 Java 项目中实现分布式链路追踪 + - title: 在线代码级性能剖析,补全分布式追踪的最后一块“短板” name: 2020-03-23-using-profiling-to-fix-the-blind-spot-of-distributed-tracing time: 吴晟,刘晗,3月23日,2020