概述
Skywalking是一個(gè)可觀測(cè)性分析平臺(tái)(Observability Analysis Platform簡(jiǎn)稱OAP)和應(yīng)用性能管理系統(tǒng)(Application Performance Management簡(jiǎn)稱APM)。
提供分布式鏈路追蹤、服務(wù)網(wǎng)格(Service Mesh)遙測(cè)分析、度量(Metric)聚合和可視化一體化解決方案。
架構(gòu)

Skywalking提供Tracing和Metrics數(shù)據(jù)的獲取和聚合:
- Metric的特點(diǎn)是可累加的:他們具有原子性,每個(gè)都是一個(gè)邏輯計(jì)量單元,或者一個(gè)時(shí)間
段內(nèi)的柱狀圖。 例如:隊(duì)列的當(dāng)前深度可以被定義為一個(gè)計(jì)量單元,在寫(xiě)入或讀取時(shí)被更新統(tǒng)計(jì); 輸入HTTP請(qǐng)求的數(shù)量可以被定義為一個(gè)計(jì)數(shù)器,用于簡(jiǎn)單累加; 請(qǐng)求的執(zhí)行時(shí)間可以被定
義為一個(gè)柱狀圖,在指定時(shí)間片上更新和統(tǒng)計(jì)匯總。 - Tracing的最大特點(diǎn)就是在單次請(qǐng)求的范圍內(nèi),處理信息。 任何的數(shù)據(jù)、元數(shù)據(jù)信息都被綁定到系統(tǒng)中的單個(gè)事務(wù)上。 例如:一次調(diào)用遠(yuǎn)程服務(wù)的RPC執(zhí)行過(guò)程;一次實(shí)際的SQL查詢語(yǔ)句;一次HTTP請(qǐng)求的業(yè)務(wù)性ID。
- 總結(jié),Metric主要用來(lái)進(jìn)行數(shù)據(jù)的統(tǒng)計(jì),比如HTTP請(qǐng)求數(shù)的計(jì)算。Tracing主要包含了某一次請(qǐng)求的鏈路數(shù)據(jù)。
部署
接下來(lái)我們?cè)谔摂M機(jī)CentOS中搭建Skywalking的可觀測(cè)性分析平臺(tái)OAP環(huán)境。Skywalking默認(rèn)使用H2內(nèi)存中進(jìn)行數(shù)據(jù)的存儲(chǔ),我們可以替換存儲(chǔ)源為ElasticSearch保證其查詢的高效及可用性。
具體的安裝步驟可以在Skywalking的官方github上找到:
https://github.com/apache/skywalking/blob/master/docs/en/setup/README.md
1、創(chuàng)建目錄
mkdir /usr/local/skywalking
建議將虛擬機(jī)內(nèi)存設(shè)置為8G并且將CPU設(shè)置成4核,防止資源不足。
2、將資源目錄中的elasticsearch和skywalking安裝包上傳到虛擬機(jī)/usr/local/skywalking目錄下。
- elasticsearch-6.4.0.tar.gz ---elasticsearch 6.4的安裝包,Skywalking對(duì)es版本號(hào)有一定要求,最好使用6.3.2以上版本,如果是7.x版本需要額外進(jìn)行配置。
- apache-skywalking-apm-6.5.0.tar.gz ---Skywalking最新的安裝包。
3、首先安裝elasticsearch,將壓縮包解壓。
修改Linux系統(tǒng)的限制配置,將文件創(chuàng)建數(shù)修改為65536個(gè)。
vi /etc/security/limits.conf
#新增如下內(nèi)容在limits.conf文件中
es soft nofile 65536
es hard nofile 65536
es soft nproc 4096
es hard nproc 4096
vi /etc/sysctl.conf
#新增如下內(nèi)容在sysctl.conf文件中,當(dāng)前用戶擁有的內(nèi)存權(quán)限大小 vm.max_map_count=262144
#讓系統(tǒng)控制權(quán)限配置生效 sysctl -p
建一個(gè)用戶, 用于ElasticSearch啟動(dòng)。
ES在5.x版本之后,強(qiáng)制要求在linux中不能使用root用戶啟動(dòng)ES進(jìn)程。所以必須使用其他用戶啟動(dòng)ES進(jìn)程才可以。
#創(chuàng)建用戶 useradd es
#修改上述用戶的密碼
passwd es
#修改elasicsearch目錄的擁有者
chown -R es elasticsearch-6.4.0
使用es用戶啟動(dòng)elasticsearch
#切換用戶
su es
#到ElasticSearch的bin目錄下
cd bin/
#后臺(tái)啟動(dòng)
./elasticsearch -d
默認(rèn)ElasticSearch是不支持跨域訪問(wèn)的,所以在不修改配置文件的情況下我們只能從虛擬機(jī)內(nèi)部進(jìn)行訪問(wèn)測(cè)試ElasticSearch是否安裝成功,使用curl命令訪問(wèn)9200端口:
curl http://localhost:9200
#如果顯示出如下信息,就證明ElasticSearch安裝成功:
{
"name" : "JQP4lam",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "chZRaiKjSLyvs9vHs4Yq4g",
"version" : {
"number" : "6.4.0",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "595516e",
"build_date" : "2018-08-17T23:18:47.308994Z",
"build_snapshot" : false,
"lucene_version" : "7.4.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
4、安裝Skywalking,分為兩個(gè)步驟:
- 安裝Backend后端服務(wù)
- 安裝UI
首先切回到root用戶,切換到目錄下,解壓Skywalking壓縮包。
tar -zxvf apache-skywalking-apm-6.4.0.tar.gz
修改Skywalking存儲(chǔ)的數(shù)據(jù)源配置:
cd apache-skywalking-apm-bin
vi config/application.yml
storage:
elasticsearch:
nameSpace: ${SW_NAMESPACE:""}
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}
啟動(dòng)skywalking的前后端:
bin/startup.sh
SkyWalking OAP started successfully!
SkyWalking Web Application started successfully!
