Exportar dados do Monitoramento de desempenho para o BigQuery

É possível exportar dados do Performance Monitoring de apps para Apple e Android para o BigQuery para análise posterior. Com o BigQuery, é possível fazer análises usando o BigQuery SQL, exportar os dados para outro provedor de nuvem ou usá-los para seus modelos personalizados de ML.

Ativar a exportação do BigQuery

  1. Acesse a página Integrações no console do Firebase e, em seguida, clique em Link no card do BigQuery.

  2. Siga as instruções na tela para ativar o BigQuery.

    Quando você ativa a exportação do BigQuery para o Performance Monitoring, acontece isto:

    • O Firebase exporta uma cópia dos dados existentes para o BigQuery. A propagação inicial dos dados para exportação pode levar até 48 horas para ser concluída.

    • Após a criação do banco de dados, o local não pode ser alterado, mas é possível mover (recriar) ou copiar o conjunto de dados para um local diferente. Para saber mais, consulte Mudar local do conjunto de dados.

    • O Firebase configura sincronizações regulares dos dados do projeto do Firebase para o BigQuery. Essas operações de exportação diárias geralmente terminam em 24 horas depois de serem programadas.

    • Por padrão, todos os apps no projeto são vinculados ao BigQuery. Todos os apps adicionados mais tarde ao projeto serão vinculados automaticamente ao BigQuery. É possível gerenciar quais apps enviam dados.

Para desativar a exportação do BigQuery, desvincule seu projeto no console do Firebase.

Quais dados são exportados para o BigQuery?

Para cada aplicativo no projeto, a exportação cria uma tabela que inclui todos os eventos de desempenho registrados. Cada linha na tabela é um evento único de desempenho que pode ser de um dos seguintes tipos:

  • Trace de duração: traces que coletam, por padrão, a métrica de "duração", que inclui inicialização do app, app em primeiro plano e app em segundo plano, bem como qualquer trace de código personalizado instrumentado pelo desenvolvedor.

    • event_type é DURATION_TRACE
    • event_name é igual ao nome do trace
  • Métrica de trace: métricas personalizadas associadas aos traces de código personalizados instrumentados pelo desenvolvedor.

    • event_type é TRACE_METRIC
    • event_name é o nome da métrica
    • parent_trace_name é o nome do trace que contém essa métrica
  • Trace de tela: traces que abrangem o ciclo de vida de uma tela (traces de renderização de tela).

    • event_type é SCREEN_TRACE
    • event_name é um prefixo _st_ junto do nome real da tela
  • Solicitação de rede: traces que abrangem o ciclo de vida de uma solicitação de rede (traces de solicitação de rede HTTP).

    • event_type é NETWORK_REQUEST
    • event_name é o padrão categorizado do URL de solicitação de rede

Cada evento de desempenho contém atributos do evento, como país e operadora do dispositivo cliente, além de informações específicas do evento:

  • Trace de duração, métricas de trace e traces de tela contêm trace_info
  • As métricas de traces contêm trace_info.metric_info
  • Os traces de tela contêm trace_info.screen_info
  • Os traces de rede contêm network_info

Esquema detalhado de dados

Nome do campo Tipo Descrição
event_timestamp timestamp Carimbo de data/hora que marca o período em que o evento foi iniciado no dispositivo cliente (início da geração de trace, início da rede etc.)
app_display_version string A versão de exibição do aplicativo (por exemplo, "4.1.7")
  • Para Android — VersionName
  • Para iOS — CFBundleShortVersionString
app_build_version string A versão do aplicativo (por exemplo, "1523456")
  • Para Android — VersionCode
  • Para iOS — CFBundleVersion
os_version string A versão do SO do dispositivo cliente
  • Para Android: nível da API Android (por exemplo, "26")
  • Para iOS: versão do iOS (por exemplo, "11.4")
