# Dec 4th 2022: \[PT\] Coletando JSON logs com Elastic-Agent (e/ou Filebeat)

**URL:** <https://discuss.elastic.co/t/dec-4th-2022-pt-coletando-json-logs-com-elastic-agent-e-ou-filebeat/320030>\
**Category:** Advent Calendar\
**Created:** [December 4, 2022, 8:00am UTC](https://discuss.elastic.co/t/dec-4th-2022-pt-coletando-json-logs-com-elastic-agent-e-ou-filebeat/320030 "2022-12-04T08:00:03Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![TiagoQueiroz](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/tiagoqueiroz/32/107061_2.png) [@TiagoQueiroz](https://discuss.elastic.co/u/TiagoQueiroz)\
**Post date:** [December 4, 2022, 8:00am UTC](https://discuss.elastic.co/t/dec-4th-2022-pt-coletando-json-logs-com-elastic-agent-e-ou-filebeat/320030/1 "2022-12-04T08:00:03Z")

</div>

![image](https://us1.discourse-cdn.com/elastic/original/3X/8/5/8558d5cc955caf5ce4196623361c219c528b3ed9.jpeg)

Este artigo também está disponível [em inglês](https://discuss.elastic.co/t/319536).

Logs estruturados particamente se tornaram um padrão na industria de software, permitindo um fácil entendimento e processamento dos dados. O Elastic-Agent oferece um grande número de integrações que permitem a fácil ingestão e processamento de log, entretanto nossas applicações não seguem nenhum padrão, ou seguem um padrão próprio, nesse caso precismos de algumas configurações especiais.

# Elastic-Agent x Filebeat

- **Elastic-Agent** é _uma forma única e unificada de adicionar monitoramento para logs, métricas e outros tipos de dados a um host_.
- **Filebeat** é _um expedidor leve para o envio e centralização de logs_.

Qual deles devo usar? O Elastic-Agent proporciona a melhor experiência, tudo pode ser configurado via Kibana, você pode ver os logs do Elastic-Agent no Kibana, bem como o seu status de 'saúde'.

Se por algum motivo você não puder usar o Elastic-Agent, Filebeat ainda é uma opção, nós cobriremos sua configuração no final do artigo.

# 0. O básico do Elastic-Agent

Este artigo assume que você está familiarizado com o Elastic-Agent, já tem um rodando e entende conceitos como integrações, 'policy', etc.

# 1. Log em JSON

Simples assim. Se seus logs são objetos JSON, o Elastic-Agent já pode processa-los, então se torna uma questão de ajuste fino para garantir que o 'timestamp' seja ingerido corretamente e que os campos tenham o tipo correto.

# 2. Exemplo de logs

Vamos usar esses logs como exemplo:

```auto
{"level":"info","time":"2022-11-28T12:00:00+01:00","message":"Starting Advent Calendar demo", "status_code": 200}
{"level":"info","time":"2022-11-28T12:00:32+01:00","message":"First line", "status_code": 300}
{"level":"debug","time":"2022-11-28T12:08:32+01:00","message":"Second line", "status_code": 400}
{"level":"error","time":"2022-11-28T12:09:32+01:00","message":"Third line", "status_code": 500}
{"level":"info","time":"2022-11-28T12:10:32+01:00","message":"Forth line", "status_code": 100}
{"level":"warn","time":"2022-11-28T12:11:32+01:00","message":"Fith line", "status_code": 200}

```

Temos três campos:

- `level`: é o nível de log, queremos filtrá-lo como 'keyword' (por exemplo: 'info', 'error', 'debug', etc.).
- `time`: é o tempo em que a linha do log foi escrita, precisamos dizer ao Elastic-Agent para utilizá-lo como o tempo para a entrada do log, em vez do tempo de ingestão.
- `message`: é a mensagem em si, nós a consideraremos como um campo de texto livre.
- `status_code`: um campo numérico que simula um código de status HTTP.

# 3. Configurando a integração

Configuraremos a ' [Custom Logs](https://docs.elastic.co/integrations/log) integration'. Além de adicionar os caminhos dos arquivos que queremos ingerir, precisamos adicionar duas configurações opcionais:

- **Processors:** como o nome sugere, eles podem enriquecer, modificar nossos eventos.
- **Custom configurations:** como o nome sugere, elas são configurações personalizadas para nossa integração.

Internamente o Elastic-Agent executará uma instância do Filebeat, portanto toda a documentação para essas configurações opcionais são a documentação do Filebeat. A integração _Custom Log_ internamente utiliza o _[Log input](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-log.html)_, portanto a documentação que nos interessa:

- [Processors](https://www.elastic.co/guide/en/beats/filebeat/current/filtering-and-enhancing-data.html)
- [JSON](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-log.html#filebeat-input-log-config-json)

A configuração personalizada que precisamos é:

## Processors

Vamos precisar de dois processadores:

- 'timestamp': Ele processará o nosso timestamp e o colocará corretamente no evento final.
- 'drop\_fields': Este é opcional, mas não há necessidade de manter o campo "time" se já tivermos ajustado corretamente o `@timestamp` no evento.

```auto
- timestamp:
    field: time
    layouts:
      - '2006-01-02T15:04:05Z07:00'
    test:
      - '2022-08-31T12:07:32+02:00'
- drop_fields:
    fields:
      - time

```

A única ressalva aqui é que o processador "timestamp" ainda está em beta, porém é estável o suficiente para ser utilizado. De qualquer forma, tenha isso em mente.

## Custom configuration

A configuração personalizada consiste em dizer ao Log input que queremos que os dados sejam analisados como JSON, substituir quaisquer chaves que já existam no evento e se houverem erros, adiciona-los em uma chave de erro no evento final para que possamos saber o que está acontecendo.

```auto
json:
  keys_under_root: true
  add_error_key: true
  message_key: message
  overwrite_keys: true

```

É assim que tudo vai ficar no Kibana:

 ![02-Custom_log_processors_parsers](https://us1.discourse-cdn.com/elastic/original/3X/e/7/e79d553ece4ec23935a4eb7b680c67a55c0639c6.png)

# 4. Testando

Salve a integração, aguarde a atualização da política propagar para seu Elastic-Agent, adicione alguns dados ao seu arquivo de log, depois vá ver os logs coletados no Kibana.

 ![03-Kibana_results](https://us1.discourse-cdn.com/elastic/original/3X/a/7/a7586c0e2bbb65d3cea0df31a210197fa5232868.png)

# 5. Mappings

Agora que temos alguns dados, vamos garantir que Elasticsearch entenda nossos dados corretamente, para isso precisamos definir os mapeamentos (mappings) dos nossos dados.

Vá até `Fleet > Agent Policies`, clique no nome da 'policy' e depois no nome da integração. Na tela seguinte, vá para `Change defaults > Advanced options`, na parte inferior há a seção **Mappings** \*.

 ![04-Mappings](https://us1.discourse-cdn.com/elastic/original/3X/9/0/901b2fb99175c3c6860342945a6ddd46c2f5e95a.png)

Clique no botão "edit" (o pequeno lápis) e adicione os seguintes mapeamentos:

 ![05-Mappings_example](https://us1.discourse-cdn.com/elastic/original/3X/3/d/3db35a0bcf9575d2aa9c7e2afe877876ff3d1572.png)

Depois clique em "Next" até o passo "Review", depois clique em "Save component template".

# 6. Testando (novamente)

Vá para Discover, pesquise alguns dados, expanda um dos documentos e você verá os campos corretamente mapeados.

 ![06-Expanded_document_fields_correct](https://us1.discourse-cdn.com/elastic/original/3X/5/b/5b81455e760a1cb4bcf23d5be2eb0c0dbdd3cf85.png)

Agora você pode fazer buscas como `status_code >= 400`.

 ![07-Final_search](https://us1.discourse-cdn.com/elastic/original/3X/d/f/df2bc2ccd24b96aa9a536acc72665a4cddc4aa98.png)

# 7. Como escolher as chaves dos meus logs?

A melhor maneira de definir suas chaves de log é usar o [Elastic Common Schema (ECS)](https://www.elastic.co/guide/en/ecs/current/ecs-reference.html). ECS é uma especificação de código aberto, desenvolvida com o apoio da comunidade de usuários Elastic. ECS define um conjunto comum de campos a serem usados no armazenamento de dados de eventos em Elasticsearch, tais como logs e métricas.

# 8. E o Filebeat?

Bem, é praticamente a mesma idéia, mas ao invés de configurarmos uma integração para o Elastic-Agent, configuraremos o 'input' diretamente no `filebeat.yml` (arquivo de configuração do Filebeat).

Ao executar um Filebeat, é melhor usar o [filestream input](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-filestream.html). Os conceitos são todos iguais, mas as configurações são ligeiramente diferentes. Por uma questão de brevidade, aqui está a configuração do input no `filebeat.yml`:

```yaml
filebeat.inputs:
- type: filestream
  id: advent-calendar-2022
  enabled: true
  paths:
    - /tmp/flog.log

  parsers:
    - ndjson:
        target: ""
        add_error_key: true

  processors:
    - timestamp:
        field: time
        layouts:
          - '2006-01-02T15:04:05Z07:00'
        test:
          - '2022-08-31T12:07:32+02:00'
    - drop_fields:
        fields: [time]

```

## E os mapping (mapeamentos)?

Eles também podem ser editados no Kibana. Vá para `Stack Management > Index Management > Index Templates`, procure por `filebeat`. Por padrão, o Filebeat cria um data stream chamado `filebeat-<versão>`, portanto, no momento da escrita, temos, `filebeat-8.5.2`. Clique nele, depois em "manage", e "edit" no menu que aparecerá. Clique em "Next" até a seção 4, Mappings, e defina os mapeamentos como no passo 5.

O último passo é criar uma data view, vá para `Stack Management > Data Views`, depois clicque em "Create data view", escolha um nome e em "Index pattern", coloque "filebeat-8.5.2\*". Se você não quiser usar o processador timestamp, você pode mudar aqui o campo usado como timestamp. Clique em "Save data view to Kibana".

Fica assim:

 ![08-Data_View](https://us1.discourse-cdn.com/elastic/original/3X/4/0/4024028e838eb018f77a171b1c041b32f18f4e7f.png)

Volte para "Discover", selecione o novo data view (`filebeat-8.5.2` em nosso caso) e você poderá ver todos os seus dados:

 ![09-Filebeat_data](https://us1.discourse-cdn.com/elastic/original/3X/4/0/40102f1245552f47342a0d4de136f38f4832d0cf.png)

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [January 1, 2023, 8:00am UTC](https://discuss.elastic.co/t/dec-4th-2022-pt-coletando-json-logs-com-elastic-agent-e-ou-filebeat/320030/2 "2023-01-01T08:00:29Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
