AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / user-377666

Kate's questions

Martin Hope
Kate
Asked: 2024-04-13 04:55:35 +0800 CST

Analisar logs JSON aninhados no Grafana Loki (encaminhados com Fluentd)

  • 5

Meu laboratório possui alguns contêineres Docker como segue:

nome Imagem do Docker
Fluente fluente/fluente:v1.16-1
Fluente cr.fluentbit.io/fluent/fluent-bit
Loki grafana/loki
Grafana grafana/grafana-empresa
Caddie caddie: construtor

Meu objetivo é coletar logs do Caddy e visualizá-los no Grafana.

Cenário: O Fluent-bit segue os logs e os envia para o Fluentd. Em seguida, o Fluentd envia os logs para o Loki. Meu objetivo é usar o Fluentd como coletor central de logs.

O problema é a análise desses logs do lado do Grafana.

Os logs do Caddy estão no formato JSON (aninhado). Amostra:

{"level":"info","ts":1712949034.535184,"logger":"http.log.access.log1","msg":"solicitação tratada","request":{"remote_ip":"172.18. 0.1","remote_port":"39664","client_ip":"172.18.0.1","proto":"HTTP/1.1","method":"POST","host":"grafana.darknet.com" ,"uri":"/api/short-urls","headers":{"Content-Length":["580"],"Origem":["http://grafana.darknet.com"]," Content-Type":["application/json"],"User-Agent":["Mozilla/5.0 (X11; Linux x86_64; rv:124.0) Gecko/20100101 Firefox/124.0"],"Aceitar":["aplicativo /json, texto/simples, */*"],"X-Grafana-Org-Id":["1"],"Connection":["keep-alive"],"Accept-Language":["en-US,en;q=0.5"],"Aceitar -Encoding":["gzip, deflate"],"Referer":["http://grafana.darknet.com/explore?schemaVersion=1&panes=%7B%22Efb%22:%7B%22datasource%22:%22f779c221 -7bd2-468d-9f9c-96e069b869f8%22,%22queries%22:%5B%7B%22refId%22:%22A%22,%22expr%22:%22%7Bjob%3D%5C%22caddy.log.loki% 5C%22%7D%20%7C%20json%22,%22queryType%22:%22range%22,%22datasource%22:%7B%22type%22:%22loki%22,%22uid%22:%22f779c221-7bd2 -468d-9f9c-96e069b869f8%22%7D,%22editorMode%22:%22code%22%7D%5D,%22range%22:%7B%22from%22:%22now-1m%22,%22to%22:% 22now%22%7D%7D%7D&orgId=1"],"X-Grafana-Device-Id":["f343e938e74b3a57997faff69d24de8a"],"Cookie":[]}},"bytes_read":580,"user_id":"","duration":0.011267887,"size":72,"status":200,"resp_headers":{"X-Xss-Protection":["1; mode=block"],"Data ":["Sexta-feira, 12 de abril de 2024 19:10:34 GMT"],"Content-Length":["72"],"Servidor":["Caddy"],"Cache-Control":["no- store"],"Content-Type":["application/json"],"X-Content-Type-Options":["nosniff"],"X-Frame-Options":["deny"]}}["Caddy"],"Cache-Control":["no-store"],"Content-Type":["application/json"],"X-Content-Type-Options":["nosniff"], "Opções de quadro X":["deny"]}}["Caddy"],"Cache-Control":["no-store"],"Content-Type":["application/json"],"X-Content-Type-Options":["nosniff"], "Opções de quadro X":["deny"]}}

Eu tentei duas configurações diferentes até agora:

  1. Faça com que o Fluent-bit envie os logs para o Fluentd e, em seguida, o Fluentd encaminhe os logs para o Loki (marcado como caddy.log)
    . Esquema:Cady --> Fluent-bit --> Fluentd --> Loki

  2. Faça com que o Fluent-bit envie os logs diretamente para o Loki (marcado como caddy.log.loki)
    Esquema:Cady --> Fluent-bit --> Loki

Aqui eu tenho a seguinte configuração do Fluent-bit para enviar logs para Loki e Fluentd ao mesmo tempo, com tags diferentes:

[INPUT]
    Name tail
    Path /var/log/caddy/*.log
    Parser json
    Tag caddy.log
    Path_Key log_filename

# send logs to Fluentd
[OUTPUT]
    Name forward
    Host fluentd
    Port 24224
    Match caddy.*

# send logs straight to Loki
[OUTPUT]
    name                   loki
    match                  caddy.*
    host                   loki
    port                   3100
    labels                 job=caddy.log.loki

Configuração do Fluentd:

<source>
  @type  forward
</source>

<match caddy.*>
  @type loki
  url "http://loki:3100"
  extra_labels {"job": "caddy.log"}
  <buffer>
    flush_interval 5s
    flush_at_shutdown true
  </buffer>
</match>

Depois, no Grafana, posso navegar pelos logs e tenho os dois rótulos disponíveis na janela Explorar.

Se eu escolher a tag, caddy.log.lokios logs serão exibidos em JSON simples, conforme mostrado abaixo. Com esta expressão posso analisá-los: {job="caddy.log.loki"} | json. Parte do JSON aninhado é extraído, por exemplo: request_client_ip mas nem todo , por exemplo, request.headersestá faltando, mas posso conviver com isso.

registros vistos como JSON

Se eu escolher a tag caddy.log, os logs serão exibidos em formato "misto":

registros em formato misto

Parece que ocorreu alguma transformação, mas não tenho certeza de onde. Posso usar logfmtpara analisar as linhas. Mas ainda fico com alguns campos não analisados ​​( request, resp_headers) conforme mostrado abaixo:

depois de usar logfmt

Questões:

  • por que os logs não são mais renderizados em JSON simples se eu adicionar a etapa Fluentd?
  • qual seria a melhor maneira de enviar e analisar logs JSON aninhados em Loki/Grafana com Fluentd?
grafana
  • 1 respostas
  • 37 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve