Graylog: Problemas de mapeamento de dados

Como resolver problemas de mapeamento de dados em índices Graylog

👋 Bem-vindo à documentação da Stackhero!

A Stackhero oferece uma solução Graylog cloud pronta a usar que proporciona uma série de benefícios, incluindo:

  • Servidor de email SMTP ilimitado e dedicado incluído.
  • Atualizações sem esforço com apenas um clique.
  • Nome de domínio personalizável seguro com HTTPS (por exemplo, https://logs.sua-empresa.com).
  • Desempenho ótimo e segurança robusta alimentados por uma VM privada e dedicada.

Poupe tempo e simplifique a sua vida: são necessários apenas 5 minutos para experimentar a solução Graylog cloud hosting da Stackhero!

Um problema comum no Graylog são os conflitos de mapeamento de dados, que podem levar a falhas nas tentativas de indexação. Pode deparar-se com este problema se encontrar logs semelhantes a estes:

ElasticsearchException[Elasticsearch exception [type=mapper_parsing_exception, reason=failed to parse field [level] of type [long] in document with id '34fd4d11-36ed-11f0-afc9-0242ac140002'. Preview of field's value: 'error']]; nested: ElasticsearchException[Elasticsearch exception [type=illegal_argument_exception, reason=For input string: "error"]];

Este problema resulta da funcionalidade de mapeamento dinâmico do OpenSearch. O mapeamento dinâmico determina automaticamente o tipo de dados de cada campo com base no primeiro documento escrito num índice. Uma vez definido, este tipo de dados fica "fixo" e quaisquer documentos futuros com um tipo de dados diferente para esse campo são rejeitados, originando uma exceção de parsing do mapeador (mapper parsing exception).

Quando é criado um novo índice, o primeiro documento define o mapeamento desse índice. Por exemplo, se o documento contiver um campo "level" com o valor 3 (um valor numérico), o OpenSearch define o tipo de dados de "level" como "long" (um tipo numérico). Se posteriormente for enviado para o Graylog um documento com o campo "level" definido como "error" (um tipo string), este será rejeitado porque o tipo de dados não corresponde ao tipo inicialmente definido. Isto desencadeia um erro mapper_parsing_exception com a razão failed to parse field [level] of type [long] in document with id 'xxx'.

Este problema pode ocorrer em qualquer campo se os tipos de dados forem inconsistentes entre documentos.

Para resolver este problema, tem duas opções:

A solução ideal é padronizar os tipos de dados utilizados nos campos em todos os sistemas que enviam dados para o Graylog. Por exemplo, certifique-se de que o campo "level" é sempre enviado como string (por exemplo, "error", "warn", etc.) ou sempre como número (3, 4, etc.). Esta consistência evita conflitos de mapeamento e garante que todos os documentos são ingeridos corretamente.

Se não for viável padronizar os tipos de dados em todos os sistemas, pode utilizar os pipelines do Graylog para converter os tipos de dados à entrada. Os pipelines permitem definir regras que transformam os dados com base em condições específicas.

Para implementar esta solução:

  • Aceda a "System" > "Pipelines" na interface web do Graylog.
  • Clique em "Add new pipeline" para criar um novo pipeline.
  • Defina regras para converter o campo "level" (ou outros campos) para o tipo de dados pretendido. Por exemplo, pode converter níveis numéricos para as respetivas representações em texto (como 3 para "error", 4 para "warning", etc.).

Esta abordagem garante que todos os dados recebidos cumprem os tipos de dados esperados, evitando conflitos de mapeamento.

Para utilizadores avançados, o Graylog permite visualizar e ajustar manualmente o mapeamento dos índices:

  • Vá a "System" > "Indices" na interface web do Graylog.
  • Selecione o índice relevante.
  • Navegue até "Configuration" > "Configure index field types" para visualizar ou modificar os mapeamentos dos campos.

No entanto, quaisquer ajustes manuais devem ser feitos com precaução, pois mapeamentos incorretos podem originar novos problemas de ingestão.