É 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
Acesse a página Integrações no console do Firebase e, em seguida, clique em Link no card do BigQuery.
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.
- É possível configurar manualmente o preenchimento de dados dos últimos 30 dias ou da data mais recente em que você ativou a exportação do BigQuery (o que for mais recente).
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étricaparent_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")
|
app_build_version | string | A versão do aplicativo (por exemplo, "1523456")
|
os_version | string | A versão do SO do dispositivo cliente
|
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:
|
event_name | string | Nome do evento
|
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 |
|
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ídoUnidade: microssegundo |
network_info.response_initiated_time_us | int64 | Microssegundos após event_timestamp quando a resposta da rede for iniciadaUnidade: microssegundo |
network_info.response_completed_time_us | int64 | Microssegundos após event_timestamp quando a resposta de rede estiver completaUnidade: 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.