device_name string Nome do dispositivo cliente (por exemplo, "Google Pixel")
país string Código de duas letras do país em que o evento ocorreu (por exemplo, "US" para os EUA, ou "ZZ" para país desconhecido)
operadora string Operadora do dispositivo cliente
radio_type string Tipo de rádio ativo quando o evento ocorreu (por exemplo, "WIFI")
custom_attributes ARRAY<RECORD> Todos os atributos personalizados associados a este evento
custom_attributes.key string Chave do atributo personalizado
custom_attributes.value string Valor do atributo personalizado
event_type string Tipo do evento e valores possíveis:
  • DURATION_TRACE: traces que coletam, por padrão, a métrica de "duração", que inclui inicialização do app, app em primeiro plano e app em segundo plano, assim como qualquer trace de código personalizado instrumentado pelo desenvolvedor.
  • SCREEN_TRACE: traces que abrangem o ciclo de vida de uma tela (traces de renderização de tela).
  • TRACE_METRIC: métricas personalizadas associadas aos traces de código personalizados instrumentados pelo desenvolvedor.
  • NETWORK_REQUEST: traces que abrangem o ciclo de vida de uma solicitação de rede (traces de solicitações de rede HTTP).
event_name string Nome do evento
  • Para DURATION_TRACE: nome do trace
  • Para TRACE_METRIC: nome da métrica personalizada
  • Para SCREEN_TRACE_st_ seguido pelo nome do trace
  • Para NETWORK_REQUEST: padrão do URL de solicitação de rede
parent_trace_name string Nome do trace pai que transporta a métrica de trace
Presente apenas para TRACE_METRIC
trace_info RECORD Apenas presente para DURATION_TRACE, SCREEN_TRACE e TRACE_METRIC
trace_info.duration_us int64
  • Para DURATION_TRACE e SCREEN_TRACE: período ("duração") desde o início até o fim do trace
  • Para TRACE_METRIC: período ("duração") desde o início até o fim do trace pai
Unidade: microssegundo
trace_info.screen_info RECORD Presente apenas para SCREEN_TRACE
trace_info.screen_info.slow_frame_ratio float64 A proporção de frames lentos para este trace de tela, entre 0 e 1 (por exemplo, um valor de 0,05 significa que 5% dos frames para essa instância de tela levaram mais de 16 ms para serem renderizados)
trace_info.screen_info.frozen_frame_ratio float64 A proporção de frames congelados para este trace de tela, entre 0 e 1 (por exemplo, um valor de 0,05 significa que 5% dos frames para essa instância de tela levaram mais de 700 ms para serem renderizados)
trace_info.metric_info RECORD Apenas presente para TRACE_METRIC
trace_info.metric_info.metric_value int64 Valor da métrica de trace
network_info RECORD Apenas presente para NETWORK_REQUEST
network_info.response_code int64 Código de resposta HTTP para a resposta de rede. Por exemplo, 200 ou 404
network_info.response_mime_type string Resposta de rede tipo MIME, por exemplo, "text/html"
network_info.request_http_method string Método HTTP da solicitação de rede, por exemplo, "GET" ou "POST"
network_info.request_payload_bytes int64 Tamanho do payload de solicitação de rede
Unidade: byte
network_info.response_payload_bytes int64 Tamanho do payload de resposta de rede
Unidade: byte
network_info.request_completed_time_us int64 Microssegundos após event_timestamp quando o envio da solicitação de rede estiver concluído
Unidade: microssegundo
network_info.response_initiated_time_us int64 Microssegundos após event_timestamp quando a resposta da rede for iniciada
Unidade: microssegundo
network_info.response_completed_time_us int64 Microssegundos após event_timestamp quando a resposta de rede estiver completa
Unidade: microssegundo

O que você pode fazer com os dados exportados?

As seções a seguir oferecem exemplos de consultas que podem ser executadas no BigQuery em comparação com os dados exportados do Performance Monitoring.

Correlacionar os dados mostrados no console

O painel do Firebase agrega dados diários no fuso horário America/Los_Angeles. Para corresponder ao que foi visto no console, as funções de data precisam definir explicitamente America/Los_Angeles como o fuso horário. Caso contrário, a função de data vai usar o UTC como padrão.

