监控 HTTP/HTTPS 网络请求

HTTP/HTTPS 网络请求跟踪记录报告的是应用向服务端点发出请求与来自该端点的响应完成这两个时间点之间的时长。对于您的应用向其发出请求的任何目标端点,性能监控记录以下几项指标:

  • 响应时间 - 从请求发出到收到完整响应之间的时间间隔

  • 载荷大小 - 应用下载和上传的网络载荷的字节数

  • 成功率 - 成功响应次数占总响应次数的百分比(用以衡量网络或服务器故障情况)

性能监控自动收集使用以下网络库的网络请求的指标:

Swift

  • URLSession
  • URLConnection

Objective-C

  • NSURLSession
  • NSURLConnection

此监控功能开箱即用,可为您的应用监控大多数网络请求。但是,它可能不会报告某些请求,或者您可能会使用其他库来发出网络请求。在这些情况下,您可以使用 Performance Monitoring API 手动对自定义网络请求进行插桩

在网址格式下汇总数据

Firebase 性能监控自动汇总类似网络请求的数据,帮助您了解您的网络请求表现的趋势。

Firebase 会检查每个网络请求的网址是否与某个网址格式匹配。如果请求网址与某个网址格式匹配,则 Firebase 会在该网址格式下自动汇总请求的数据。Firebase 会在 Firebase 控制台“性能”部分网络标签页中显示网址格式及其汇总数据。

什么是网址格式?

网址格式包含一个网域以及一个可与网址路径匹配的格式,例如:example.com/*/animals/**

  • 网址格式可包含以下路径段:

    • 纯文本 - 与精确的字符串匹配
    • * - 与单个路径段中的任何字符串匹配
    • ** - 与任意路径后缀匹配
  • 网址格式可以是以下两者之一:

例如,以下任何一个网址请求都可能与网址格式 example.com/*/animals/** 匹配。

  • example.com/singapore/animals
  • example.com/australia/animals/spiders
  • example.com/australia/animals/marsupials/koala.png

Firebase 将每个请求仅映射到一个网址格式。如果您配置了任何自定义网址格式,则 Firebase 首先会尝试将请求网址与这些格式匹配。如果 Firebase 找不到自定义网址格式匹配,它会将请求网址与最具代表性的自动网址格式匹配。如需详细了解自动网址格式和自定义网址格式,请参阅以下部分。

自动网址格式

在未进行任何配置的情况下,性能监控会尝试将应用的请求与自动网址格式匹配,以反映应用的最新使用行为。

自动网址格式匹配的工作方式

Firebase 会将每个请求与源自您的应用所发送请求的最具代表性自动网址格式相匹配。不过请注意,Firebase 首先会尝试将请求网址与任何配置的自定义网址格式相匹配。

以下基本示例演示了 Firebase 如何尝试将请求与您的应用的最具代表性自动网址格式相匹配。

  1. 您的应用向如下所示的网址发送了许多请求:

    • example.com/germany/animals/bears
    • example.com/germany/animals/birds
    • example.com/germany/cars

    Firebase 确定 example.com/germany/** 是您的应用的常见请求格式,并将它添加为您项目中的自动网址格式。

    对于此网址格式中的任何新匹配请求,Firebase 会在自动网址格式 example.com/germany/** 下汇总请求的数据。

  2. 一周后,应用的大部分请求都会汇总至 example.com/germany/animals/bearsexample.com/germany/animals/birds。因此,Firebase 会派生出更具代表性的网址格式 example.com/germany/animals/**

    对于此新网址格式中的任何新匹配请求,Firebase 只会在新网址格式下汇总请求的数据。Firebase 会继续将请求的数据汇总到 example.com/germany/** 下的 example.com/germany/cars 中。

  3. 不过,在接下来的几周内,example.com/germany/animals/bearsexample.com/germany/animals/birds 中的应用请求会大幅减少。Firebase 确定 example.com/germany/animals/** 不能代表您应用的最新使用行为,因此 Firebase 会将这两个请求重新与 example.com/germany/** 匹配。

    Firebase 不会在 example.com/germany/animals/** 下汇总任何其他请求数据,因为该格式不再是最具代表性的自动网址格式。

由于自动网址格式匹配是动态的,因此请注意以下事项:

  • 过往请求中的匹配项和汇总数据不会受到新网址格式的影响。Firebase 不会追溯重新汇总请求数据。

  • 只有未来的请求会受到新网址格式的影响。Firebase 会将每个新请求映射到最具代表性的自动网址格式。不过请注意,Firebase 首先会尝试将请求网址与任何配置的自定义网址格式相匹配。

查看自动网址格式及其数据

控制台“性能”部分网络 > 全部标签页中列出了自动网址格式。您可能会看到带有未分类标签的网址格式。这些格式是“广泛的”自动网址格式,Firebase 可在这些格式下汇总与任何更具体的网址格式不匹配的请求数据。

如果在某个网址格式下汇总的数据的数据保留期结束,Firebase 就会从该网址格式中删除这些数据。如果在某个自动网址格式下汇总的所有数据都过期,Firebase 就会从 Firebase 控制台删除该网址格式。

自定义网址格式

您可以创建自定义网址格式来监控 Firebase 使用其派生的自动网址格式匹配未捕获到的具体网址格式。例如,您可以使用自定义网址格式对特定网址进行问题排查或在一段时间内监控一组特定的网址。

自定义网址格式匹配的工作方式

在回退为使用自动网址格式匹配之前,Firebase 会尝试将请求网址与任何配置的自定义网址格式相匹配。对于自定义网址格式中的任何匹配请求,Firebase 会在自定义网址格式下汇总请求的数据。

如果某个请求的网址与多个自定义网址格式匹配,则 Firebase 会按以下特定顺序,在路径中从左到右将该请求映射到最具体的自定义网址格式纯文本 > * > **。例如,example.com/books/dog 中的一个请求与两个自定义网址格式匹配:

  • example.com/books/*
  • example.com/*/dog

