Análise de registros em tempo real usando o Fluentd e o BigQuery

Os registros sempre foram uma ferramenta eficiente para fornecer uma visão de como os sistemas e aplicativos de grande escala estão sendo executados. No entanto, à medida que a escala e a complexidade desses sistemas aumentaram, tornou-se um desafio gerenciar vários registros distribuídos em uma frota de infraestrutura.

O objetivo do coletor de registros de código aberto Fluentd, usado por mais de 2.000 empresas no mundo inteiro, é unificar a coleta de registros de muitas origens de dados e vários sistemas em uma camada unificada de geração de registros. Como é difícil saber antecipadamente quais dados podem ser úteis para análise posterior, um caso de uso comum é registrar tudo e classificar depois. Mas coletar e armazenar todos esses dados pode ser complicado, tornando lento e difícil o processo de conseguir as respostas que você está procurando.

É aí que os pontos fortes do BigQuery, o serviço de consulta paralela totalmente gerenciado e altamente escalável do Google, tornam-se incrivelmente úteis para insights de registros. Ao contrário de um grande job MapReduce, que pode levar de minutos a horas, o BigQuery pode realizar consultas em terabytes de registros em dezenas de segundos, o que permite conseguir as respostas que você precisa rapidamente para corrigir ou melhorar os sistemas.

Por padrão, é possível fazer stream de 10 mil linhas de dados de registro por segundo em cada tabela do BigQuery e aumentar esse limite para 100 mil linhas/segundo por solicitação. Ao fragmentar o stream de dados em várias tabelas do BigQuery e usar um plug-in Fluentd-to-BigQuery, você pode carregar registros diretamente no BigQuery em tempo quase real de milhares de servidores em mais de 1 milhão de linhas por segundo. Visualize esses dados facilmente, criando um painel que é atualizado a cada minuto ou hora dentro de uma Planilha Google.

Objetivos

  • Executar um servidor web nginx em uma instância do Google Compute Engine.
  • Registrar o tráfego do navegador para esse servidor usando o Fluentd.
  • Consultar os dados registrados usando a IU da Web do BigQuery e o Google Apps Script de uma planilha do Google.
  • Visualizar os resultados da consulta em um gráfico dentro de uma planilha do Google atualizada automaticamente.

Pré-requisitos

Clonar o código de exemplo

Para clonar o repositório do GitHub no seu computador, execute este comando:

git clone https://github.com/GoogleCloudPlatform/bigquery-fluentd-docker-sample

Criar um conjunto de dados e uma tabela do BigQuery

Crie um conjunto de dados chamado bq_test executando o seguinte comando:

bq mk bq_test

Altere os diretórios no diretório em que clonou o repositório do GitHub:

cd bigquery-fluentd-docker-sample

Execute o comando a seguir para criar a tabela do BigQuery access_log com nomes e tipos de dados definidos pelo arquivo de esquema schema.json fornecido:

bq mk -t bq_test.access_log ./schema.json

Abra a IU da Web do BigQuery, selecione o nome do projeto, clique no conjunto de dados bq_test e selecione a tabela access_log. Confirme se a tabela foi criada com o esquema especificado.

Criar uma instância do Google Compute Engine

Execute o comando a seguir para criar uma instância do Google Compute Engine chamada bq-test-instance:

gcloud compute instances create "bq-test-instance" \
  --zone "us-central1-a"  \
  --machine-type "n1-standard-1"  \
  --scopes storage-ro,bigquery \
  --image-family=cos-stable \
  --image-project=cos-cloud

Executar nginx e Fluentd em um contêiner do Docker

Faça o login na instância do Google Compute Engine recém-criada:

gcloud compute ssh bq-test-instance --zone=us-central1-a

Na instância do Google Compute Engine, execute o comando a seguir, substituindo <YOUR_PROJECT_ID> pelo código do projeto:

sudo docker run -e GCP_PROJECT="<YOUR_PROJECT_ID>" -p 80:80 -t -i -d google/fluentd-bigquery-sample

Esse comando começa a fazer o download da imagem do Docker google/fluentd-bigquery-sample, que inicia e executa um contêiner do Docker pré-configurado com o nginx e o Fluentd.

