做電子的外單網(wǎng)站有哪些的交換友情鏈接平臺(tái)
1. 概述
1.1 概念
SkyWalking 是什么?
SkyWalking 極簡(jiǎn)入門 | Apache SkyWalking
FROM?Apache SkyWalking
分布式系統(tǒng)的應(yīng)用程序性能監(jiān)視工具,專為微服務(wù)、云原生架構(gòu)和基于容器(Docker、K8s、Mesos)架構(gòu)而設(shè)計(jì)。
提供分布式追蹤、服務(wù)網(wǎng)格遙測(cè)分析、度量聚合和可視化一體化解決方案。
1.2 功能列表
SkyWalking 有哪些功能?
FROM?Apache SkyWalking
- 多種監(jiān)控手段??梢酝ㄟ^(guò)語(yǔ)言探針和 service mesh 獲得監(jiān)控是數(shù)據(jù)。
- 多個(gè)語(yǔ)言自動(dòng)探針。包括 Java,.NET Core 和 Node.JS。
- 輕量高效。無(wú)需大數(shù)據(jù)平臺(tái),和大量的服務(wù)器資源。
- 模塊化。UI、存儲(chǔ)、集群管理都有多種機(jī)制可選。
- 支持告警。
- 優(yōu)秀的可視化解決方案。
1.3 整體架構(gòu)
SkyWalking 整體架構(gòu)如何?
FROM?Apache SkyWalking
整個(gè)架構(gòu),分成上、下、左、右四部分:
考慮到讓描述更簡(jiǎn)單,我們舍棄掉 Metric 指標(biāo)相關(guān),而著重在 Tracing 鏈路相關(guān)功能。
- 上部分?Agent?:負(fù)責(zé)從應(yīng)用中,收集鏈路信息,發(fā)送給 SkyWalking OAP 服務(wù)器。目前支持 SkyWalking、Zikpin、Jaeger 等提供的 Tracing 數(shù)據(jù)信息。而我們目前采用的是,SkyWalking Agent 收集 SkyWalking Tracing 數(shù)據(jù),傳遞給服務(wù)器。
- 下部分?SkyWalking OAP?:負(fù)責(zé)接收 Agent 發(fā)送的 Tracing 數(shù)據(jù)信息,然后進(jìn)行分析(Analysis Core) ,存儲(chǔ)到外部存儲(chǔ)器( Storage ),最終提供查詢( Query )功能。
- 右部分?Storage?:Tracing 數(shù)據(jù)存儲(chǔ)。目前支持 ES、MySQL、Sharding Sphere、TiDB、H2 多種存儲(chǔ)器。而我們目前采用的是 ES ,主要考慮是 SkyWalking 開(kāi)發(fā)團(tuán)隊(duì)自己的生產(chǎn)環(huán)境采用 ES 為主。
- 左部分?SkyWalking UI?:負(fù)責(zé)提供控臺(tái),查看鏈路等等。
1.4 官方文檔
在?skywalking/docs at master · apache/skywalking · GitHub?地址下,提供了 SkyWalking 的英文文檔。
考慮到大多數(shù)胖友的英語(yǔ)水平和艿艿不相伯仲,再加上胖友一開(kāi)始對(duì) SkyWalking 比較陌生,所以比較推薦先閱讀?GitHub - SkyAPM/document-cn-translation-of-skywalking: [已過(guò)期,請(qǐng)使用官網(wǎng)AI文檔] The CN translation version of Apache SkyWalking document?地址,提供了 SkyWalking 的中文文檔。
考慮到胖友使用 SkyWalking 的目的,是實(shí)現(xiàn)分布式鏈路追蹤的功能,所以最好去了解下相關(guān)的知識(shí)。這里推薦閱讀兩篇文章:
- 《OpenTracing 官方標(biāo)準(zhǔn) —— 中文版》
- Google 論文?《Dapper,大規(guī)模分布式系統(tǒng)的跟蹤系統(tǒng)》
2. 搭建 SkyWalking 單機(jī)環(huán)境
考慮到讓胖友更快的入門,我們來(lái)搭建一個(gè) SkyWalking?單機(jī)環(huán)境,步驟如下:
- 第一步,搭建一個(gè) Elasticsearch 服務(wù)。
- 第二步,下載 SkyWalking 軟件包。
- 第三步,搭建一個(gè) SkyWalking OAP 服務(wù)。
- 第四步,啟動(dòng)一個(gè) Spring Boot 應(yīng)用,并配置 SkyWalking Agent。
- 第五步,搭建一個(gè) SkyWalking UI 服務(wù)。
僅僅五步,按照艿艿標(biāo)題黨的性格,應(yīng)該給本文取個(gè)《10 分鐘快速搭建 SkyWalking 服務(wù)》標(biāo)題才對(duì),哈哈哈。
2.1 Elasticsearch 搭建
FROM?Elasticsearch:官方分布式搜索和分析引擎 | Elastic
Elasticsearch 是一個(gè)分布式、RESTful 風(fēng)格的搜索和數(shù)據(jù)分析引擎,能夠解決不斷涌現(xiàn)出的各種用例。 作為 Elastic Stack 的核心,它集中存儲(chǔ)您的數(shù)據(jù),幫助您發(fā)現(xiàn)意料之中以及意料之外的情況。
參考《Elasticsearch 極簡(jiǎn)入門》的「1. 單機(jī)部署」小節(jié),搭建一個(gè) Elasticsearch 單機(jī)服務(wù)。
不過(guò)要注意,本文使用的是 Elasticsearch?7.5.1
?版本。因?yàn)?SkyWalking?6.6.0?版本,增加了對(duì) Elasticsearch 7.X 版本的支持。當(dāng)然,如果胖友使用 Elasticsearch 6.X 版本也是可以的。
2.2 下載 SkyWalking 軟件包
對(duì)于 SkyWalking 的軟件包,有兩種方式獲取:
- 手動(dòng)編譯
- 官方包
一般情況下,我們建議使用官方包。手動(dòng)編譯,更多是嘗鮮或者等著急修復(fù)的 BUG 的版本。
2.2.1 官方包
在?Downloads | Apache SkyWalking?下,我們下載操作系統(tǒng)對(duì)應(yīng)的發(fā)布版。
這里,我們選擇?Binary Distribution for ElasticSearch 7 (Linux)?版本,因?yàn)檐弟凳?Mac 環(huán)境,再加上想使用 Elasticsearch 7.X 版本作為存儲(chǔ)。如果胖友想用 Elasticsearch 6.X 版本作為存儲(chǔ),記得下載?Binary Distribution (Linux)?版本。
① 下載:
# 創(chuàng)建目錄
$ 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 # 執(zhí)行腳本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 UI
2.2.2 手動(dòng)編譯
友情提示:如果胖友沒(méi)有編譯 SkyWalking 源碼的訴求,可以跳過(guò)本小節(jié)。
參考?How to build project?文章。
需要前置安裝如下:
- GIT
- JDK 8+
- Maven
① 克隆代碼:
$ git clone https://github.com/apache/skywalking.git
- 因?yàn)榫W(wǎng)絡(luò)問(wèn)題,可能克隆會(huì)有點(diǎn)久。
② 初始化子模塊:
$ cd skywalking
$ git submodule init
$ git submodule update
③ 編譯
$ ./mvnw clean package -DskipTests
- 編譯過(guò)程,如果機(jī)子比較差,花費(fèi)時(shí)間會(huì)比較久。
④ 查看編譯結(jié)果
$ cd apm-dist # 編譯結(jié)果目錄
$ 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 # 執(zhí)行腳本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 UI
2.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
?配置項(xiàng),設(shè)置使用 Elasticsearch 7.X 版本作為存儲(chǔ)器。- 這里,我們打開(kāi)注釋,并記得通過(guò)?
nameSpace
?設(shè)置 Elasticsearch 集群名。
- 這里,我們打開(kāi)注釋,并記得通過(guò)?
storage.elasticsearch
?配置項(xiàng),設(shè)置使用 Elasticsearch 6.X 版本作為存儲(chǔ)器。- 這里,我們無(wú)需做任何改動(dòng)。
- 如果胖友使用 Elasticsearch 6.X 版本作為存儲(chǔ)器,記得設(shè)置這個(gè)配置項(xiàng),而不是?
storage.elasticsearch7
?配置項(xiàng)。
storage.h2
?配置項(xiàng),設(shè)置使用 H2 作為存儲(chǔ)器。- 這里,我們需要手動(dòng)注釋掉,因?yàn)?H2 是默認(rèn)配置的存儲(chǔ)器。
友情提示:如果配置文件,適合 SkyWalking 7.X 版本。
- 重點(diǎn)修改?
storage
?配置項(xiàng),通過(guò)?storage.selector
?配置項(xiàng)來(lái)設(shè)置具體使用的存儲(chǔ)器。 storage.elasticsearch
?配置項(xiàng),設(shè)置使用 Elasticsearch 6.X 版本作為存儲(chǔ)器。胖友可以主要修改?nameSpace
、clusterNodes
?兩個(gè)配置項(xiàng)即可,設(shè)置使用的 Elasticsearch 的集群和命名空間。storage.elasticsearch7
?配置項(xiàng),設(shè)置使用 Elasticsearch 7.X 版本作為存儲(chǔ)器。- 還有 MySQL、H2、InfluxDB 等等存儲(chǔ)器的配置可以選擇,胖友自己根據(jù)需要去選擇哈~
② 啟動(dòng) SkyWalking OAP 服務(wù)
$ bin/oapService.shSkyWalking OAP started successfully!
是否真正啟動(dòng)成功,胖友打開(kāi)?logs/skywalking-oap-server.log
?日志文件,查看是否有錯(cuò)誤日志。首次啟動(dòng)時(shí),因?yàn)?SkyWalking OAP 會(huì)創(chuàng)建 Elasticsearch 的索引,所以會(huì)“瘋狂”的打印日志。最終,我們看到如下日志,基本可以代表 SkyWalking OAP 服務(wù)啟動(dòng)成功:
友情提示:因?yàn)槭状螁?dòng)會(huì)創(chuàng)建 Elasticsearch 索引,所以可能會(huì)比較慢。
2020-01-02 18:22:53,635 - org.eclipse.jetty.server.Server - 444 [main] INFO [] - Started @35249ms
2.4 SkyWalking UI 搭建
① 啟動(dòng) SkyWalking UI 服務(wù)
bin/webappService.shSkyWalking Web Application started successfully!
是否真正啟動(dòng)成功,胖友打開(kāi)?logs/logs/webapp.log
?日志文件,查看是否有錯(cuò)誤日志。最終,我們看到如下日志,基本可以代表 SkyWalking UI 服務(wù)啟動(dòng)成功:
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 服務(wù)的參數(shù),可以編輯?webapp/webapp.yml
?配置文件。例如說(shuō):
server.port
?:SkyWalking UI 服務(wù)端口。collector.ribbon.listOfServers
?:SkyWalking OAP 服務(wù)地址數(shù)組。因?yàn)?SkyWalking UI 界面的數(shù)據(jù),是通過(guò)請(qǐng)求 SkyWalking OAP 服務(wù)來(lái)獲得的。
② 訪問(wèn) UI 界面:
瀏覽器打開(kāi)?http://127.0.0.1:8080
?。界面如下圖:
2.5 SkyWalking Agent
大多數(shù)情況下,我們?cè)趩?dòng)項(xiàng)目的 Shell 腳本上,通過(guò)?-javaagent
?參數(shù)進(jìn)行配置 SkyWalking Agent 。我們?cè)?「2.3.1 Shell」?小節(jié)來(lái)看。
考慮到偶爾我們需要在 IDE 中,也希望使用 SkyWalking Agent ,所以我們?cè)?「2.3.2 IDEA」?小節(jié)來(lái)看。
2.3.1 Shell
① Agent 軟件包
我們需要將?apache-skywalking-apm-bin/agent
?目錄,拷貝到 Java 應(yīng)用所在的服務(wù)器上。這樣,Java 應(yīng)用才可以配置使用該 SkyWalking Agent。我們來(lái)看看 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
- 關(guān)于 SkyWalking Agent 提供的插件列表,可以看看《SkyWalking 文檔 —— 插件支持列表》。
因?yàn)檐弟凳窃诒緳C(jī)測(cè)試,所以無(wú)需拷貝,SkyWalking Agent 目錄是?/Users/yunai/skywalking/apache-skywalking-apm-bin-es7/agent/
。
考慮到方便胖友,艿艿這里提供了一個(gè)最簡(jiǎn)的 Spring Boot 應(yīng)用?lab-39-demo-2.2.2.RELEASE.jar。對(duì)應(yīng) Github 倉(cāng)庫(kù)是?lab-39-demo。
② 配置 Java 啟動(dòng)腳本
# SkyWalking Agent 配置
export SW_AGENT_NAME=demo-application # 配置 Agent 名字。一般來(lái)說(shuō),我們直接使用 Spring Boot 項(xiàng)目的 `spring.application.name` 。
export SW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800 # 配置 Collector 地址。
export SW_AGENT_SPAN_LIMIT=2000 # 配置鏈路的最大 Span 數(shù)量。一般情況下,不需要配置,默認(rèn)為 300 。主要考慮,有些新上 SkyWalking Agent 的項(xiàng)目,代碼可能比較糟糕。
export JAVA_AGENT=-javaagent:/Users/yunai/skywalking/apache-skywalking-apm-bin-es7/agent/skywalking-agent.jar # SkyWalking Agent jar 地址。# Jar 啟動(dòng)
java -jar $JAVA_AGENT -jar lab-39-demo-2.2.2.RELEASE.jar
- 通過(guò)環(huán)境變量,進(jìn)行配置。
- 更多的變量,可以在?/work/programs/skywalking/apache-skywalking-apm-bin/agent/config/agent.config?查看。要注意,可能有些變量是被注釋掉的,例如說(shuō)?
SW_AGENT_SPAN_LIMIT
?對(duì)應(yīng)的?agent.span_limit_per_segment
?。
③ 執(zhí)行腳本:
直接執(zhí)行上述的 Shell 腳本,啟動(dòng) Java 項(xiàng)目。在啟動(dòng)日志中,我們可以看到 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.
同時(shí),也可以在?/Users/yunai/skywalking/apache-skywalking-apm-bin-es7/agent/agent/logs/skywalking-api.log
?查看對(duì)應(yīng)的 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 服務(wù)成功。
④ 簡(jiǎn)單測(cè)試
完事,可以去 SkyWalking UI 查看是否鏈路收集成功。
1、首先,使用瀏覽器,訪問(wèn)下?http://127.0.0.1:8079/demo/echo?地址,請(qǐng)求下 Spring Boot 應(yīng)用提供的 API。因?yàn)?#xff0c;我們要追蹤下該鏈路。
2、然后,繼續(xù)使用瀏覽器,打開(kāi)?http://127.0.0.1:8080/?地址,進(jìn)入 SkyWalking UI 界面。如下圖所示:
這里,我們會(huì)看到 SkyWalking 中非常重要的三個(gè)概念:
-
服務(wù)(Service)?:表示對(duì)請(qǐng)求提供相同行為的一系列或一組工作負(fù)載。在使用 Agent 或 SDK 的時(shí)候,你可以定義服務(wù)的名字。如果不定義的話,SkyWalking 將會(huì)使用你在平臺(tái)(例如說(shuō) Istio)上定義的名字。
這里,我們可以看到 Spring Boot 應(yīng)用的服務(wù)為?
"demo-application"
,就是我們?cè)诃h(huán)境變量?SW_AGENT_NAME
?中所定義的。 -
服務(wù)實(shí)例(Service Instance)?:上述的一組工作負(fù)載中的每一個(gè)工作負(fù)載稱為一個(gè)實(shí)例。就像 Kubernetes 中的 pods 一樣, 服務(wù)實(shí)例未必就是操作系統(tǒng)上的一個(gè)進(jìn)程。但當(dāng)你在使用 Agent 的時(shí)候, 一個(gè)服務(wù)實(shí)例實(shí)際就是操作系統(tǒng)上的一個(gè)真實(shí)進(jìn)程。
這里,我們可以看到 Spring Boot 應(yīng)用的服務(wù)為?
{agent_name}-pid:{pid}@{hostname}
,由 Agent 自動(dòng)生成。關(guān)于它,我們?cè)凇?.1 hostname」小節(jié)中,有進(jìn)一步的講解,胖友可以瞅瞅。 -
端點(diǎn)(Endpoint)?:對(duì)于特定服務(wù)所接收的請(qǐng)求路徑, 如 HTTP 的 URI 路徑和 gRPC 服務(wù)的類名 + 方法簽名。
這里,我們可以看到 Spring Boot 應(yīng)用的一個(gè)端點(diǎn),為 API 接口?
/demo/echo
。
3、之后,點(diǎn)擊「拓?fù)鋱D」菜單,進(jìn)入查看拓?fù)鋱D的界面。如下圖所示:
4、再之后,點(diǎn)擊「追蹤」菜單,進(jìn)入查看鏈路數(shù)據(jù)的界面。如下圖所示:
2.3.2 IDEA
我們統(tǒng)一使用 IDEA 作為開(kāi)發(fā) IDE ,所以忽略 Eclipse 的配置方式。
具體參考下圖,比較簡(jiǎn)單: