skywalking中表字段的信息


https://skyapm.github.io/document-cn-translation-of-skywalking/zh/6.2.0/concepts-and-designs/scope-definitions.html

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 定義了上面的字段之后,為了計算數據,skywalking定義了一種OAL腳本來進行聚合運算

 

 https://skyapm.github.io/document-cn-translation-of-skywalking/zh/6.2.0/concepts-and-designs/oal.html

 

 

 

 

 

 

 skywalking的所有的oal定義在文件official_analysis.oal中

 

 文件的內容如下

// All scope metrics
all_p99 = from(All.latency).p99(10);
all_p95 = from(All.latency).p95(10);
all_p90 = from(All.latency).p90(10);
all_p75 = from(All.latency).p75(10);
all_p50 = from(All.latency).p50(10);
all_heatmap = from(All.latency).thermodynamic(100, 20);

// Service scope metrics
service_resp_time = from(Service.latency).longAvg();
service_sla = from(Service.*).percent(status == true);
service_cpm = from(Service.*).cpm();
service_p99 = from(Service.latency).p99(10);
service_p95 = from(Service.latency).p95(10);
service_p90 = from(Service.latency).p90(10);
service_p75 = from(Service.latency).p75(10);
service_p50 = from(Service.latency).p50(10);

// Service relation scope metrics for topology
service_relation_client_cpm = from(ServiceRelation.*).filter(detectPoint == DetectPoint.CLIENT).cpm();
service_relation_server_cpm = from(ServiceRelation.*).filter(detectPoint == DetectPoint.SERVER).cpm();
service_relation_client_call_sla = from(ServiceRelation.*).filter(detectPoint == DetectPoint.CLIENT).percent(status == true);
service_relation_server_call_sla = from(ServiceRelation.*).filter(detectPoint == DetectPoint.SERVER).percent(status == true);
service_relation_client_resp_time = from(ServiceRelation.latency).filter(detectPoint == DetectPoint.CLIENT).longAvg();
service_relation_server_resp_time = from(ServiceRelation.latency).filter(detectPoint == DetectPoint.SERVER).longAvg();
service_relation_client_p99 = from(ServiceRelation.latency).filter(detectPoint == DetectPoint.CLIENT).p99(10);
service_relation_server_p99 = from(ServiceRelation.latency).filter(detectPoint == DetectPoint.SERVER).p99(10);
service_relation_client_p95 = from(ServiceRelation.latency).filter(detectPoint == DetectPoint.CLIENT).p95(10);
service_relation_server_p95 = from(ServiceRelation.latency).filter(detectPoint == DetectPoint.SERVER).p95(10);
service_relation_client_p90 = from(ServiceRelation.latency).filter(detectPoint == DetectPoint.CLIENT).p90(10);
service_relation_server_p90 = from(ServiceRelation.latency).filter(detectPoint == DetectPoint.SERVER).p90(10);
service_relation_client_p75 = from(ServiceRelation.latency).filter(detectPoint == DetectPoint.CLIENT).p75(10);
service_relation_server_p75 = from(ServiceRelation.latency).filter(detectPoint == DetectPoint.SERVER).p75(10);
service_relation_client_p50 = from(ServiceRelation.latency).filter(detectPoint == DetectPoint.CLIENT).p50(10);
service_relation_server_p50 = from(ServiceRelation.latency).filter(detectPoint == DetectPoint.SERVER).p50(10);

// Service Instance Scope metrics
service_instance_sla = from(ServiceInstance.*).percent(status == true);
service_instance_resp_time= from(ServiceInstance.latency).longAvg();
service_instance_cpm = from(ServiceInstance.*).cpm();

// Endpoint scope metrics
endpoint_cpm = from(Endpoint.*).cpm();
endpoint_avg = from(Endpoint.latency).longAvg();
endpoint_sla = from(Endpoint.*).percent(status == true);
endpoint_p99 = from(Endpoint.latency).p99(10);
endpoint_p95 = from(Endpoint.latency).p95(10);
endpoint_p90 = from(Endpoint.latency).p90(10);
endpoint_p75 = from(Endpoint.latency).p75(10);
endpoint_p50 = from(Endpoint.latency).p50(10);

// Endpoint relation scope metrics
endpoint_relation_cpm = from(EndpointRelation.*).filter(detectPoint == DetectPoint.SERVER).cpm();
endpoint_relation_resp_time = from(EndpointRelation.rpcLatency).filter(detectPoint == DetectPoint.SERVER).longAvg();

