排查 EDOT iOS 代理故障
本页面提供在使用 Elastic OpenTelemetry 分发版 (EDOT) SDK 对 iOS 应用程序进行插桩时,解决常见问题的指导。
在排查 EDOT iOS 代理故障时,请确保您的应用程序与该代理的支持的技术兼容。
如果您的应用程序正在运行,但 Elastic 未收到任何遥测数据,则可能是 SDK 未能将数据发送到配置的端点。有关连接性故障排查,请参阅连接性问题。如果 Kibana 中未显示遥测数据,请参阅Kibana 中看不到应用级遥测数据或Kibana 中无数据显示。
当 SDK 无法导出数据时,您可能会注意到以下迹象
Elastic 中没有显示遥测数据。
应用程序日志显示如下错误
[ElasticOtelExporter] Failed to send spans: Error Domain=NSURLErrorDomain Code=-1004 "Could not connect to the server"OpenTelemetry Collector 或 Elastic 端点显示未收到数据。
这通常是因为 iOS 应用程序因以下原因无法连接到配置的 OTLP 端点:
- 端点 URL 或端口不正确。
- TLS/HTTPS 证书问题。
- 在
Info.plist中缺少 App Transport Security (ATS) 配置。
请尝试以下步骤来解决该问题
验证 SDK 配置中的端点 URL 和端口。
如果使用带有自签名证书的 HTTPS,请将该证书添加到 iOS 信任存储或配置 ATS 异常。
将所需的 ATS 异常添加到您应用程序的
Info.plist中。例如<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
如果数据仅在应用程序处于前台时显示,则该问题可能与 iOS 后台执行限制有关。
以下行为表明应用程序移至后台时遥测停止
遥测数据仅在应用程序处于前台时显示。
应用程序进入后台后丢失 Span 或指标。
出现此问题的原因可能是 iOS 管理后台任务和网络活动的方式
- iOS 会主动挂起后台网络活动。如果应用程序被挂起,SDK 将无法刷新(flush)遥测数据。
请遵循以下建议,以确保数据导出按预期继续
确保导出间隔足够短,以便在挂起之前完成刷新。
如果适合您的应用程序,请使用 iOS 后台模式(例如
Background fetch、Background processing)。对于崩溃或冷启动遥测,请依赖批处理,并在应用程序下次恢复时重试。
如果发送了遥测数据,但缺少设备型号、操作系统版本或应用程序版本等关键属性,则可能是资源检测未正常工作。
当资源检测不完整时,您可能会遇到以下情况
- Elastic 中显示了 Span 或指标,但缺少预期的资源属性(例如设备型号、操作系统版本、应用程序版本)。
常见原因包括禁用了资源检测器或缺少权限
- 可能未启用资源检测器,或未授予所需的权限。
要恢复完整的元数据报告,请验证以下内容
确保在 SDK 初始化中启用了 iOS 资源检测器。
验证您的构建是否包含
DeviceResourceDetector和OSResourceDetector。检查隐私权限(例如,如果使用了网络或设备标识符)。
如果在集成 SDK 后应用程序崩溃或显著变慢,则原因可能是初始化或导出器配置。
以下症状可能表明存在与 SDK 相关的性能或初始化问题
启用 SDK 后,应用程序在启动后立即崩溃。
第一个屏幕出现前有明显的延迟。
崩溃或启动缓慢通常由以下原因之一引起
SDK 在主线程上进行繁重的配置初始化。
导出器配置错误并阻塞了启动。
请尝试以下步骤来解决初始化和启动问题
尽可能在后台线程上初始化 SDK。
使用异步导出器。
从最小化配置开始,逐步添加导出器以隔离问题。
如果问题仍然存在
查看 iOS SDK 参考文档。
为 Collector 启用调试日志以及 为 SDK 启用调试日志。
重要提示将您的完整调试日志上传到 GitHub Gist 之类的服务,以便我们分析问题。日志应包含从应用程序启动直到执行第一个请求的所有内容。
如果您是拥有支持合同的现有 Elastic 客户,请在 Elastic 支持门户中创建工单。其他用户可以在 APM 讨论论坛发帖。