- Você já tem o ClickHouse em execução
- Você tem o Vector instalado
1
Crie um banco de dados e uma tabela
Defina uma tabela para armazenar os eventos de log:
- Comece criando um novo banco de dados chamado
nginxdb:
- Insira o evento de log inteiro como uma única string. Obviamente, esse não é um bom formato para analisar os dados de log, mas veremos como resolver isso abaixo usando visões materializadas.
ORDER BY está definido como tuple() (uma tupla vazia), pois ainda não é necessário ter uma chave primária.
2
Configurar o Nginx
Nesta etapa, você verá como configurar os logs do Nginx.
- A propriedade
access_logabaixo envia os logs para/var/log/nginx/my_access.logno formato combined. Esse valor deve ser colocado na seçãohttpdo arquivonginx.conf:
-
Certifique-se de reiniciar o Nginx se tiver precisado modificar o
nginx.conf. - Gere alguns eventos de log no log de acesso acessando páginas no seu servidor web. Os logs no formato combined são os seguintes:
3
Configurar o Vector
O Vector coleta, transforma e encaminha logs, métricas e traces (chamados de sources) para diversos fornecedores (chamados de sinks), incluindo compatibilidade nativa com o ClickHouse.
Sources e sinks são definidos em um arquivo de configuração chamado vector.toml.
- O arquivo vector.toml a seguir define uma source do tipo file que faz tail de my_access.log e também define um sink como a tabela access_logs definida acima:
- Inicie o Vector usando a configuração acima. Consulte a documentação do Vector para mais detalhes sobre como definir fontes e destinos.
- Verifique se os logs de acesso estão sendo inseridos no ClickHouse executando a seguinte consulta. Você deverá ver os logs de acesso na sua tabela:
4
Fazer o Parse dos Logs
Ter os logs no ClickHouse é ótimo, mas armazenar cada evento como uma única string não permite muita análise de dados.
A seguir, veremos como fazer o parse dos eventos de log usando uma visão materializada.Uma visão materializada funciona de forma semelhante a um insert trigger em SQL. Quando linhas de dados são inseridas em uma tabela de origem, a visão materializada aplica alguma transformação nessas linhas e insere os resultados em uma tabela de destino.
A visão materializada pode ser configurada para gerar uma representação analisada dos eventos de log em access_logs.
Um exemplo de um desses eventos de log é mostrado abaixo:Existem diversas funções no ClickHouse para fazer o parse da string acima. A função Algumas das strings têm caracteres extras, e o user agent (os detalhes do navegador) não precisou ser processado, mas
o array resultante está próximo do que é necessário.Semelhante ao Observe que a segunda string retornada é o user agent extraído com sucesso do log:Antes de ver o comando final A string de tempo possui um Agora estamos prontos para definir a visão materializada.
A definição abaixo inclui Agora verifique se funcionou.
Você deve ver os logs de acesso devidamente parseados em colunas:
splitByWhitespace faz o split de uma string por espaços em branco e retorna cada token em um array.
Para demonstrar, execute o seguinte comando:Query
Response
splitByWhitespace, a função splitByRegexp divide uma string em um array com base em uma expressão regular.
Execute o comando a seguir, que retorna duas strings.CREATE MATERIALIZED VIEW, vamos analisar mais algumas funções usadas para limpar os dados.
Por exemplo, o valor de RequestMethod é "GET, contendo aspas duplas indesejadas.
Você pode usar a função trimBoth (alias trim) para remover as aspas duplas:[ no início e também não está em um formato que o ClickHouse consiga interpretar como uma data.
No entanto, se alterarmos o separador de dois-pontos (:) para vírgula (,), o parsing funciona corretamente:POPULATE, o que significa que as linhas existentes em access_logs serão processadas e inseridas imediatamente.
Execute a seguinte instrução SQL:A lição acima armazenou os dados em duas tabelas, mas você pode alterar a tabela inicial
nginxdb.access_logs para usar o motor de tabela Null.
Os dados processados ainda serão armazenados na tabela nginxdb.access_logs_view, mas os dados brutos não serão armazenados em uma tabela.Ao usar o Vector, que requer apenas uma instalação simples e uma configuração rápida, você pode enviar logs de um servidor Nginx para uma tabela no ClickHouse. Ao usar uma visão materializada, você pode fazer o parsing desses logs em colunas para facilitar a análise.