Elastic APM iOS代理技术预览版发布

本文介绍了Elastic APM iOS代理技术预览版的发布,详细说明其基于OpenTelemetry框架的自动检测功能、支持的Swift版本要求、安装配置方法以及分布式追踪实现方案,为移动应用性能监控提供新解决方案。

支持框架

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仓库提供反馈。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计