Apache Skywalking操作指南
一、簡介
SkyWalking 是針對分布式系統(tǒng)的APM(應用性能監(jiān)控)系統(tǒng)券躁,特別針對微服務、cloud native 和容器化(Docker, Kubernetes, Mesos)架構掉盅, 其核心是個分布式追蹤系統(tǒng)也拜。它通過探針自動收集所需的指標,且基于探針技術對應用零侵入零耦合趾痘。主要提供以下功能:
- 服務慢哈、服務實例和端點(如:單個HTTP URI)的性能指標分析
- 根本原因分析
- 服務拓撲圖分析
- 服務和端點依賴分析
- 慢服務和慢端點檢測
- 分布式追蹤和上下文傳播
- 告警
總體架構
- collector:鏈路數(shù)據(jù)歸集器,數(shù)據(jù)可以落地MySQL永票、ElasticSearch卵贱、TiDB、H2等
- agent:探針侣集,使用Javaagent做字節(jié)碼植入键俱,無侵入式的收集,并通過HTTP或者gRPC方式發(fā)送數(shù)據(jù)collector
- web:web可視化平臺世分,用來展示落地的數(shù)據(jù)
二编振、安裝與配置
SkyWalking官網(wǎng)下載 (安裝教程很簡單,自行度娘臭埋,不贅述)
SkyWalking 項目集成指南
- 將skywalking 的agent包拷貝到任意目錄(如:/data)
- 啟動java進程時增加
-javaagent:/data/agent/skywalking-agent.jar -Dskywalking.agent.service_name=項目名稱
加載agent - 可以修改配置忽略對eureka踪央、redisson等的心跳檢查鏈路追蹤
a.從 /agent/optional-plugins/apm-trace-ignore-plugin-7.0.0.jar 復制到 /agent/plugins
b.在agent/config目錄添加文件 apm-trace-ignore-plugin.configtrace.ignore_path=Redisson/CLUSTER, /eureka/apps/**, Mysql/JDBI/PreparedStatement/**
agent目錄結(jié)構
三臀玄、概念說明
skywalking各項指標說明
全局指標
- all_p99, 所有服務響應時間的 p99 值
- all_p95
- all_p90
- all_p75
- all_p70
- all_heatmap, 所有服務響應時間的熱點圖
服務指標
- service_resp_time, 服務的平均響應時間
- service_sla, 服務的成功率
- service_cpm, 服務每分鐘調(diào)用次數(shù)
- service_p99, 服務響應時間的 p99 值
- service_p95
- service_p90
- service_p75
- service_p50
服務實例指標
- service_instance_sla, 服務實例的成功率
- service_instance_resp_time, 服務實例的平均響應時間
- service_instance_cpm, 服務實例每分鐘調(diào)用次數(shù)
端點指標
- endpoint_cpm, 端點每分鐘調(diào)用次數(shù)
- endpoint_avg, 端點平均響應時間
- endpoint_sla, 端點成功率
- endpoint_p99, 端點響應時間的 p99 值
- endpoint_p95
- endpoint_p90
- endpoint_p75
- endpoint_p50
JVM指標
- instance_jvm_cpu
- instance_jvm_memory_heap
- instance_jvm_memory_noheap
- instance_jvm_memory_heap_max
- instance_jvm_memory_noheap_max
- instance_jvm_young_gc_time
- instance_jvm_old_gc_time
- instance_jvm_young_gc_count
- instance_jvm_old_gc_count
服務關系指標
- service_relation_client_cpm, 在客戶端每分鐘檢測到的調(diào)用次數(shù)
- service_relation_server_cpm, 在服務端每分鐘檢測到的調(diào)用次數(shù)
- service_relation_client_call_sla, 在客戶端檢測到的成功率
- service_relation_server_call_sla, 在服務端檢測到的成功率
- service_relation_client_resp_time, 在客戶端檢測到的平均響應時間
- service_relation_server_resp_time, 在服務端檢測到的平均響應時間
端點關系指標
- endpoint_relation_cpm
- endpoint_relation_resp_time
其他關鍵指標
CPM:每分鐘請求調(diào)用的次數(shù)
SLA:網(wǎng)站服務可用性(主要是通過請求成功與失敗次數(shù)來計算),9越多代表全年服務可用時間越長服務更可靠畅蹂,停機時間越短
1年 = 365天 = 8760小時
99.9 = 8760 * 0.1% = 8760 * 0.001 = 8.76小時
99.99 = 8760 * 0.0001 = 0.876小時 = 0.876 * 60 = 52.6分鐘
99.999 = 8760 * 0.00001 = 0.0876小時 = 0.0876 * 60 = 5.26分鐘
從以上看來健无,全年停機5.26分鐘才能做到99.999%,即5個9CLR:(公共語言運行庫)在運行期管理程序的執(zhí)行:主要包含:內(nèi)存管理液斜、代碼安全驗證累贤、代碼執(zhí)行、垃圾收集旗唁。CLR有一項服務稱為GC(Garbage Collector畦浓,垃圾收集),它能為你自動管理內(nèi)存检疫。GC自動從內(nèi)存中刪除程序不再訪問的對象讶请,GC是程序員不再操心許多以前必須執(zhí)行的任務,比如釋放內(nèi)存和檢查內(nèi)存泄漏屎媳。
百分位數(shù):skywalking中有P50夺溢,P90,P95這種統(tǒng)計口徑烛谊,就是百分位數(shù)的概念风响。
如下圖,表示7月22日丹禀,14:56分這個時間點探針反饋的統(tǒng)計結(jié)果來看状勤,有50%的請求響應時間低于60ms,有75%的請求響應時間低于60ms双泪,有90%的請求響應時間低于550ms持搜,有95%的請求響應時間低于550ms,有99%的請求響應時間低于550ms
image.png
四焙矛、儀表盤說明
-
Global(全局)
image.png -
Service(服務)
image.png -
Endpoint(端點)
image.png -
Instance(實例)
image.png -
Database(數(shù)據(jù)庫)
image.png
五葫盼、鏈路追蹤
六、告警配置
-
告警規(guī)則參數(shù)說明
告警規(guī)則配置 - 告警通知
告警消息將按通過HTTP按application/json內(nèi)容類型推送村斟。JSON格式基于List<org.apache.skywalking.oap.server.core.alarm.AlarmMessage>消息格式
- 動態(tài)配置與組件告警接入
skywalking使用的是動態(tài)配置(如apollo)贫导,如果需要變動的話,直接修改apollo的相關配置就行蟆盹。同時通過webhooks自定義提示方式等等個性化功能孩灯。自定義服務實現(xiàn)告警方式等配置
告警日志企微告警通知示例
七、插件
Java Agent是插件化逾滥、可插拔的钱反。Skywalking的插件分為三種:
- 引導插件:在agent的 bootstrap-plugins 目錄下
- 內(nèi)置插件:在agent的 plugins 目錄下
- 可選插件:在agent的 optional-plugins 目錄下
Java Agent只會啟用 plugins 目錄下的所有插件踩萎,bootstrap-plugins 目錄以及 optional-plugins 目錄下的插件不會啟用脾还。如需啟用引導插件或可選插件,只需將JAR包移到 plugins 目錄下,如需禁用某款插件聂渊,只需從 plugins 目錄中移除即可饱溢。
- 引導插件
目前只有兩款引導插件:
apm-jdk-http-plugin 用來是監(jiān)測HttpURLConnection遏匆;
apm-jdk-threading-plugin 用來監(jiān)測Callable以及Runnable叁征;有關引導插件的功能描述,可詳見:
[https://github.com/apache/skywalking/blob/v6.6.0/docs/en/setup/service-agent/java-agent/README.md#bootstrap-class-plugins]{.underline}例如:項目中不少功能都用到了線程池來提高執(zhí)行效率吱涉,因此就引入了apm-jdk-threading-plugin 用來實現(xiàn)跨線程鏈路監(jiān)控刹泄。
使用方法:
修改 skywalking-agent.jar所在目錄的 config/agent.config文件,在里面修改/添加配置
實現(xiàn)效果:
plugin.jdkthreading.threading_class_prefixes=cn.com.mybackage
然后在plugins文件夾里加入插件apm-jdk-threading-plugin.jar即可怎爵。多線程鏈路監(jiān)控
- 內(nèi)置插件
內(nèi)置插件主要用來為業(yè)界主流的技術與框架提供支持特石。所支持的技術&框架,詳見:
- 可選插件
關于可選插件的功能描述鳖链,可詳見:
https://github.com/apache/skywalking/blob/v6.6.0/docs/en/setup/service-agent/java-agent/README.md
- 插件開發(fā)
插件開發(fā)指南姆蘸,可詳見:
Plugin Development Guide
SkyWalking插件開發(fā)指南場景示例:我們項目中采用了xxljob分布式任務調(diào)度,且都是采用ben模式開發(fā)方式(Skywalking官方并沒有對xxljob做相關支持)芙委,所以開發(fā)xxljob監(jiān)控插件逞敷。
切入點
攔截器的實現(xiàn):org.apache.skywalking.apm.plugin.xxljob.XxlJobHandlerInterceptor
攔截器
將插件定義添加到skywalking-plugin.def文件中
skywalking-plugin.def
org.apache.skywalking.apm.network.trace.component.ComponentsDefine中定義變量:
定義變量
插件效果:插件效果
插件效果