為什么在控制臺看不到數(shù)據(jù)?
使用開源客戶端上報數(shù)據(jù)后,如果遇到控制臺或日志中打印了錯誤日志,或者控制臺上沒有觀察到報錯數(shù)據(jù),可以根據(jù)本文檔進(jìn)行問題排查。
控制臺沒有數(shù)據(jù)的可能原因:
控制臺鏈路數(shù)據(jù)異常問題:
網(wǎng)絡(luò)連通性排查
確認(rèn)代碼中的上報地址是內(nèi)網(wǎng)地址還是公網(wǎng)地址,如果使用內(nèi)網(wǎng)地址請保證上報服務(wù)器和上報地址處于阿里云同一個VPC內(nèi),不能跨Region上報。
在上報環(huán)境中使用
curl
或者telnet
命令檢查上報地址和上報端口是否可用,如果不可用檢查ECS的安全組設(shè)置。
示例:檢查杭州地域的OpenTelemetry gRPC上報地址連通性。
在終端窗口中輸入命令以下命令
telnet [接入點url] [端口號]
例如:
telnet tracing-analysis-dc-hz.aliyuncs.com 8090
如果返回以下信息則說明網(wǎng)絡(luò)可以連通。
如果一直停留在
try [ip]
階段或者提示Unable to connect to remote host
,則說明不能連接到可觀測鏈路 OpenTelemetry 版服務(wù),需要檢查安全組設(shè)置和網(wǎng)絡(luò)配置。更多信息,請參見接入和鑒權(quán)說明和安全組概述。
上報開關(guān)檢查
在控制臺中可以對數(shù)據(jù)上報進(jìn)行全局配置和應(yīng)用級別配置,請分別檢查對應(yīng)的上報開關(guān)是否打開。
采集配置額度也會影響到應(yīng)用數(shù)據(jù)的上報,請驗證上報數(shù)據(jù)量是否已經(jīng)達(dá)到上報額度。
全局開關(guān)檢查
在控制臺集群配置頁簽的采集配置區(qū)域檢查采集數(shù)據(jù)是否為全部開啟或默認(rèn)開啟。
上報額度檢查
在控制臺集群配置頁簽的額度配置區(qū)域檢查上報數(shù)據(jù)量是否已經(jīng)達(dá)到配置限額,如果已經(jīng)達(dá)到,則需要調(diào)整上報數(shù)據(jù)限額。
應(yīng)用開關(guān)檢查
在目標(biāo)應(yīng)用的應(yīng)用設(shè)置 > 自定義配置頁簽,檢查采集配置區(qū)域中的采集數(shù)據(jù)是否為開啟或不設(shè)置。
如果集群配置頁簽的采集配置設(shè)置為全部開啟或全部關(guān)閉,則此處應(yīng)用的采集配置不生效,以集群配置為準(zhǔn)。
如果應(yīng)用的采集配置設(shè)置為不設(shè)置,則應(yīng)用的上報狀態(tài)以集群狀態(tài)為準(zhǔn)。
SLS資源檢查
可觀測鏈路 OpenTelemetry 版的數(shù)據(jù)存儲在用戶名下的SLS上,如果上報數(shù)據(jù)失敗,有可能是SLS的Project已經(jīng)達(dá)到數(shù)量限額。
解決方案如下:
釋放沒有用到的SLS Project資源。
在SLS中提交工單提升Project限額。
監(jiān)控任務(wù)狀態(tài)異常
如果頁面中出現(xiàn)提示信息:監(jiān)控任務(wù)狀態(tài)異常或者監(jiān)控任務(wù)沒有開啟
,請提交工單處理。
HTTP上報方式報錯
根據(jù)HTTP返回狀態(tài)碼排查
觀察控制臺或者日志文件中打印的gRPC返回狀態(tài)碼,根據(jù)狀態(tài)碼進(jìn)行后續(xù)操作:
403:權(quán)限問題。
Endpoint或者Token填寫有誤,可以在控制臺集群配置 > 接入點信息頁簽獲取相關(guān)接入點信息進(jìn)行排查。
Zipkin填寫的URL最后多了
/v2/spans
內(nèi)容。
405:上報量達(dá)到客戶自定義的額度上限。(請在集群配置頁簽的額度配置區(qū)域調(diào)整上報額度。)
406:客戶主動關(guān)閉了集群采集。(請在集群配置頁簽的采集配置區(qū)域開啟集群采集。)
400:不合理的數(shù)據(jù)格式。
Content-type只支持
application/json
、application/x-thrift
或Bad Request
格式。例如:
Tag的Key/Value需要格式都是String,但是Value上報了一個JSON數(shù)組。
Spans需要格式為JSON Array,但是實際上報了一個JSON Object格式數(shù)據(jù)。
根據(jù)HTTP錯誤信息排查
Apisix通過OpenTelemetry上報數(shù)據(jù)失敗,提示信息:
The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.
Apisix暫時不支持用OpenTelemetry直接上報到可觀測鏈路 OpenTelemetry 版,需要用opentelemetry collector轉(zhuǎn)發(fā)到可觀測鏈路 OpenTelemetry 版服務(wù)。
gRPC上報方式報錯
如果是數(shù)據(jù)是通過gRPC方式上報,可以觀察控制臺或者日志文件中打印的gRPC返回狀態(tài)碼,狀態(tài)碼的含義請參見gRPC狀態(tài)碼定義。
常見的報錯排查方式如下:
上報超時
報錯信息:
Failed to export spans. The request could not be executed. Full error message: timeout
排查方案:
檢查網(wǎng)絡(luò)聯(lián)通性。
檢查SDK/Agent的上報超時時間設(shè)置,嘗試調(diào)大超時時間。
權(quán)限驗證失敗
報錯信息:
Failed to export spans. Server responded with gRPC status code 7. Error message:
排查方案:
檢查gRPC請求頭中的Authentication字段和可觀測鏈路 OpenTelemetry 版控制臺的鑒權(quán)Token是否一致。
Skywalking MeterSender報錯
報錯信息:
MeterSender : Send meters to collector fail with a grpc internal exception. org.apache.skywalking.apm.dependencies.io.grpc.StatusRuntimeException: UNIMPLEMENTED: Method not found: skywalking.v3.MeterReportService/collect
報錯原因:Skywalking客戶端向可觀測鏈路 OpenTelemetry 版服務(wù)端發(fā)送了Metrics數(shù)據(jù)。
解決方案:關(guān)閉Skywalking的Metrics上報。
控制臺鏈路數(shù)據(jù)不符合預(yù)期
Skywalking Agent/SDK上報
為什么應(yīng)用中的部分框架和中間件沒有被埋點?
檢查Skywalking Agent插件目錄下是否存在沒有被埋點的框架的插件,這些插件的版本是否和應(yīng)用中使用到的框架的版本一致。
例如Skywalking 8以上的版本的插件路徑為:${agent-path}/agent-8.x/plugins。如果沒有插件,則可以在bootstrap-plugins或者optional-plugins文件夾下將需要的插件復(fù)制到plugins目錄,或者在社區(qū)中下載需要的插件。
檢查應(yīng)用是否只添加了Skywalking的Agent,如果同時添加多個Agent可能會導(dǎo)致埋點邏輯沖突。
為什么調(diào)用鏈路出現(xiàn)斷鏈?
檢查調(diào)用鏈?zhǔn)欠駷楫惒綀鼍埃绻钱惒綀鼍埃鉀Q方案請參見Skywalking跨線程解決方案。
為什么整個調(diào)用鏈的長度比預(yù)期要短?
可以調(diào)整Skywalking Agent上報的Span個數(shù),修改${agent-path}/agent-8.x/config/agent.config中的
collector.agent.service_graph.batch_size配置項,調(diào)大該值。
OpenTelemetry Agent/SDK
為什么我的調(diào)用鏈路出現(xiàn)斷鏈現(xiàn)象?
檢查是否存在異步調(diào)用的情況,建議升級OpenTelemetry版本或者使用OpenTelemetry的SpanLinks API來解決異步調(diào)用斷鏈的問題,Link可以讓兩個Span關(guān)聯(lián)起來(設(shè)置某個span的parent span),或者通過Context Propagation把Trace Context顯式傳遞給另一個應(yīng)用。