// JVM instance metrics
instance_jvm_cpu = from(ServiceInstanceJVMCPU.usePercent).doubleAvg();
instance_jvm_memory_heap = from(ServiceInstanceJVMMemory.used).filter(heapStatus == true).longAvg();
instance_jvm_memory_noheap = from(ServiceInstanceJVMMemory.used).filter(heapStatus == false).longAvg();
instance_jvm_memory_heap_max = from(ServiceInstanceJVMMemory.max).filter(heapStatus == true).longAvg();
instance_jvm_memory_noheap_max = from(ServiceInstanceJVMMemory.max).filter(heapStatus == false).longAvg();
instance_jvm_young_gc_time = from(ServiceInstanceJVMGC.time).filter(phrase == GCPhrase.NEW).sum();
instance_jvm_old_gc_time = from(ServiceInstanceJVMGC.time).filter(phrase == GCPhrase.OLD).sum();
instance_jvm_young_gc_count = from(ServiceInstanceJVMGC.count).filter(phrase == GCPhrase.NEW).sum();
instance_jvm_old_gc_count = from(ServiceInstanceJVMGC.count).filter(phrase == GCPhrase.OLD).sum();

database_access_resp_time = from(DatabaseAccess.latency).longAvg();
database_access_sla = from(DatabaseAccess.*).percent(status == true);
database_access_cpm = from(DatabaseAccess.*).cpm();
database_access_p99 = from(DatabaseAccess.latency).p99(10);
database_access_p95 = from(DatabaseAccess.latency).p95(10);
database_access_p90 = from(DatabaseAccess.latency).p90(10);
database_access_p75 = from(DatabaseAccess.latency).p75(10);
database_access_p50 = from(DatabaseAccess.latency).p50(10);

// CLR instance metrics
instance_clr_cpu = from(ServiceInstanceCLRCPU.usePercent).doubleAvg();
instance_clr_gen0_collect_count = from(ServiceInstanceCLRGC.gen0CollectCount).sum();
instance_clr_gen1_collect_count = from(ServiceInstanceCLRGC.gen1CollectCount).sum();
instance_clr_gen2_collect_count = from(ServiceInstanceCLRGC.gen2CollectCount).sum();
instance_clr_heap_memory = from(ServiceInstanceCLRGC.heapMemory).longAvg();
instance_clr_available_completion_port_threads = from(ServiceInstanceCLRThread.availableCompletionPortThreads).max();
instance_clr_available_worker_threads = from(ServiceInstanceCLRThread.availableWorkerThreads).max();
instance_clr_max_completion_port_threads = from(ServiceInstanceCLRThread.maxCompletionPortThreads).max();
instance_clr_max_worker_threads = from(ServiceInstanceCLRThread.maxWorkerThreads).max();

// Envoy instance metrics
envoy_heap_memory_max_used = from(EnvoyInstanceMetric.value).filter(metricName == "server.memory_heap_size").maxDouble();
envoy_total_connections_used = from(EnvoyInstanceMetric.value).filter(metricName == "server.total_connections").maxDouble();
envoy_parent_connections_used = from(EnvoyInstanceMetric.value).filter(metricName == "server.parent_connections").maxDouble();

// Disable unnecessary hard core sources
/////////
// disable(segment);
// disable(endpoint_relation_server_side);
// disable(top_n_database_statement);
// disable(zipkin_span);
// disable(jaeger_span);

定義的指標值如下

全局指標

all_p99, 所有服務響應時間的 p99 值
all_p95
all_p90
all_p75
all_p70
all_heatmap, 所有服務響應時間的熱點圖
服務指標

service_resp_time, 服務的平均響應時間
service_sla, 服務的成功率
service_cpm, 服務每分鍾調用次數
service_p99, 服務響應時間的 p99 值
service_p95
service_p90
service_p75
service_p50
服務實例指標

service_instance_sla, 服務實例的成功率
service_instance_resp_time, 服務實例的平均響應時間
service_instance_cpm, 服務實例每分鍾調用次數
端點指標

endpoint_cpm, 端點每分鍾調用次數
endpoint_avg, 端點平均響應時間
endpoint_sla, 端點成功率
endpoint_p99, 端點響應時間的 p99 值
endpoint_p95
endpoint_p90
endpoint_p75
endpoint_p50
JVM 指標, JVM 相關的指標, 只有當 javaagent 啟用時才有效

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
服務關系指標, 代表服務之間調用的指標 指標的 ID 只能在拓撲圖查詢中獲取

service_relation_client_cpm, 在客戶端每分鍾檢測到的調用次數
service_relation_server_cpm, 在服務端每分鍾檢測到的調用次數
service_relation_client_call_sla, 在客戶端檢測到的成功率
service_relation_server_call_sla, 在服務端檢測到的成功率
service_relation_client_resp_time, 在客戶端檢測到的平均響應時間
service_relation_server_resp_time, 在服務端檢測到的平均響應時間
端點關系指標, 代表相互依賴的端點之間的指標. 只有在追蹤代理啟用時有效. 指標 ID 只能在拓撲查詢中獲得.

