監控的分類
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包。
啟動
-javaagent:D:/agent/skywalking-agent.jar -Dskywalking.agent.service_name=anqiu -Dskywalking.collector.backend_service=localhost:11800
apm-toolkit配置
添加依賴
compile 'org.apache.skywalking:apm-toolkit-log4j-2.x:8.6.0'
修改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 服務端