OAL簡介
在流模式(Streaming mode)下,SkyWalking 提供了 觀測分析語言(Observability Analysis Language,OAL) 來分析流入的資料。
OAL指令碼現在位於/config
資料夾,使用者可以簡單地改變和重新啟動伺服器,使其有效。
但是,OAL指令碼仍然是編譯語言,OAL執行時動態生成Java程式碼。可以在系統環境上設定SW_OAL_ENGINE_DEBUG=Y
,檢視生成了哪些類。
作用域(Scope)
作用域包括全域性(All)、服務(Service)、服務例項(Service Instance)、端點(Endpoint)、服務關係(Service Relation)、服務例項關係(Service Instance Relation)、端點關係(Endpoint Relation)。
接下來我來詳細瞭解一下每個作用域。
文章持續更新,微信搜尋「萬貓學社」第一時間閱讀,關注後回覆「電子書」,免費獲取12本Java必讀技術書籍。
全域性(All)
名稱 | 備註 | 是否分組鍵 | 資料型別 |
---|---|---|---|
name | 表示每個請求對應的服務名稱 | string | |
serviceInstanceName | 表示引用的服務例項名稱 | string | |
endpoint | 表示每個請求的端點名稱 | string | |
latency | 表示每個請求的耗時 | int(單位:毫秒) | |
status | 表示請求成功還是失敗的狀態 | bool(true 表示成功) | |
responseCode | 如果該請求是 HTTP 請求, 則表示 HTTP 響應的狀態碼. 如 200, 404, 302 | int | |
type | 表示請求型別,例如: Database, HTTP, RPC, gRPC | enum |
服務(Service)
按照服務計算每個請求的度量資料。
名稱 | 備註 | 是否分組鍵 | 資料型別 |
---|---|---|---|
name | 表示服務的名稱 | string | |
nodeType | 表示服務節點或網路地址的型別,如:Normal, Database, MQ, Cache | enum | |
serviceInstanceName | 表示引用的服務例項名稱 | string | |
endpointName | 表示端點的名稱, 如:HTTP URI的完整路徑 | string | |
latency | 表示每個請求的耗時 | int | |
status | 表示請求成功還是失敗的狀態 | bool(true 表示成功) | |
responseCode | 如果該請求是 HTTP 請求, 表示 HTTP 請求的響應碼 | int | |
type | 表示每個請求的型別, 如: Database, HTTP, RPC, gRPC | enum |
服務例項(Service Instance)
按照服務例項計算每個請求的度量資料。
名稱 | 備註 | 是否分組鍵 | 資料型別 |
---|---|---|---|
name | 表示服務例項名稱。現在原生探針使用 uuid@ipv4 作為服務例項名稱, 當需要在聚合中設定過濾器(Filter)時,這個毫無用處。 |
string | |
nodeType | 表示服務節點或網路地址的型別,如:Normal, Database, MQ, Cache | enum | |
serviceName | 表示服務的名稱 | string | |
endpointName | 表示端點的名稱, 如 HTTP URI 的完整路徑. | string | |
latency | 表示每個請求的耗時 | int | |
status | 表示請求成功還是失敗的狀態 | bool(true 表示成功) | |
responseCode | 如果該請求是 HTTP 請求, 則表示 HTTP 響應的狀態碼. 如 200, 404, 302. | int | |
type | 表示請求型別,例如: Database, HTTP, RPC, gRPC | enum |
文章持續更新,微信搜尋「萬貓學社」第一時間閱讀,關注後回覆「電子書」,免費獲取12本Java必讀技術書籍。
服務例項(Service Instance)二級作用域
當服務例項是一個 JVM 並且通過 javaagent 收集時,計算服務例項的度量指標。
1. ServiceInstanceJVMCPU
名稱 | 備註 | 是否分組鍵 | 資料型別 |
---|---|---|---|
name | 表示服務例項名稱。現在原生探針使用 uuid@ipv4 作為服務例項名稱, 當需要在聚合中設定過濾器(Filter)時,這個毫無用處。 |
string | |
serviceName | 表示服務的名稱 | string | |
usePercent | 表示 CPU 耗時百分比 | double |
2. ServiceInstanceJVMMemory
名稱 | 備註 | 是否分組鍵 | 資料型別 |
---|---|---|---|
name | 表示服務例項名稱。 現在原生探針使用 uuid@ipv4 作為服務例項名稱, 當需要在聚合中設定過濾器(Filter)時,這個毫無用處。 |
string | |
serviceName | 表示服務的名稱 | string | |
heapStatus | 表示該指標是否是堆的指標 | bool | |
init | 參考 JVM 文件 | long | |
max | 參考 JVM 文件 | long | |
used | 參考 JVM 文件 | long | |
committed | 參考 JVM 文件 | long |
3. ServiceInstanceJVMMemoryPool
名稱 | 備註 | 是否分組鍵 | 資料型別 |
---|---|---|---|
name | 表示服務例項名稱。現在原生探針使用 uuid@ipv4 作為服務例項名稱, 當需要在聚合中設定過濾器(Filter)時,這個毫無用處。 |
string | |
serviceName | 表示服務的名稱 | string | |
poolType | 根據不同的 JVM 版本, 可能包括 CODE_CACHE_USAGE, NEWGEN_USAGE, OLDGEN_USAGE, SURVIVOR_USAGE, PERMGEN_USAGE, METASPACE_USAGE | enum | |
init | 參考 JVM 文件 | long | |
max | 參考 JVM 文件 | long | |
used | 參考 JVM 文件 | long | |
committed | 參考 JVM 文件 | long |
文章持續更新,微信搜尋「萬貓學社」第一時間閱讀,關注後回覆「電子書」,免費獲取12本Java必讀技術書籍。
4. ServiceInstanceJVMGC
名稱 | 備註 | 是否分組鍵 | 資料型別 |
---|---|---|---|
name | 表示服務例項名稱。現在原生探針使用 uuid@ipv4 作為服務例項名稱, 當需要在聚合中設定過濾器(Filter)時,這個毫無用處。 |
string | |
serviceName | 表示服務的名稱 | string | |
phrase | NEW/OLD | Enum | |
time | GC 耗時 | long | |
count | GC 次數 | long |
5. ServiceInstanceJVMThread
名稱 | 備註 | 是否分組鍵 | 資料型別 |
---|---|---|---|
name | 表示服務例項名稱。現在原生探針使用 uuid@ipv4 作為服務例項名稱, 當需要在聚合中設定過濾器(Filter)時,這個毫無用處。 |
string | |
serviceName | 表示服務的名稱 | string | |
liveCount | 表示活躍執行緒的當前數量 | int | |
daemonCount | 表示當前守護程式執行緒的數量 | int | |
peakCount | 表示當前峰值執行緒數 | int |
端點(Endpoint)
計算服務中每個端點請求的度量指標。
名稱 | 備註 | 是否分組鍵 | 資料型別 |
---|---|---|---|
name | 表示端點的名稱, 如 HTTP URI 的完整路徑. | string | |
nodeType | 表示服務節點或網路地址的型別,如:Normal, Database, MQ, Cache | enum | |
serviceName | 表示服務的名稱 | string | |
serviceInstanceName | 表示引用的服務例項 id 的名稱. | string | |
latency | 表示每個請求的耗時 | int | |
status | 表示請求成功還是失敗的狀態 | bool(true 表示成功) | |
responseCode | 如果該請求是 HTTP 請求, 則表示 HTTP 響應的狀態碼,如:200, 404, 302. | int | |
type | 表示請求型別,例如: Database, HTTP, RPC, gRPC | enum |
服務關係(Service Relation)
計算服務與服務之間每個請求的度量指標。
名稱 | 備註 | 是否分組鍵 | 資料型別 |
---|---|---|---|
sourceServiceName | 表示源服務的名稱 | string | |
sourceServiceNodeType | 表示源服務節點或網路地址的型別,如:Normal, Database, MQ, Cache | enum | |
sourceServiceInstanceName | 表示源服務例項名稱 | string | |
destServiceName | 表示目標服務的名稱 | string | |
destServiceNodeType | 表示目標服務節點或網路地址的型別,如:Normal, Database, MQ, Cache | enum | |
destServiceInstanceName | 表示目標服務例項名稱 | string | |
endpoint | 表示本次呼叫中使用的端點 | string | |
componentId | 表示本次呼叫中使用到的元件 ID | 是 | string |
latency | 表示每個請求的耗時 | int | |
status | 表示請求成功還是失敗的狀態 | bool(true 表示成功) | |
responseCode | 如果該請求是 HTTP 請求, 則表示 HTTP 響應的狀態碼. 如 200, 404, 302. | int | |
type | 表示請求型別,例如: Database, HTTP, RPC, gRPC | enum | |
detectPoint | 本地請求探測點位置,如:client, server, proxy. | 是 | enum |
tlsMode | 表示源服務和目標服務之間的TLS模式,如:service_relation_mtls_cpm = from(ServiceRelation.*).filter(tlsMode == "mTLS").cpm() |
string |
服務例項關係(Service Instance Relation)
計算服務例項與服務例項之間每個請求的度量指標。
名稱 | 備註 | 是否分組鍵 | 資料型別 |
---|---|---|---|
sourceServiceName | 表示源服務的名稱 | string | |
sourceServiceNodeType | 表示源服務節點或網路地址的型別,如:Normal, Database, MQ, Cache | enum | |
sourceServiceInstanceName | 表示源服務例項名稱 | string | |
destServiceName | 表示目標服務的名稱 | ||
destServiceNodeType | 表示目標服務節點或網路地址的型別,如:Normal, Database, MQ, Cache | enum | |
destServiceInstanceName | 表示目標服務例項名稱 | string | |
endpoint | 表示本次呼叫中使用的端點 | string | |
componentId | 表示本次呼叫中使用到的元件 ID | 是 | string |
latency | 表示每個請求的耗時 | int | |
status | 表示請求成功還是失敗的狀態 | bool(true 表示成功) | |
responseCode | 如果該請求是 HTTP 請求, 則表示 HTTP 響應的狀態碼. 如 200, 404, 302. | int | |
type | 表示請求型別,例如: Database, HTTP, RPC, gRPC | enum | |
detectPoint | 本地請求探測點位置,如:client, server, proxy. | 是 | enum |
tlsMode | 表示源服務和目標服務之間的TLS模式,如:service_relation_mtls_cpm = from(ServiceRelation.*).filter(tlsMode == "mTLS").cpm() |
string |
文章持續更新,微信搜尋「萬貓學社」第一時間閱讀,關注後回覆「電子書」,免費獲取12本Java必讀技術書籍。
端點關係(Endpoint Relation)
計算一個端點和另一個端點之間的依賴關係的度量資料。這種關係很難檢測,也依賴於跟蹤庫來傳播上一個端點。
所以端點關係範圍聚合,僅僅在使用 SkyWalking 原生探針進行追蹤的情況下才有效,包括自動打點探針(如 Java, .NET),
OpenCensus SkyWalking exporter以及其他傳播追蹤上下文的實現.
名稱 | 備註 | 是否分組鍵 | 資料型別 |
---|---|---|---|
endpoint | 表示父級端點名稱 | string | |
serviceName | 表示父級端點的服務名稱 | string | |
serviceNodeType | 表示父級端點的服務節點或網路地址的型別,如:Normal, Database, MQ, Cache | enum | |
childEndpoint | 表示子父級端點名稱 | string | |
childServiceName | 表示子級端點的服務名稱 | string | |
childServiceNodeType | 表示子級端點的服務節點或網路地址的型別,如:Normal, Database, MQ, Cache | string | |
childServiceInstanceName | 表示子級端點的服務例項名稱 | string | |
rpcLatency | 表示RPC請求的耗時,排除了父級端點自身的耗時 | int | |
componentId | 表示此呼叫中使用的元件ID | 是 | string |
status | 表示請求成功還是失敗的狀態 | bool(true 表示成功) | |
responseCode | 如果該請求是 HTTP 請求,則表示 HTTP 響應的狀態碼 | int | |
type | 表示請求型別,例如: Database, HTTP, RPC, gRPC | enum | |
detectPoint | 本地請求探測點位置,如:client, server, proxy. | 是 | enum |
瀏覽器傳輸(BrowserAppTraffic)
計算瀏覽器應用程式的每個請求的度量資料。
名稱 | 備註 | 是否分組鍵 | 資料型別 |
---|---|---|---|
name | 表示每個請求的瀏覽器應用程式名稱 | string | |
count | 表示請求數,固定為1 | int | |
trafficCategory | 表示傳輸類別,如:NORMAL, FIRST_ERROR, ERROR | enum | |
errorCategory | 代表錯誤類別,如:AJAX, RESOURCE, VUE, PROMISE, UNKNOWN | enum |
瀏覽器單一版本傳輸(BrowserAppSingleVersionTraffic)
計算瀏覽器應用程式中瀏覽器單一版本的每個請求的度量資料。
名稱 | 備註 | 是否分組鍵 | 資料型別 |
---|---|---|---|
name | 表示每個請求的單一版本名 | string | |
serviceName | 表示瀏覽器應用程式的名稱 | string | |
count | 表示請求數,固定為1 | int | |
trafficCategory | 表示傳輸類別,如:NORMAL, FIRST_ERROR, ERROR | enum | |
errorCategory | 代表錯誤類別,如:AJAX, RESOURCE, VUE, PROMISE, UNKNOWN | enum |
瀏覽器頁面傳輸(BrowserAppPageTraffic)
計算瀏覽器應用程式中頁面的每個請求的度量資料。
名稱 | 備註 | 是否分組鍵 | 資料型別 |
---|---|---|---|
name | 表示每個請求的頁面名稱 | string | |
serviceName | 表示瀏覽器應用程式的名稱 | string | |
count | 表示請求數,固定為1 | int | |
trafficCategory | 表示傳輸類別,如:NORMAL, FIRST_ERROR, ERROR | enum | |
errorCategory | 代表錯誤類別,如:AJAX, RESOURCE, VUE, PROMISE, UNKNOWN | enum |
瀏覽器頁面耗時(BrowserAppPagePerf)
計算瀏覽器應用程式中頁面的每個請求耗時的度量資料。
名稱 | 備註 | 是否分組鍵 | 資料型別 |
---|---|---|---|
name | 表示每個請求的頁面名稱 | string | |
serviceName | 表示瀏覽器應用程式的名稱 | string | |
redirectTime | 表示重定向的耗時 | int(單位:毫秒) | |
dnsTime | 表示DNS查詢的耗時 | int(單位:毫秒) | |
ttfbTime | 發出頁面請求到接收到應答資料第一個位元組所花費的耗時 | int(單位:毫秒) | |
tcpTime | TCP連線的耗時 | int(單位:毫秒) | |
transTime | 內容傳輸的耗時 | int(單位:毫秒) | |
domAnalysisTime | DOM結構分析的耗時 | int(單位:毫秒) | |
fptTime | 首次渲染時間/白屏時間 | int(單位:毫秒) | |
domReadyTime | DOM結構準備的耗時 | int(單位:毫秒) | |
loadPageTime | 整個頁面載入時間 | int(in ms) | |
resTime | 頁面中同步載入資源的耗時 | int(單位:毫秒) | |
sslTime | 僅對HTTPS有效 | int(單位:毫秒) | |
ttlTime | 首次互動時間 | int(單位:毫秒) | |
firstPackTime | 第一個包的時間 | int(單位:毫秒) | |
fmpTime | 首次有效繪製時間 | int(單位:毫秒) |
注:本文以SkyWalking的8.2.0版本為例進行介紹,如果版本不同會略有差異。
微信公眾號:萬貓學社
微信掃描二維碼
關注後回覆「電子書」
獲取12本Java必讀技術書籍