監控的分類

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
開發者 Twitter 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 Server配置檔案說明

SkyWalking UI指標使用說明

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 服務端