Monitorar solicitações de rede HTTP/S

Um trace de solicitação de rede HTTP/S é um relatório que captura o tempo entre quando seu app envia uma solicitação a um endpoint do serviço e quando a resposta desse endpoint é concluída. O Monitoramento de desempenho coleta as seguintes métricas para cada endpoint ao qual seu app envia uma solicitação:

  • Tempo de resposta: é o período entre a criação da solicitação e o recebimento completo da resposta.

  • Tamanho do payload: é o tamanho em bytes do payload da rede salvo e enviado pelo app.

  • Taxa de sucesso: é a porcentagem de respostas bem-sucedidas em relação ao total de respostas com o objetivo de medir falhas na rede ou no servidor.

O Monitoramento de desempenho coleta automaticamente métricas para solicitações de rede que usam as seguintes bibliotecas de rede:

Swift

  • URLSession
  • URLConnection

Objective-C

  • NSURLSession
  • NSURLConnection

Esse monitoramento está pronto para uso e inclui a maioria das solicitações de rede do seu aplicativo. No entanto, algumas solicitações podem não ser reportadas ou é possível que você use uma biblioteca diferente para fazer solicitações de rede. Nestes casos, use a API Performance Monitoring para equipar manualmente as solicitações de rede personalizadas.

Agregação de dados em padrões de URL

O Monitoramento de desempenho agrega dados automaticamente para solicitações de rede semelhantes para ajudar você a entender as tendências no desempenho da solicitação de rede.

Para cada solicitação, o Firebase verifica se o URL da solicitação de rede corresponde a um padrão de URL. Se o URL de solicitação corresponder a um padrão de URL, o Firebase agregará automaticamente os dados da solicitação no padrão do URL. O Firebase exibe padrões de URL e seus dados agregados na guia Rede na seção Desempenho no Console do Firebase.

O que é um padrão de URL?