然而,格式 example.com/books/* 是最具体的匹配网址格式,因为 中最左边的片段 books 的优先级高于 example.com/*/dog 中最左边的片段 *

创建新的自定义网址格式时,请注意以下事项:

  • 创建新的自定义网址格式不会影响过往请求中的匹配项和汇总数据。Firebase 不会追溯重新汇总请求数据。

  • 创建新的自定义网址请求只会影响未来的请求。您最长可能需要等待 12 个小时,让性能监控在新的自定义网址格式下收集并汇总数据。

创建自定义网址格式

在控制台“性能”部分网络标签页中创建自定义网址格式。项目成员必须是 Owner 或 Editor 才能创建新的自定义网址格式;但是,所有项目成员都可以查看自定义网址格式及其汇总数据。

如需创建自定义网址格式,请先创建网域,然后使用以下路径段语法创建一个与网址路径匹配的格式。

  • 纯文本 - 与精确的字符串匹配
  • * - 与单个路径段中的任何字符串匹配
  • ** - 与任意路径后缀匹配

下表介绍了一些可能的自定义网址格式匹配。

要匹配… 创建自定义网址格式,例如… 与此网址格式匹配的示例
确切网址 example.com/foo/baz example.com/foo/baz
任意单个路径段 (*) example.com/*/baz example.com/foo/baz
example.com/bar/baz
example.com/*/*/baz example.com/foo/bar/baz
example.com/bah/qux/baz
example.com/foo/* example.com/foo/baz
example.com/foo/bar

注意:此格式与 example.com/foo 不匹配。

任意路径后缀 (**) example.com/foo/** example.com/foo
example.com/foo/baz
example.com/foo/baz/more/segments
subdomain.example.com/foo.bar/** subdomain.example.com/foo.bar
subdomain.example.com/foo.bar/baz
subdomain.example.com/foo.bar/baz/more/segments

查看自定义网址格式及其数据

控制台“性能”部分网络 > 所有标签页和网络 > 自定义标签页中同时列出了具有汇总数据的自定义网址格式。如果自定义网址格式不含任何汇总数据,则它只会显示在网络 > 自定义标签页中。

如果在某个网址格式下汇总的数据的数据保留期结束,Firebase 就会从该网址格式中删除这些数据。如果在某个自定义网址格式下汇总的所有数据都过期,Firebase 不会从 Firebase 控制台删除自定义网址格式,而是继续在网络 > 自定义标签页中列出“无数据”的自定义网址格式。

移除自定义网址格式

与自动网址格式不同的是,您可以从您的项目中移除自定义网址格式。

  1. 从控制台的“性能”部分转到网络 > 自定义标签页。

  2. 将鼠标悬停在您要移除的自定义网址格式的行上。

  3. 点击该行最右侧的 delete,然后在对话框中确认移除。

移除自定义网址格式时,请注意以下事项:

  • 未来的所有请求都会映射到下一个最具体的自定义网址格式匹配。如果 Firebase 找不到自定义网址格式匹配,则会回退为使用自动网址格式匹配

  • 移除自定义网址格式不会影响过往请求中的匹配项和汇总数据

    在适用的数据保留期结束之前,您仍然可以在网络 > 全部标签页中访问已移除的自定义网址格式及其汇总数据。如果在已移除的自定义网址格式下汇总的所有数据都过期,则 Firebase 会删除该自定义网址格式。

  • 网络 > 自定义标签页不会列出任何已移除的自定义网址格式。

为自定义网络请求添加监控功能

如需在性能监控中手动对自定义网络请求进行插桩,请添加类似于以下内容的代码:

Swift

guard let metric = HTTPMetric(url: "https://www.google.com", httpMethod: .get) else { return }

metric.start()
guard let url = URL(string: "https://www.google.com") else { return }
let request: URLRequest = URLRequest(url:url)
let session = URLSession(configuration: .default)
let dataTask = session.dataTask(with: request) { (urlData, response, error) in
        if let httpResponse = response as? HTTPURLResponse {
         metric.responseCode = httpResponse.statusCode
        }
        metric.stop()
}
dataTask.resume()

Objective-C

@property (nonatomic) FIRHTTPMetric *metric;

- (void)beginManualNetworkInstrumentation {
  self.metric =
      [[FIRHttpMetric alloc] initWithURL:[NSURL URLWithString:@"https://www.google.com"]
                              HTTPMethod:FIRHTTPMethodGET];

  [self.metric start];

  NSURLRequest *request =
      [NSURLRequest requestWithURL:[NSURL URLWithString:@"https://www.google.com"]];
  NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request
                                                                delegate:self];
  [connection resume];
}

- (void)connection:(NSURLConnection *)connection
    didReceiveResponse:(NSURLResponse *) response {
  NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)response
  self.metric.responseCode = httpResponse.statusCode;
  [self.metric stop];
}

您通过这种方式专门捕获的 HTTP/HTTPS 网络请求会与性能监控自动捕获的网络请求一起显示在 Firebase 控制台中。

在控制台中监控网络请求跟踪记录

  1. 在 Firebase 控制台中,转到性能信息中心

  2. 点击“网络”标签页,然后您就可以执行以下操作:

    • 查看针对所有网络请求收集的数据的简明报告。

    • 点击特定端点以更详细地查看该端点的数据。

    • 使用信息中心左上角的过滤add按钮,按特性对数据执行基本过滤。

  3. 点击特定端点,控制台即会在指标卡片上显示所收集数据的简要信息。

    • 使用信息中心右上角的选项执行以下操作:

      • 查看按各种方式整理的数据,例如“汇总”数据、“随时间变化情况”或应用的各个“版本”的数据
      • 查看按以下某种方式整理的端点的成功率:“汇总”成功率、“随时间变化情况”成功率或应用的各个“版本”的成功率
    • 使用信息中心左上角的过滤add按钮,按特性对数据执行基本过滤。

  4. 对于任何指标,点击查看更多即可查看有关已收集数据的详细信息并使用更丰富的分析功能。例如,您可以按特性过滤和细分数据,并在一个有关应用使用情况的会话中查看数据。

后续步骤