Em seguida, gere algumas visualizações de página para verificar se o Fluentd está enviando dados para o BigQuery:

  1. Na lista de instâncias de VM, encontre bq-test-instance e clique no link na coluna IP EXTERNO. Na caixa de diálogo, selecione Permitir tráfego HTTP e clique em Aplicar para adicionar a regra de firewall. A caixa de diálogo "Atividades" exibirá a mensagem "Atualizando tags da instância para "bq-test-instance"" no canto inferior direito da janela. Observe que as tags são usadas para associar regras de firewall a instâncias.
  2. Após a conclusão da atualização, clique no link de IP externo novamente para acessar o servidor nginx na instância do Google Compute Engine do navegador. Você deve ver uma página da Web com a mensagem "Bem-vindo ao nginx!". Atualize a página várias vezes para gerar algumas solicitações do navegador.

Executar consultas usando a IU da Web do BigQuery

Abra a IU da Web do BigQuery, clique em ESCREVER CONSULTA e execute a seguinte consulta:

 SELECT * FROM [bq_test.access_log] LIMIT 1000

Você verá as solicitações do navegador recém-enviadas para o servidor da Web registradas na tabela access_log. Pode demorar alguns minutos para receber as entradas de registros iniciais do Fluentd.

Pronto. Você acabou de confirmar que os eventos de registro de acesso do nginx são coletados pelo Fluentd, importados no BigQuery e visíveis na interface do usuário da Web. Na próxima seção, você usará a ferramenta Apache Bench para enviar mais tráfego para a página da Web, para ver como o Fluentd e o BigQuery lidam com registros de alto volume (por padrão, até 10 mil linhas por segundo) em tempo real.

Executar consultas do Planilhas Google

Além de executar consultas na IU da Web do BigQuery, você também pode enviar instruções SQL para o BigQuery a partir de um arquivo do Planilhas Google usando uma cópia da planilha fornecida neste tutorial. A planilha contém um Apps Script que executa as consultas do BigQuery, armazena os resultados e os visualiza em um gráfico incorporado. Configure o script e os gráficos correspondentes para atualizar automaticamente em um intervalo especificado, por exemplo, a cada minuto, hora ou dia.

Ativar a BigQuery API no Planilhas Google

Para ativar a execução de instruções SQL para o BigQuery do Planilhas Google, siga estas orientações:

  1. Abra o Exemplo de integração entre BigQuery e Planilhas Google e selecione Arquivo > Fazer uma cópia...
  2. Na cópia da planilha, selecione Ferramentas > Editor de scripts...
  3. No editor de scripts, abra o script bq_query.gs que executa consultas do BigQuery, salva os resultados da consulta em uma folha e gera gráficos para visualizar os resultados da consulta.
  4. Substitua o texto do marcador de posição <<PUT YOUR SPREADSHEET URL HERE>> pelo URL para a cópia da planilha.
  5. Substitua o texto do marcador de posição <<PUT YOUR PROJECT ID HERE>> pelo código do projeto. Selecione Arquivo > Salvar.
  6. No menu do editor de scripts, selecione Recursos > Serviços avançados do Google... Verifique se a BigQuery API está ativada.
  7. Na parte inferior da caixa de diálogo Serviços avançados do Google, clique no link para o Console do Google Cloud Platform. Você verá um prompt solicitando a criação de um novo código de projeto, que será associado à planilha.
  8. Procure na lista de APIs da BigQuery API e alterne o status de "DESATIVADO" para "ATIVADO". Agora você verá a BigQuery API na lista de APIs ativadas na parte superior.
  9. Feche o console e clique em OK na caixa de diálogo "Serviços avançados do Google".

Consultar um conjunto de dados público

Agora, tente executar uma amostra da consulta do BigQuery da sua planilha:

  1. Na cópia da planilha, abra a folha Consultas do BQ, que tem uma consulta do BigQuery chamada "gsod_temperature_LINE". Essa consulta agrega dados de temperatura anual do banco de dados público de clima GSOD.

  2. Linhas de uma planilha que definem uma consulta
  3. Selecione Painel > Executar todas as consultas do BQ. Uma caixa de diálogo com a mensagem "Autorização necessária" aparece na primeira vez que você executa o BigQuery. Clique em Continuar e Aceitar.
  4. Após a conclusão da consulta, você verá uma nova folha chamada gsod_temperature. Abra essa folha e verifique se contém resultados da consulta.
  5. Abra a folha Visualização de resultados do BigQuery e verifique se ela contém o seguinte gráfico de linha incorporada dos dados de temperatura que foi retornado pela consulta:

  6. Gráfico de linha de dados globais de temperatura média, mín. e máx.

Consultar os dados do Fluentd

Na etapa anterior, você executou um exemplo de consulta em um conjunto de dados público. Nesta seção, você consultará os dados coletados pelo Fluentd de solicitações do navegador por segundo (rps, na sigla em inglês) para a instância do Google Compute Engine.

