使用开源客户端上报数据后,如果遇到控制台或日志中打印了错误日志,或者控制台上没有观察到报错数据,可以根据本文档进行问题排查。
控制台没有数据的可能原因:
控制台链路数据异常问题:
网络连通性排查
确认代码中的上报地址是内网地址还是公网地址,如果使用内网地址请保证上报服务器和上报地址处于阿里云同一个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显式传递给另一个应用。