endpoint_relation_cpm
endpoint_relation_resp_time

 我們來看看skywalking中頁面框圖的意思

 

 

 上面對於的計算指標是

 

 

 

 

 

 首先看latency表示的意思是服務下每個請求的耗時

 

 

 all_p99 = from(All.latency).p99(10);all表示所有的服務,服務就是應用的意思當前系統下面有三個應用,三個應用下面一共存在1000次請求,這里指的就是所有1000次請求中99%的請求響應時間都是在某個范圍內

 

 

 global Top Throughput中表示當前所有的應用中的方法中,那個請求的數量最多

global Top slow Endpoint表示當前所有應用下面的那個請求最耗時

 

 

 這里的Global  heatmap實際上調用的是

 

 

 當前的請求在熱力圖上的分布情況,每一次請求在熱力圖上面對應一個點

 

 

 表示當前應用下的全部請求耗時在20毫秒和100毫秒

https://skyapm.github.io/document-cn-translation-of-skywalking/zh/6.2.0/concepts-and-designs/oal.html

https://skyapm.github.io/document-cn-translation-of-skywalking/zh/6.2.0/concepts-and-designs/scope-definitions.html

 

 

 service_resp_time = from(Service.latency).longAvg();

 

 

 表示當前應用下每個請求的耗時的平均值,所以存在不准的情況,應該不應該把當前應用向注冊中心那個請求時間算在內,這里要注意

service_sla = from(Service.*).percent(status == true);

 

 

 表示當前應用下sla:請求的成功率是多少

 

 

 

 

 

 

 

 

 

 上面表表示應用spring-user在20點34分到21點04分這半個小時內,應用這段時間內每分鍾的請求數目是1.33次,這個1.33次是如何算出來的了

     

 

 

 

 

 應用在20點43分,發送了一次請求,在20點44分發送了一次請求,在20點45分發生了2次請求,所有20點43 20點44分 20點45分,三分鍾之內發送了4請請求,每一分鍾的平均請求時間為4除以3等於1.33.,這里要注意雖然選擇的查詢時間從20點11到21點11一共30分鍾,這里面大部分時間沒有請求產生,平均請求次數不能是4/30,而是統計真正發送請求的時間

對於的信息在數據庫的表service_cpm中可以看到,entity_id表示當前應用的編號,3對於的就是spring-user應用,service_cpm記錄的是當前一個小時之內應用的訪問數據

 

 

 如果當前應用選擇查詢的時間超過一個小時,選擇最近一天,如下圖所示,我們看到cpm為0,因為查詢的是

 

 

 

 

 

 

我們可以看到選擇最近一天查詢的時間間隔是小時,查詢的是service_cpm_hour這張表

 

 

 從上面分析我們已經知道應用在20點43分,發送了一次請求,在20點44分發送了一次請求,在20點45分發生了2次請求,所有20點43 20點44分 20點45分,所以在20 內發送了4次請求,所有表中service_cpm_hour對於的2020010420這個時間點的值是4,頁面上從1月3號21點到1月4號21點內沒有任何請求,所以cpm為0

同理,選擇最近一周,查詢的是service_cpm_day這張表

 

 

 

 

在表service_cpm_day中時間是按照天進行統計的,在20200104 在1月4號這天發生了4次請求

 同理應用的平均響應時間類似,這里為啥是74264.67ms了

 

 

 

 

 

 

 

應用在20點43分的這一分鍾內發送了請求應用的平均響應時間123851,在20點44分應用在這一分鍾內發生了請求對於的平均響應時間是76455,在20點45分發生了請求對於的平均響應時間是22488,所以在20點00到21點這段時間內,只有3分鍾內發送了請求,其余時間沒有發送請求,平均響應時間為(123851+76455+22488)/3=74264.67ms

應用的平均響應時間,是依據應用下的每個應用的實例響應時間計算出來的,查詢的表如下

 

 應用下面的p99 p50如下,查詢的是service_p50相關的表

 

 

 

 

 

 

 

表示當前應用下面那個請求最慢,當前應用存在哪些實例

 

對於方法的操作

 

 

 首先要選擇那個應用,然后選擇該應用下對於的端點

調用的統計信息為

// Endpoint scope metrics
endpoint_cpm = from(Endpoint.*).cpm();
endpoint_avg = from(Endpoint.latency).longAvg();
endpoint_sla = from(Endpoint.*).percent(status == true);
endpoint_p99 = from(Endpoint.latency).p99(10);
endpoint_p95 = from(Endpoint.latency).p95(10);
endpoint_p90 = from(Endpoint.latency).p90(10);
endpoint_p75 = from(Endpoint.latency).p75(10);
endpoint_p50 = from(Endpoint.latency).p50(10);

表示該端點對於的平均響應時間,平均請求信息,平均每分鍾的請求數目燈

 

 

 表示應用spring-user的方法/user/5在20點45分,這一分鍾內的平均響應時間是25577毫秒

 

 

 這里表示的是應用spring-user的方法/user/5在20點32分到21點02分內,方法的平均響應時間是74714毫秒

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM