Ir para o conteúdo
Fluentd

Fluentd

Ver como Markdown

O Fluentd coleta logs de arquivos, contêineres, syslog, aplicações e muitas outras fontes. A sua saída HTTP embutida os envia ao endpoint Fluentd do Status200, onde passam a ser pesquisáveis em Produtos → Registros.

Como funciona

flowchart TB sources["Arquivos, contêineres, syslog, aplicações"] --> fluentd["Fluentd"] fluentd -->|"Saída HTTP, JSON + chave de ingestão"| ingest["Status200 /fluentd/logs"] ingest --> service["Serviço indicado na requisição"] service --> logs["Logs"]

Do Fluentd ao Status200

O Fluentd envia os registros em lotes como JSON, com a sua chave de ingestão no cabeçalho x-status200-token e o nome do serviço em x-status200-service-name. O Status200 transforma cada registro num log desse serviço e cria o serviço na primeira vez que ele envia.

Antes de começar

  • Instalar o Fluentd — veja o guia de instalação.
  • Um projeto do Status200. No Status200 Cloud, a telemetria é cobrada por GB ingerido — veja os preços — e um projeto no plano Free precisa de um método de pagamento antes de poder enviar telemetria.
  • Uma chave de ingestão de telemetria. Se você ainda não tem uma:
  1. Abrir as chaves de ingestão

    Vá em Produtos → Configurações do projeto, abra Telemetria e APM no menu lateral e selecione Chaves de ingestão.

    A página de chaves de ingestão de telemetria nas configurações do projeto

  2. Criar uma chave

    Clique em Criar chave de ingestão. A janela já vem com o nome da chave preenchido e Servidor escolhido — o tipo de chave com que uma aplicação ou um collector envia —, então clique em Criar chave de ingestão para criá-la, ou renomeie-a antes.

  3. Copiar o segredo

    A nova chave abre na própria página. Copie a Chave secreta dela: esse é o YOUR_SERVICE_TOKEN da configuração abaixo.

    A página de uma chave de ingestão de telemetria, com a chave secreta

Configurar o Fluentd

O arquivo de configuração do Fluentd costuma ser /etc/fluent/fluentd.conf, ou /etc/td-agent/td-agent.conf no antigo pacote td-agent.

  1. Adicionar uma saída HTTP

    Adicione uma seção <match> que envie os registros ao Status200. Troque YOUR_SERVICE_TOKEN pela sua chave de ingestão e YOUR_SERVICE_NAME pelo nome com que os logs devem aparecer — qualquer nome que quiser:

    fluentd.conf
    # Match all patterns
    <match **>
      @type http
    
      endpoint https://status200.ru/fluentd/logs
      open_timeout 2
    
      headers {"x-status200-token":"YOUR_SERVICE_TOKEN", "x-status200-service-name":"YOUR_SERVICE_NAME"}
    
      content_type application/json
      json_array true
    
      <format>
        @type json
      </format>
      <buffer>
        flush_interval 10s
        chunk_limit_size 900k
      </buffer>
    </match>

    json_array true envia cada bloco do buffer como um único array JSON, e flush_interval 10s envia o buffer a cada 10 segundos. chunk_limit_size 900k mantém cada requisição abaixo de 1 MB, o máximo que o Status200 aceita neste endpoint.

  2. Reiniciar o Fluentd

    Reinicie o serviço do Fluentd para que ele carregue a nova saída.

  3. Verificar se os logs chegam

    Poucos segundos depois da próxima descarga, os logs aparecem em Produtos → Registros. O serviço aparece em Produtos → Serviços — se ainda não existia, o Status200 o cria.

Exemplo completo

Esta configuração recebe registros pelo protocolo forward do Fluentd na porta 24224 e envia todos ao Status200:

fluentd.conf
####
## Source descriptions:
##

## built-in TCP input
## @see https://docs.fluentd.org/input/forward
<source>
  @type forward
  port 24224
  bind 0.0.0.0
</source>

<match **>
  @type http

  endpoint https://status200.ru/fluentd/logs
  open_timeout 2

  headers {"x-status200-token":"YOUR_SERVICE_TOKEN", "x-status200-service-name":"YOUR_SERVICE_NAME"}

  content_type application/json
  json_array true

  <format>
    @type json
  </format>
  <buffer>
    flush_interval 10s
    chunk_limit_size 900k
  </buffer>
</match>

Para enviar fontes diferentes como serviços diferentes, use uma seção <match> por tag, cada uma com o seu próprio x-status200-service-name.

Como os registros são lidos

O Status200 lê estes campos de cada registro:

Campo do logLido do primeiro campo presente entreObservações
Corpomessage, log, msg, body, textA linha de log. Um registro sem nenhum deles é guardado inteiro, como JSON.
Severidadelevel, severity, loglevel, log_level, priority, severityText, severity_textNomes como trace, debug, info, notice, warn, error, critical e fatal, em maiúsculas ou minúsculas. Qualquer outro valor é guardado como Unspecified.
ID do tracetrace_id, traceId, traceidLiga o log ao seu trace.
ID do spanspan_id, spanId, spanidLiga o log ao seu span.
Serviçoo cabeçalho x-status200-service-nameFluentd quando o cabeçalho não está definido.
Hora—A hora em que o Status200 recebe o registro.

Qualquer outro campo vira um atributo chamado fluentd. seguido do nome do campo, pelo qual você pode pesquisar e filtrar: um campo container_name é @fluentd.container_name no explorador de registros. Um objeto aninhado é achatado com pontos, como fluentd.kubernetes.pod_name, e uma lista é guardada como JSON.

Os logs do Fluentd passam pelos seus pipelines de registros, filtros de descarte e regras de mascaramento como qualquer outro log.

Status200 auto-hospedado

Troque https://status200.ru em endpoint pela URL da sua instância do Status200: http(s)://YOUR_STATUS200_HOST/fluentd/logs.

Solução de problemas

O Fluentd registra 401 da saída HTTP

A chave de ingestão está ausente, é desconhecida ou expirou. Confira o valor de x-status200-token em headers.

O Fluentd registra 402 ou 422

402: no Status200 Cloud, o projeto está no plano Free e não tem método de pagamento. Adicione um em Configurações do projeto → Cobrança e faturas → Cobrança. 422: a chave está desativada, ou é uma chave de navegador. Ligue de novo Habilitado nas configurações da chave, ou crie uma chave Servidor.

O Fluentd registra 413

A requisição passa de 1 MB, o máximo que o Status200 aceita neste endpoint. Defina chunk_limit_size 900k na seção <buffer>, como na configuração acima.

Os logs chegam ao serviço Fluentd

Falta o cabeçalho x-status200-service-name. Adicione-o a headers em cada seção <match>.

O corpo do log mostra o registro inteiro como JSON

O Status200 pega o corpo do primeiro campo presente entre message, log, msg, body ou text, e guarda o registro inteiro quando ele não tem nenhum deles. Renomeie o campo que contém a sua linha de log para um desses, por exemplo com o filtro record_transformer do Fluentd.

Se tiver dúvidas ou precisar de ajuda com a configuração, escreva para support@status200.ru.

Próximos passos