Abra a folha Consultas do BQ. Na próxima linha vazia, crie uma consulta chamada "access_log_LINE" com um intervalo de 1 e o seguinte na célula de consulta:

SELECT
  STRFTIME_UTC_USEC(time * 1000000, "%Y-%m-%d %H:%M:%S") as tstamp,
  count(*) as rps
FROM bq_test.access_log
GROUP BY tstamp ORDER BY tstamp DESC;

Selecione Painel > Executar todas as consultas do BQ, que armazena os resultados da consulta em uma nova folha chamada access_log. Abra access_log para ver os dados de registro consultados e abra a folha Visualização de resultados do BigQuery para ver o gráfico de linhas correspondente. Se você não vir o gráfico de linhas, verifique se o nome da consulta na folha Consultas do BQ inclui o sufixo "_LINE". Como a instância do Google Compute Engine ainda não tem muitas visitas ao navegador, esse gráfico não contém muitos dados. Na próxima seção, você simulará uma carga de tráfego maior do navegador.

Simular carga

Abra um terminal local e execute o comando a seguir para simular o tráfego para o servidor nginx usando a ferramenta Apache Bench. Substitua <YOUR_EXTERNAL_IP> pelo IP externo da instância do Compute Engine.

ab -c 100 -n 1000000 http://<YOUR_EXTERNAL_IP>/

Selecione Painel > Executar todas as consultas do BQ novamente. Abra a folha access_log. Você verá que os resultados da consulta agora incluem o pico de tráfego simulado do navegador. Esse pico é exibido no gráfico de linhas na folha Visualização de resultados do BigQuery.

Configurar a execução automática da consulta

Para executar essas consultas automaticamente e atualizar o gráfico em intervalos regulares:

  1. Navegue até Ferramentas > Editor de scripts e selecione Recursos > Acionadores do projeto atual. Você verá que nenhum acionador foi configurado ainda.
  2. Clique no link para adicionar um acionador.
  3. Selecione "runQueries" no menu Executar e, em "Eventos", selecione Baseado no tempo, Temporizador de minutos e A cada minuto. Clique em Salvar. Isso aciona o script bq_query.gs para ser executado uma vez por minuto.
  4. Retorne à folha Visualização de resultados do BigQuery. Você verá a atualização do gráfico "access_log" a cada minuto.

Gráfico de linhas das solicitações do navegador por segundo

Você acabou de concluir as etapas de configuração de uma Planilha Google para executar automaticamente consultas do BigQuery em um conjunto de dados coletado pelo Fluentd e visualizar os resultados em tempo real.

Próximas etapas

Veja algumas observações sobre o uso, caso você queira adicionar mais consultas à planilha:

  • Para saber mais informações sobre como usar a API BigQuery no Apps Script, consulte o Serviço do BigQuery.
  • Se estiver adicionando uma nova consulta à planilha Consultas do BQ, adicione-a à próxima linha vazia. Não deixe linhas vazias entre as consultas.
  • Quando a planilha executa uma consulta com um novo nome, ela armazena os resultados da consulta em uma nova planilha usando o nome da consulta como título.
  • Adicione o sufixo _AREA, _BAR, _COLUMN, _LINE, _SCATTER ou _TABLE ao nome da consulta para criar um novo gráfico do tipo especificado na página Visualização de resultados do BigQuery.
    • Use o sufixo _AREA_STACKED, _BAR_STACKED ou _COLUMN_STACKED para criar um gráfico empilhado.
  • A planilha armazena no máximo cinco linhas de resultados de consultas dos tipos BAR e COLUMN e no máximo 100 linhas de todos os outros tipos. É possível limitar claramente o número de linhas de resultados retornadas adicionando uma cláusula LIMIT ao fim de uma consulta. Por exemplo, LIMIT 20.
  • Para desenhar um gráfico cronológico, defina o primeiro campo da consulta como um carimbo de data/hora ou um valor de data.

Para saber mais sobre dados de streaming no BigQuery:

Limpeza

  1. Desative a ferramenta Apache Bench, enviando um comando Ctrl + C no seu terminal local.

  2. Desative a execução automática do script bq_query.gs: selecione Recursos > Acionadores do projeto atual no editor de script e exclua o acionador "runQueries".

  3. Exclua o conjunto de dados: na IU da Web do BigQuery, passe o cursor do mouse sobre o conjunto de dados "bq_test", abaixo do nome do projeto, e escolha Excluir conjunto de dados no menu suspenso.

  4. Exclua a instância do Google Compute Engine:

    gcloud compute instances delete bq-test-instance --zone=us-central1-a
    
Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…