网络监控
通过状态码、延迟和端点指标,监控 Android 和 iOS 中的 HTTP 请求、响应和失败。
概述
Measure 会捕获应用的网络请求、响应和失败,帮助您了解 API 的表现。
每个请求都会记录 URL、HTTP 方法、状态码、延迟和失败原因。为了展示聚合指标,URL 会自动归组为端点模式。
请求和响应的 Header/body 只会针对您主动选择的 URL 采集,因此默认不会收集敏感数据。可以在 Dashboard 的 HTTP 活动设置中选择这些 URL。
除了 HTTP 事件,Measure 还会记录连接变化,便于判断问题是否来自网络本身。
自动追踪
来自以下客户端的请求会被自动捕获。
Android
添加 Measure Android Gradle 插件启用自动采集。来自 OkHttp(版本 4.7.0 到 5.3.2)和 HttpURLConnection(SDK 0.18.0 及更高版本)的请求会被自动采集。
iOS
来自 URLSession 的请求会被自动采集,包括使用它的第三方库发出的请求。
添加拦截器
一些客户端需要一次性设置,才能采集它们发出的请求。
Retrofit (Android)
Retrofit 在 OkHttp 上运行,但将其作为传递依赖项拉入,并且自动检测无法达到传递依赖项。如果您的项目仅依赖于 Retrofit,请使用以下方法之一来跟踪请求。
将 OkHttp 声明为直接依赖项。 将 OkHttp 版本固定在您的 build.gradle.kts 中。之后自动采集无需更改代码即可工作:
dependencies {
implementation("com.squareup.retrofit2:retrofit:<version>")
implementation("com.squareup.okhttp3:okhttp:<version>")
}手动添加拦截器。 构建供 Retrofit 使用的 OkHttpClient,并添加 Measure 的拦截器和事件监听器工厂:
val client = OkHttpClient.Builder()
.addInterceptor(MeasureOkHttpApplicationInterceptor())
.eventListenerFactory(MeasureEventListenerFactory(null))
.build()
val retrofit = Retrofit.Builder()
.baseUrl("https://api.example.com")
.client(client)
.build()手动跟踪请求
对于任何未自动采集的 HTTP 客户端,请使用 trackHttpEvent 自行记录每个请求。使用 getCurrentTime 记录开始和结束时间,这样即使设备时钟发生变化,duration 也能保持正确。
import sh.measure.android.Measure
val startTime = Measure.getCurrentTime()
// make the request
val endTime = Measure.getCurrentTime()
Measure.trackHttpEvent(
url = "https://api.example.com/users",
method = "GET",
startTime = startTime,
endTime = endTime,
statusCode = 200,
)import Measure
let startTime = UInt64(Measure.getCurrentTime())
// make the request
let endTime = UInt64(Measure.getCurrentTime())
Measure.trackHttpEvent(
url: "https://api.example.com/users",
method: "GET",
startTime: startTime,
endTime: endTime,
statusCode: 200
)配置选项
使用 Dashboard 中的 Adaptive Capture 控制采集哪些网络数据。这样无需发布应用,就可以修改配置。
- 采样率:收集的 HTTP 事件的比例。默认收集所有这些。
- 收集或忽略 URL:打开或关闭特定 URL 的收集。
- 请求 body 采集:记录请求 body 和请求 Header 的 URL。默认关闭。
- 响应 body 采集:记录响应 body 和响应 Header 的 URL。默认关闭。
- 屏蔽的 Header:永远不会采集的 Header。
Authorization、Cookie和其他敏感 Header 始终会被屏蔽。
看HTTP 活动有关每个设置的详细信息。