Um padrão de URL contém um domínio + um padrão que pode corresponder a um caminho de URL, como example.com/*/animals/**, por exemplo.

  • Os padrões de URL podem conter os seguintes segmentos de caminho:

    • texto simples - corresponde a uma string exata
    • * - corresponde a qualquer string em um único segmento de caminho
    • ** - corresponde a um sufixo de caminho arbitrário
  • Os padrões de URL podem ser:

Por exemplo: qualquer uma das seguintes solicitações de URL pode corresponder ao padrão de URL example.com/*/animals/**.

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

O Firebase mapeia cada solicitação para apenas um padrão de URL. Se você tiver configurado padrões de URL personalizado, o Firebase tentará corresponder os URLs de solicitação a esses padrões primeiro. Se o Firebase não encontrar um padrão de URL personalizado correspondente, ele corresponderá um URL de solicitação ao padrão de URL automático mais representativo. Saiba mais sobre padrões de URL automático e personalizado nas seções a seguir.

Padrões de URL automático

Sem qualquer configuração de usuário, o Monitoramento de desempenho tenta refletir o comportamento de uso mais recente do seu app, fazendo a correspondência entre suas solicitações e os padrões de URL automático.

Como funciona a correspondência de padrões de URL automático?

O Firebase faz a correspondência entre cada solicitação e o padrão de URL automático mais representativo derivado das solicitações enviadas pelo seu app. Observe, no entanto, que ele tenta corresponder os URLs de solicitação aos padrões de URL personalizado configurados primeiro.

Veja a seguir um exemplo básico de como o Firebase tenta corresponder as solicitações ao padrão de URL automático mais representativo para seu app.

  1. Seu app envia muitas solicitações para URLs, como:

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

    O Firebase determina que example.com/germany/** é um padrão de solicitação comum para seu app e o adiciona como um padrão de URL automático em seu projeto.

    O Firebase agrega os dados das solicitações no padrão de URL automático example.com/germany/** para qualquer nova solicitação correspondente ao padrão.

  2. Depois de uma semana, a maioria das solicitações do seu aplicativo vai para example.com/germany/animals/bears e example.com/germany/animals/birds. Assim, o Firebase deriva um padrão de URL mais representativo de example.com/germany/animals/**.

    O Firebase agrega os dados das solicitações somente no novo padrão de URL para quaisquer novas solicitações correspondentes a esse novo padrão. O Firebase continua agregando dados para solicitações a example.com/germany/cars em example.com/germany/**.

  3. No entanto, nas semanas seguintes, as solicitações do seu aplicativo para example.com/germany/animals/bears e example.com/germany/animals/birds diminuirão substancialmente. O Firebase determina que example.com/germany/animals/** não representa o comportamento de uso mais recente do seu aplicativo e, por isso, começa a corresponder essas duas solicitações a example.com/germany/**.

    O Firebase não agrega mais dados de solicitação em example.com/germany/animals/** porque ele não é mais o padrão de URL automático mais representativo.

Como a correspondência de padrões de URL automático é dinâmica, lembre-se do seguinte:

  • As correspondências e os dados agregados de solicitações anteriores não são afetados por novos padrões de URL. O Firebase não agrega novamente os dados de solicitação de forma retroativa.

  • Apenas solicitações futuras são afetadas por novos padrões de URL. O Firebase mapeia cada nova solicitação para o padrão de URL automático mais representativo. Observe, no entanto, que ele tenta corresponder os URLs de solicitação aos padrões de URL personalizado configurados primeiro.

Visualizar padrões de URL automático e seus dados

A seção Desempenho do console lista padrões de URL automático na guia Rede > Todos. É possível que existam padrões de URL com um rótulo Sem classificação. Esses são os padrões de URL automático "gerais" em que o Firebase pode agregar dados para solicitações que não correspondem a nenhum padrão de URL mais específico.

Quando o período de retenção de dados termina para os dados agregados em um padrão de URL, o Firebase exclui esses dados. Se todos os dados agregados em um padrão de URL automático expirarem, o Firebase excluirá esse padrão do Console do Firebase.

Padrões de URL personalizado

É possível criar padrões de URL personalizado para monitorar padrões de URL específicos que o Firebase não captura com a própria correspondência de padrão de URL automático. Por exemplo, é possível usar um padrão de URL personalizado para solucionar problemas de um URL específico ou monitorar um conjunto específico de URLs ao longo do tempo.

Como funciona a correspondência de padrões de URL personalizado?

O Firebase tenta associar URLs de solicitação a qualquer padrão de URL personalizado configurado antes de retornar à correspondência automática de padrões de URL. O Firebase agrega os dados das solicitações no padrão de URL personalizado para qualquer solicitação correspondente a um padrão.

Se o URL de uma solicitação corresponder a mais de um padrão de URL personalizado, o Firebase mapeia a solicitação para o mais específico, de acordo com a seguinte ordem de especificidade: texto simples > * > ** da esquerda para a direita no caminho . Por exemplo, uma solicitação para example.com/books/dog corresponde a dois padrões de URL personalizado:

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

No entanto, o padrão example.com/books/* é o padrão de URL correspondente mais específico, porque o segmento books mais à esquerda em example.com/books/* tem precedência sobre o segmento * mais à esquerda em example.com/*/dog.

Ao criar um novo padrão de URL personalizado, esteja ciente do seguinte:

  • As correspondências e os dados agregados de solicitações anteriores não são afetados pela criação de um novo padrão de URL personalizado. O Firebase não agrega novamente os dados de solicitação de forma retroativa.

  • Apenas solicitações futuras são afetadas pela criação de um novo padrão de URL personalizado. Talvez seja necessário aguardar até 12 horas para que o Monitoramento de desempenho colete e agregue dados em um novo padrão de URL personalizado.

Criar um padrão de URL personalizado

Crie um padrão de URL personalizado na seção Desempenho do console, na guia Rede. O membro do projeto precisa ser um proprietário ou editor para criar um novo padrão de URL personalizado. No entanto, todos os membros do projeto podem visualizar padrões de URL personalizado e seus dados agregados.

