使用開源客戶端上報數據后,如果遇到控制臺或日志中打印了錯誤日志,或者控制臺上沒有觀察到報錯數據,可以根據本文檔進行問題排查。
控制臺沒有數據的可能原因:
控制臺鏈路數據異常問題:
網絡連通性排查
確認代碼中的上報地址是內網地址還是公網地址,如果使用內網地址請保證上報服務器和上報地址處于阿里云同一個VPC內,不能跨Region上報。
在上報環境中使用
curl
或者telnet
命令檢查上報地址和上報端口是否可用,如果不可用檢查ECS的安全組設置。
示例:檢查杭州地域的OpenTelemetry gRPC上報地址連通性。
在終端窗口中輸入命令以下命令
telnet [接入點url] [端口號]
例如:
telnet tracing-analysis-dc-hz.aliyuncs.com 8090
上報開關檢查
在控制臺中可以對數據上報進行全局配置和應用級別配置,請分別檢查對應的上報開關是否打開。
采集配置額度也會影響到應用數據的上報,請驗證上報數據量是否已經達到上報額度。
全局開關檢查
在控制臺集群配置頁簽的采集配置區域檢查采集數據是否為全部開啟或默認開啟。
上報額度檢查
在控制臺集群配置頁簽的額度配置區域檢查上報數據量是否已經達到配置限額,如果已經達到,則需要調整上報數據限額。
應用開關檢查
在目標應用的應用設置 > 自定義配置頁簽,檢查采集配置區域中的采集數據是否為開啟或不設置。
如果集群配置頁簽的采集配置設置為全部開啟或全部關閉,則此處應用的采集配置不生效,以集群配置為準。
如果應用的采集配置設置為不設置,則應用的上報狀態以集群狀態為準。
SLS資源檢查
可觀測鏈路 OpenTelemetry 版的數據存儲在用戶名下的SLS上,如果上報數據失敗,有可能是SLS的Project已經達到數量限額。
解決方案如下:
釋放沒有用到的SLS Project資源。
在SLS中提交工單提升Project限額。
監控任務狀態異常
如果頁面中出現提示信息:監控任務狀態異常或者監控任務沒有開啟
,請提交工單處理。
HTTP上報方式報錯
根據HTTP返回狀態碼排查
觀察控制臺或者日志文件中打印的gRPC返回狀態碼,根據狀態碼進行后續操作:
403:權限問題。
Endpoint或者Token填寫有誤,可以在控制臺集群配置 > 接入點信息頁簽獲取相關接入點信息進行排查。
Zipkin填寫的URL最后多了
/v2/spans
內容。
405:上報量達到客戶自定義的額度上限。(請在集群配置頁簽的額度配置區域調整上報額度。)
406:客戶主動關閉了集群采集。(請在集群配置頁簽的采集配置區域開啟集群采集。)
400:不合理的數據格式。
Content-type只支持
application/json
、application/x-thrift
或Bad Request
格式。例如:
Tag的Key/Value需要格式都是String,但是Value上報了一個JSON數組。
Spans需要格式為JSON Array,但是實際上報了一個JSON Object格式數據。
根據HTTP錯誤信息排查
Apisix通過OpenTelemetry上報數據失敗,提示信息:
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轉發到可觀測鏈路 OpenTelemetry 版服務。
gRPC上報方式報錯
如果是數據是通過gRPC方式上報,可以觀察控制臺或者日志文件中打印的gRPC返回狀態碼,狀態碼的含義請參見gRPC狀態碼定義。
常見的報錯排查方式如下:
上報超時
報錯信息:
Failed to export spans. The request could not be executed. Full error message: timeout
排查方案:
檢查網絡聯通性。
檢查SDK/Agent的上報超時時間設置,嘗試調大超時時間。
權限驗證失敗
報錯信息:
Failed to export spans. Server responded with gRPC status code 7. Error message:
排查方案:
檢查gRPC請求頭中的Authentication字段和可觀測鏈路 OpenTelemetry 版控制臺的鑒權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 版服務端發送了Metrics數據。
解決方案:關閉Skywalking的Metrics上報。
控制臺鏈路數據不符合預期
Skywalking Agent/SDK上報
為什么應用中的部分框架和中間件沒有被埋點?
檢查Skywalking Agent插件目錄下是否存在沒有被埋點的框架的插件,這些插件的版本是否和應用中使用到的框架的版本一致。
例如Skywalking 8以上的版本的插件路徑為:${agent-path}/agent-8.x/plugins。如果沒有插件,則可以在bootstrap-plugins或者optional-plugins文件夾下將需要的插件復制到plugins目錄,或者在社區中下載需要的插件。
檢查應用是否只添加了Skywalking的Agent,如果同時添加多個Agent可能會導致埋點邏輯沖突。
為什么調用鏈路出現斷鏈?
檢查調用鏈是否為異步場景,如果是異步場景,解決方案請參見Skywalking跨線程解決方案。
為什么整個調用鏈的長度比預期要短?
可以調整Skywalking Agent上報的Span個數,修改${agent-path}/agent-8.x/config/agent.config中的
collector.agent.service_graph.batch_size配置項,調大該值。
OpenTelemetry Agent/SDK
為什么我的調用鏈路出現斷鏈現象?
檢查是否存在異步調用的情況,建議升級OpenTelemetry版本或者使用OpenTelemetry的SpanLinks API來解決異步調用斷鏈的問題,Link可以讓兩個Span關聯起來(設置某個span的parent span),或者通過Context Propagation把Trace Context顯式傳遞給另一個應用。