SELECT
  DATE(event_timestamp, 'America/Los_Angeles') AS daily_date,
  APPROX_QUANTILES(trace_info.duration_us, 100)[OFFSET(90)] / 1000000 AS p90_seconds,
FROM `TABLE_NAME`
WHERE
  DATE(event_timestamp, 'America/Los_Angeles')
    >= DATE_SUB( PARSE_DATE('%Y%m%d', 'YYYY-MM-DD'), INTERVAL 7 DAY)
  AND DATE(event_timestamp, 'America/Los_Angeles')
    <= PARSE_DATE('%Y%m%d', 'YYYY-MM-DD')
  AND event_name = '_app_start'
GROUP BY 1
ORDER BY 1 DESC;

Visualizar a média da latência de início de aplicativo filtrada por país

SELECT AVG(trace_info.duration_us), country
FROM `TABLE_NAME`
WHERE _PARTITIONTIME > TIMESTAMP("YYYY-MM-DD")
AND event_type = "DURATION_TRACE"
AND event_name = "_app_start"
GROUP BY 2;

Verifique a proporção de frames congelados em várias condições

Por exemplo, é possível verificar a proporção de frames congelados junto com o tempo que os usuários passam em cada tela do seu aplicativo quando estão em diferentes tipos de rádio (Wi-Fi, 4G etc.).

SELECT
  AVG(trace_info.duration_us / 1000000) AS seconds_on_screen,
  AVG(trace_info.screen_info.frozen_frame_ratio) AS frozen_frame_ratio,
  event_name,
  radio_type
FROM `TABLE_NAME`
WHERE _PARTITIONTIME > TIMESTAMP("YYYY-MM-DD")
AND event_type = "SCREEN_TRACE"
GROUP BY event_name, radio_type
ORDER BY event_name, radio_type;

Calcular a taxa de ocorrência em cache ao carregar certos tipos de arquivos a partir do disco

Esta análise pressupõe que você instrumentou um trace de código personalizado para ser carregado a partir do disco com um atributo personalizado denominado file-extension e uma métrica personalizada (um TRACE_METRIC) denominada cache-hit que está definida como 1 em casos de ocorrência em cache e como 0 em casos de ausência no cache.

Por exemplo, é possível calcular a taxa de ocorrência em cache ao carregar arquivos PNG a partir do disco:

SELECT AVG(trace_info.metric_info.metric_value) AS cache_hit_rate
FROM `TABLE_NAME`
WHERE _PARTITIONTIME > TIMESTAMP("YYYY-MM-DD")
AND event_type = "TRACE_METRIC"
AND event_name = "cache-hit"
AND parent_trace_name = "loadFromDisk"
AND STRUCT("file-extension", "png") IN UNNEST(custom_attributes);

Verificar a hora do dia em que os usuários emitem solicitações de rede

Por exemplo, é possível verificar a hora do dia em que os usuários dos Estados Unidos emitem solicitações de rede do seu app:

SELECT
  count(1) AS hourly_count,
  EXTRACT(HOUR FROM event_timestamp) AS hour_of_day
FROM `TABLE_NAME`
WHERE _PARTITIONTIME > TIMESTAMP("YYYY-MM-DD")
AND event_type = "NETWORK_REQUEST"
AND country = "US"
GROUP BY 2 ORDER BY 2;

Levar os dados do Performance Monitoring para qualquer lugar

Às vezes, você quer acessar os dados do Performance Monitoring do lado do servidor ou enviá-los para outra solução de terceiros. No momento, não há cobrança para exportação de dados.

É possível exportar seus dados ao:

  • Como usar a IU da Web do BigQuery

  • executar o comando bq extract da CLI;

  • enviar um job de extração pela API ou por bibliotecas do cliente.

Preços

Não há custo financeiro para exportar dados do Performance Monitoring, e o BigQuery fornece limites generosos de uso sem custos. Para mais informações, consulte preços do BigQuery ou o sandbox do BigQuery.