Monitorar solicitações de rede HTTP/S

Um trace de solicitação de rede HTTP/S é um relatório que captura o tempo que transcorre entre o momento em que seu app envia uma solicitação a um endpoint do serviço e o instante em que 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:

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 instrumentar 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 mais um padrão que pode corresponder a um caminho de URL, por exemplo, example.com/*/animals/**.

  • 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 coincidir com o 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 personalizados, 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áticos e personalizados nas seções a seguir.

Padrões de URL automáticos

Sem que você tenha que configurar algo, 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áticos.

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

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 personalizados 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 com padrões de URL automáticos é 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 personalizados configurados primeiro.

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

A seção Desempenho do console lista padrões de URL automáticos 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áticos "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 personalizados

É possível criar padrões de URL personalizados 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 com padrões de URL personalizados?

O Firebase tenta associar URLs de solicitação a qualquer padrão de URL personalizado configurado antes de recorrer às correspondências com padrões de URL automáticos. 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 personalizados:

  • 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.

É possível criar até 400 padrões de URL personalizados por aplicativo e até 100 padrões de URL personalizados por domínio para esse aplicativo.

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 com padrões de URL personalizados:

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 personalizados e seus dados

A seção Desempenho do console lista padrões de URL personalizados 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áticos, é possível remover padrões de URL personalizados 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 personalizados correspondentes, ele recorrerá às correspondências com padrões de URL automáticos.

  • 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:

Java

HttpMetric metric =
        FirebasePerformance.getInstance().newHttpMetric("https://www.google.com",
                FirebasePerformance.HttpMethod.GET);
final URL url = new URL("https://www.google.com");
metric.start();
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestProperty("Content-Type", "application/json");
try {
    DataOutputStream outputStream = new DataOutputStream(conn.getOutputStream());
    outputStream.write(data);
} catch (IOException ignored) {
}
metric.setRequestPayloadSize(data.length);
metric.setHttpResponseCode(conn.getResponseCode());
printStreamContent(conn.getInputStream());

conn.disconnect();
metric.stop();

Kotlin+KTX

val metric = FirebasePerformance.getInstance().newHttpMetric("https://www.google.com",
        FirebasePerformance.HttpMethod.GET)
val url = URL("https://www.google.com")
metric.start()
val conn = url.openConnection() as HttpURLConnection
conn.doOutput = true
conn.setRequestProperty("Content-Type", "application/json")
try {
    val outputStream = DataOutputStream(conn.outputStream)
    outputStream.write(data)
} catch (ignored: IOException) {
}

metric.setRequestPayloadSize(data.size.toLong())
metric.setHttpResponseCode(conn.responseCode)
printStreamContent(conn.inputStream)

conn.disconnect()
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