監控的分類
Logging,Metrics和Tracing
- Logging用於記錄離散的事件例如,應用程式的除錯資訊或錯誤資訊,Logging是我們診斷問題的依據。
- Metrics用於記錄可聚合的資料例如,佇列的當前深度可被定義為一個度量值,在元素入隊或出隊時被更新;HTTP請求個數可被定義為一個計數器,新請求到來時進行累加。
- Tracing用於記錄請求範圍內的資訊例如,一次遠端方法呼叫的執行過程和耗時。Tracing是我們排查系統性能問題的利器。
通過以上資訊,可以對已有系統進行分類。
Zipkin,Skywalking等專注於tracing領域;
Prometheus開始專注於metrics,隨著時間推移可能會整合更多的tracing功能,但不太可能深入logging領域;
ELK這樣的系統開始專注於logging領域。
APM工具
現代APM(Application Performance Management/應用效能管理)體系,基本都是參考Google的Dapper(大規模分散式系統的跟蹤系統)的體系來做的。
通過跟蹤請求的處理過程,來對應用系統在前後端處理、服務端呼叫的效能消耗進行跟蹤。
簡介
Zipkin
由Twitter公司開源,開放原始碼分散式的跟蹤系統,用於收集服務的定時資料,以解決微服務架構中的延遲問題,包括:資料的收集、儲存、查詢和展現。
SkyWalking
國產的優秀APM元件,2015年由個人吳晟(華為開發者)開源 ,2017年加入Apache孵化器;是一個對JAVA分散式應用程式叢集的業務執行情況進行追蹤、告警和分析的系統。使用java探針位元組碼增加技術,實現對整個應用的監控 ;對應用零侵入。針對分散式系統的應用效能監控系統,特別針對微服務、cloud native和容器化(Docker, Kubernetes, Mesos)架構, 其核心是個分散式追蹤系統;
CAT
CAT 作為服務端專案基礎元件,提供了 Java, C/C++, Node.js, Python, Go 等多語言客戶端,已經在美團點評的基礎架構中介軟體框架(MVC框架,RPC框架,資料庫框架,快取框架等,訊息佇列,配置系統等)深度整合,為美團點評各業務線提供系統豐富的效能指標、健康狀況、實時告警等。
Spring Cloud Sleuth
Spring Cloud Sleuth 主要功能就是在分散式系統中提供追蹤解決方案,並且相容支援了 zipkin,你只需要在pom檔案中引入相應的依賴即可。
特性
|
Zipkin+Sleuth | SkyWalking | CAT |
---|---|---|
開發者 | Apache | |
實現方式 | 攔截請求,傳送(HTTP,mq)資料至zipkin服務 | java探針,位元組碼增強,配置檔案 |
接入方式 | 基於linkerd或者sleuth方式,引入配置即可 | javaagent位元組碼 |
顆粒度 | 介面級 | 方法 |
traceid查詢 | 支援 | 支援 |
選擇
上面都提供了分散式服務追蹤能力。但是我們業務系統之間呼叫使用dubbo呼叫。且需要TraceId. 所以我們選擇skywalking.
SkyWalking介紹
架構
SkyWalking邏輯上分為四個部分:Probes(探針), Platform backend(平臺後端), Storage(儲存), UI
探針就是Agent負責採集資料並上報給服務端,服務端對資料進行處理和儲存,UI負責展示.
安裝
docker-compose 安裝
version: '3.3'
services:
skywalking-oap:
image: apache/skywalking-oap-server:8.6.0-es7
container_name: skywalking-oap
ports:
- 11800:11800
- 12800:12800
environment:
JAVA_OPTS: " -Xms256M -Xmx1024M"
# es7儲存
SW_STORAGE: elasticsearch7
SW_STORAGE_ES_CLUSTER_NODES: 10.0.11.61:9200
SW_ES_USER: elastic
SW_ES_PASSWORD: xxx
# 健康檢查
SW_HEALTH_CHECKER: default
SW_STORAGE_ES_BULK_ACTIONS: 4000
SW_STORAGE_ES_BULK_SIZE: 40
SW_STORAGE_ES_FLUSH_INTERVAL: 30
SW_STORAGE_ES_CONCURRENT_REQUESTS: 4
SW_STORAGE_ES_QUERY_MAX_SIZE: 8000
SW_TRACE_SAMPLE_RATE: 5000
TZ: Asia/Shanghai
restart: on-failure
skywalking-ui:
image: apache/skywalking-ui:8.6.0
container_name: skywalking-ui
restart: always
depends_on:
- skywalking-oap
ports:
- 8848:8080
environment:
TZ: Asia/Shanghai
SW_OAP_ADDRESS: skywalking-oap:12800
這裡es是採用的 單獨安裝的。因為sw的主要效能瓶頸在es
SkyWalking Server配置檔案說明
SkyWalking UI指標使用說明
Agent配置及使用
將apache-skywalking-apm-bin-es7/agent資料夾拷貝到釋出容器中,位置可以根據情況調整
檔案說明
- config/agent.config:為客戶端代理配置檔案
- logs:SW agent相關執行情況日誌。
- bootstrap-plugins:引導外掛
- optional-plugins:可選外掛
- plugins:內建外掛
- skywalking-agent.jar:agent代理jar包。
[
](https://blog.csdn.net/lizz861109/article/details/107519853)
啟動
-javaagent:D:/agent/skywalking-agent.jar -Dskywalking.agent.service_name=anqiu -Dskywalking.collector.backend_service=localhost:11800
apm-toolkit配置
新增依賴
apm-toolkit
修改log4j2-spring.xml
<Property name="CONSOLE_LOG_PATTERN">${APPNAME} %d{yyyy-MM-dd HH:mm:ss.SSS} [%traceId] %-5level [%t] %c - %msg%xEx%n</Property>
「ps:」 pattern 中的內容按需修改,其中的 %traceId 就是traceId,預設 TID:N/A,當有請求呼叫時會生成並顯示 traceId
效果如下
anqiu-education 2021-08-09 16:39:56.092 [TID: c9104f52d1ad448a9972f65fd37ceed3.107.16284983960320001] INFO [qtp2021051054-107] com.anqiu.HttpAspect - 請求引數ARGS = [*]
總結
「優點」:無需編碼,業務無入侵,可與 SkyWalking 的圖形化介面中使用該ID快速定位各種介面的呼叫關係
「缺點」:強耦合 SkyWalking 才能生效
- 必須新增sk的 javaagent
- 必須部署 SkyWalking 服務端