支持框架
Elastic APM iOS代理基于opentelementry-swift SDK构建。这意味着任何通过Open Telemetry进行检测的框架或库都将被Elastic APM iOS代理捕获。此外,添加到应用程序中的任何自定义OTel检测都将被代理采集。
初始版本提供以下自动检测功能:
- URLSession
- CPU和内存使用情况
- 网络连接状态
- 设备和应用属性
主要重点是从移动应用角度提供后端服务的可视化,自动显示从移动应用开始的分布式追踪。
下载代理
代理最初通过Swift Package Manager提供。可以通过Xcode SPM依赖管理器或Package.swift文件添加到iOS项目中。
在Package.swift依赖项中添加:
1
2
3
|
dependencies: [
.package(name: "apm-agent-ios", url: "https://github.com/elastic/apm-agent-ios", .branch("v0.1.0"))
]
|
并将"iOSAgent"添加到需要检测的目标中:
1
2
3
4
5
6
|
.target(
name: "MyLibrary",
dependencies: [
.product(name: "iOSAgent", package: "apm-agent-ios")
]
)
|
代理API
Elastic APM iOS代理有以下项目要求:
- 仅兼容Swift语言
- 需要Swift v5.3
- 最低要求iOS v11
代理API相当简洁。提供配置对象,允许为本地或云解决方案设置代理。
如果使用SwiftUI构建应用,可以按以下方式设置代理:
1
2
3
4
5
6
7
8
9
10
|
struct MyApp: App {
init() {
var config = AgentConfiguration()
config.collectorAddress = "127.0.0.1"
config.collectorPort = 8200
config.collectorTLS = false
config.secretToken = "<secret token>"
Agent.start(with: config)
}
}
|
代理还捕获通过OpenTelementry-Swift API记录的任何数据,包括追踪和指标。以下是启动简单追踪的示例:
1
2
3
4
5
6
7
8
9
10
11
|
let instrumentationLibraryName = "SimpleExporter"
let instrumentationLibraryVersion = "semver:0.1.0"
var instrumentationLibraryInfo = InstrumentationLibraryInfo(name: instrumentationLibraryName, version: instrumentationLibraryVersion)
var tracer = OpenTelemetrySDK.instance.tracerProvider.get(instrumentationName: instrumentationLibraryName, instrumentationVersion: instrumentationLibraryVersion) as! TracerSdk
func simpleSpan() {
let span = tracer.spanBuilder(spanName: "SimpleSpan").setSpanKind(spanKind: .client).startSpan()
span.setAttribute(key: sampleKey, value: sampleValue)
Thread.sleep(forTimeInterval: 0.5)
span.end()
}
|
总结与展望
当前版本为预览版,可能会引入破坏性变更。该移动解决方案的推出为社区提供了参与方向指导的机会,欢迎通过讨论论坛或GitHub仓库提供反馈。