1.什么是 Skywalking
Skywalking 是一個APM系統,即應用性能監控系統,為微服務架構和雲原生架構系統設計。它通過探針自動收集所需的指標,並進行分布式追蹤。通過這些調用鏈路以及指標,Skywalking APM會感知應用間關系和服務間關系,並進行相應的指標統計。目前支持鏈路追蹤和監控應用組件如下,基本涵蓋主流框架和容器,如國產PRC Dubbo和motan等,國際化的spring boot,spring cloud都支持了
skywalaking 分為三部分:
- skywalking-collector:鏈路數據歸集器,數據可以落地 Elasticsearch,單機也可以落地H2,不推薦,H2僅作為臨時演示用
- skywalking-web:web可視化平台,用來展示落地的數據
- skywalking-agent:探針,用來收集和發送數據到歸集器
3.Skywalking 的版本選擇
Skywalking 目前的支持版本有 5.0.0-GA 、6.0.0-GA 和 6.1.0 版本,各個版本支持的 Elasticsearch 版本不同,對應的版本如下:
Skywalking 版本 |
JDK 版本 |
Elasticsearch 版本 |
下載地址 |
5.0.0-GA |
jdk8+ |
5.x |
|
6.0.0-GA |
jdk8+ |
6.x |
|
6.1.0 |
jdk8+ |
6.x |
如果下載地址無效,可以到 Skywalking 的官網地址下載,http://skywalking.apache.org/
4.Skywalking 的下載安裝
由於我本地系統是 Centos 7 ,本地環境安裝的 Elasticsearch 是 6.7.2 版本,因此我可以選擇 6.0.0-GA 或 6.1.0 版本,我這里選擇的是 6.1.0 版本,下載 Skywalking 很簡單,只需要執行 wget 命令,如下:
$> wget http://mirror.bit.edu.cn/apache/skywalking/6.1.0/apache-skywalking-apm-6.1.0.tar.gz
下載完成后,我們進行解壓到 /opt 目錄下
$> tar -xvf apache-skywalking-apm-6.1.0.tar.gz -C /opt
解壓完成后,接下來需要進行 Skywalking 的相關配置
4.1 Skywalking collector 配置
collector 鏈路數據歸集器,主要用於數據落地,我這里需要配置落地數據為 Elasticsearch 6.7.2,collector 配置文件為 /opt/apache-skywalking-apm-6.1.0/config/application.yml,配置單點的 collector 配置如下:
cluster:
standalone:
core:
default:
# Mixed: Receive agent data, Level 1 aggregate, Level 2 aggregate
# Receiver: Receive agent data, Level 1 aggregate
# Aggregator: Level 2 aggregate
role: ${SW_CORE_ROLE:Mixed} # Mixed/Receiver/Aggregator
# rest 服務地址和端口
restHost: ${SW_CORE_REST_HOST:localhost}
restPort: ${SW_CORE_REST_PORT:12800}
restContextPath: ${SW_CORE_REST_CONTEXT_PATH:/}
# gRPC 服務地址和端口
gRPCHost: ${SW_CORE_GRPC_HOST:localhost}
gRPCPort: ${SW_CORE_GRPC_PORT:11800}
downsampling:
- Hour
- Day
- Month
# 設置度量數據的超時。超時過期后,度量數據將自動刪除.
# 單位分鍾
recordDataTTL: ${SW_CORE_RECORD_DATA_TTL:90}
# 單位分鍾
minuteMetricsDataTTL: ${SW_CORE_MINUTE_METRIC_DATA_TTL:90}
# 單位小時
hourMetricsDataTTL: ${SW_CORE_HOUR_METRIC_DATA_TTL:36}
# 單位天
dayMetricsDataTTL: ${SW_CORE_DAY_METRIC_DATA_TTL:45}
# 單位月
monthMetricsDataTTL: ${SW_CORE_MONTH_METRIC_DATA_TTL:18}
storage:
elasticsearch:
# elasticsearch 的集群名稱
nameSpace: ${SW_NAMESPACE:"local-ES"}
# elasticsearch 集群節點的地址及端口
clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:192.168.2.10:9200}
# elasticsearch 的用戶名和密碼
user: ${SW_ES_USER:""}
password: ${SW_ES_PASSWORD:""}
# 設置 elasticsearch 索引分片數量
indexShardsNumber: ${SW_STORAGE_ES_INDEX_SHARDS_NUMBER:2}
# 設置 elasticsearch 索引副本數
indexReplicasNumber: ${SW_STORAGE_ES_INDEX_REPLICAS_NUMBER:0}
# 批量處理配置
# 每2000個請求執行一次批量
bulkActions: ${SW_STORAGE_ES_BULK_ACTIONS:2000}
# 每 20mb 刷新一次內存塊
bulkSize: ${SW_STORAGE_ES_BULK_SIZE:20}
# 無論請求的數量如何,每10秒刷新一次堆
flushInterval: ${SW_STORAGE_ES_FLUSH_INTERVAL:10}
# 並發請求的數量
concurrentRequests: ${SW_STORAGE_ES_CONCURRENT_REQUESTS:2}
# elasticsearch 查詢的最大數量
metadataQueryMaxSize: ${SW_STORAGE_ES_QUERY_MAX_SIZE:5000}
# elasticsearch 查詢段最大數量
segmentQueryMaxSize: ${SW_STORAGE_ES_QUERY_SEGMENT_SIZE:200}
4.2 Skywalking webApp 配置
Skywalking 的 WebApp 主要是用來展示落地的數據,因此只需要配置 Web 的端口及獲取數據的 collector 的IP和端口,webApp 配置文件地址為 /opt/apache-skywalking-apm-6.1.0/webapp/webapp.yml 配置如下:
server:
port: 9000
collector:
path: /graphql
ribbon:
ReadTimeout: 10000
# 指向所有后端collector 的 restHost:restPort 配置,多個使用 , 分隔
listOfServers: localhost:12800
security:
user:
# username
admin:
# password
password: admin
4.3 Skywalking Agent 配置
Skywalking 的 Agent 主要用於收集和發送數據到 collector ,因此需要進行配置 Skywalking collector 的地址,Agent 的配置文件地址為 /opt/apache-skywalking-apm-6.1.0/agent/config/agent.config,配置如下:
# 設置Agent命名空間
agent.namespace=${SW_AGENT_NAMESPACE:default-namespace}
# 設置服務名稱,會在 Skywalking UI 上顯示的名稱
agent.service_name=${SW_AGENT_NAME:Your_ApplicationName}
# 每 3秒采集的樣本跟蹤比例,如果是負數則表示 100%采集
agent.sample_n_per_3_secs=${SW_AGENT_SAMPLE:-1}
# 啟用 Debug ,如果為 true 則將把所有檢測到的類文件保存在"/debug"文件夾中
# agent.is_open_debugging_class = ${SW_AGENT_OPEN_DEBUG:true}
# 后端的 collector 端口及地址
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:192.168.2.215:11800}
# 日志級別
logging.level=${SW_LOGGING_LEVEL:DEBUG}
5 示例項目
創建一個 spring boot 項目,增加一個簡單的 RestConstroller 控制器,提供一個 rest 服務,代碼如下:
@RestController
public class HelloWorldController{
@RequestMapping(path={"/","/index"},produces=MediaType.APPLICATION_JSON_UTF8_VALUE)
public Map<String,Object> index(){
Map<String,Object> map=new LinkedHashMap<>();
map.put("A","a");
map.put("b",newBigDecimal("1.2"));
return map;
}
}
復制 /opt/apache-skywalking-apm-6.1.0/agent 目錄到項目的 target 目錄中,增加 VM options 參數 -javaagent 並指向到 agent\skywalking-agent.jar ,如下圖:
啟動項目進行測試,請通過瀏覽器訪問 rest 服務,然后訪問 skywalking web 可以查詢到剛才的訪問。