Para criar um padrão de URL personalizado, comece com um domínio e use a seguinte sintaxe de segmento de caminho para criar um padrão que possa corresponder a caminhos de URL:

  • texto simples - corresponde a uma string exata
  • * - corresponde a qualquer string em um único segmento de caminho
  • ** - corresponde a um sufixo de caminho arbitrário

A tabela a seguir descreve algumas possíveis correspondências de padrões de URL personalizado:

Para corresponder a... Crie um padrão de URL personalizado, como... Os exemplos correspondem a este padrão de URL
Um URL exato example.com/foo/baz example.com/foo/baz
Qualquer segmento de caminho único (*) 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

Observação: esse padrão não será igual a example.com/foo.

Um sufixo de caminho arbitrário (**) 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

Visualizar padrões de URL personalizado e seus dados

A seção Desempenho do console lista padrões de URL personalizado que têm dados agregados na guia Rede > Todos e na guia Rede > Personalizar. Se um padrão de URL personalizado não tiver dados agregados, ele só aparecerá na guia Rede> Personalizar.

Quando o período de retenção de dados termina para os dados agregados em um padrão de URL, o Firebase exclui esses dados. Se todos os dados agregados em um padrão de URL automático expirarem, o Firebase não excluirá esse padrão do Console do Firebase. Em vez disso, o Firebase continuará a listar padrões "vazios" na guia Rede > Todos.

Remover um padrão de URL personalizado

Diferentemente dos padrões de URL automático, é possível remover padrões de URL personalizado do seu projeto.

  1. A partir da seção Desempenho do console, vá para a guia Rede > Personalizar .

  2. Passe o cursor sobre a linha do padrão de URL personalizado que você quer remover.

  3. Clique em à direita da linha e confirme a remoção na caixa de diálogo.

Ao remover um padrão de URL personalizado, esteja ciente do seguinte:

  • Todas as solicitações futuras são mapeadas para o próximo padrão de URL personalizado mais específico correspondente. Se o Firebase não encontrar padrões de URL personalizado correspondentes, ele retornará à correspondência automática de padrões de URL.

  • As correspondências e os dados agregados de solicitações anteriores não são afetadas pela remoção de um padrão de URL personalizado.

    É possível acessar um padrão de URL personalizado removido e seus dados agregados na guia Rede > Todos até o final do período aplicável de retenção de dados. Quando todos os dados agregados no padrão de URL personalizado removido expirarem, o Firebase excluirá o padrão.

  • A guia Personalizar > Rede não lista padrões de URL removidos.

Como adicionar monitoramento para solicitações de rede personalizadas

Para equipar manualmente as solicitações de rede personalizadas no Monitoramento de desempenho, adicione o seguinte código:

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];
}

As solicitações de rede HTTP/S capturadas especificamente dessa maneira aparecem no Console do Firebase com as solicitações de rede que o Monitoramento de desempenho captura automaticamente.

Monitorar traces de solicitação de rede no console

  1. No Console do Firebase, acesse o painel de Desempenho.

  2. Clique na guia Rede. Após isso, é possível realizar as seguintes ações:

    • Ver um relatório rápido dos dados coletados para todas as solicitações de rede.

    • Clicar em um endpoint específico para revisar os dados dele com mais detalhes.

    • Usar o botão Filtro no canto superior esquerdo do painel para realizar a filtragem básica dos dados por atributo.

  3. Se você clicar em um endpoint específico, o console exibirá uma visão geral dos dados coletados em cartões métricos.

    • Use as opções no canto superior direito do painel para:

      • Ver os dados como agregados, ao longo do tempo, ou para cada versão do seu aplicativo.
      • Ver a taxa de sucesso de um endpoint como agregada, ao longo do tempo, ou para cada versão do seu aplicativo.
    • Usar o botão Filtro no canto superior esquerdo do painel para realizar a filtragem básica dos dados por atributo.

  4. Para qualquer métrica, clique em Visualizar mais para ler informações mais detalhadas sobre os dados coletados e usar recursos de análise mais avançados. Por exemplo, é possível filtrar e segmentar os dados por atributo e visualizar os dados no contexto de uma sessão de uso de app.

A seguir