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 / server / Perguntas / 839661
Accepted
Garreth McDaid
Garreth McDaid
Asked: 2017-03-22 06:44:31 +0800 CST2017-03-22 06:44:31 +0800 CST 2017-03-22 06:44:31 +0800 CST

Como encaminhar logs de aplicativos de contêineres do Docker para ELK

  • 772

Estou tentando centralizar o log em um ambiente que usa várias tecnologias de aplicativos (Java, Rails e vários bancos de dados).

Queremos que os desenvolvedores criem pilhas com o Docker Compose, mas queremos que eles se refiram a uma fonte de log central (ELK) para depurar problemas, em vez de tentar abrir shells em contêineres do Docker em execução.

Todos os aplicativos gravam no sistema de arquivos em vez de STDOUT/STDERR, o que remove todas as opções associadas ao driver de registro do Docker e logspout também.

O que fizemos foi configurar os contêineres para que o rsyslog inclua os arquivos de log do aplicativo e os encaminhe para logstash, que possui uma entrada syslog. Isso funciona em termos de mover os logs de A para B, mas gerenciar logs de multitecnologia em ELK com base na entrada do syslog é horrível (por exemplo, tentar capturar vários rastreamentos de pilha Java ou consultas lentas do MySQL).

Existe uma maneira melhor de fazer isso? Devo executar o logstash em cada contêiner, para poder aplicar filtros e codecs diretamente aos arquivos de log, para não precisar depender da entrada do syslog?

Existe alguma maneira de usar o driver de log do Docker com arquivos de log do aplicativo que são gravados no sistema de arquivos?

docker
  • 2 2 respostas
  • 3817 Views

2 respostas

  • Voted
  1. Best Answer
    Jason Martin
    2017-03-22T06:52:52+08:002017-03-22T06:52:52+08:00

    Versões recentes do Docker suportam a transmissão de logs no formato 'GELF' para uma porta de rede. Logstash tem uma entrada GELF. Você pode executar o Logstash em cada nó e ter todas as instâncias do Docker no nó encaminhadas para ele.

    Como entrada do Logstash: https://www.elastic.co/guide/en/logstash/current/plugins-inputs-gelf.html

    gelf {
    }
    

    Para saída do Docker: https://docs.docker.com/engine/admin/logging/overview/#gelf

    $ docker run -dit \
                 --log-driver=gelf \
                 --log-opt gelf-address=udp://127.0.0.1:12201 \
                 alpine sh
    

    (O endereço gelf é de fora da perspectiva dos contêineres, não de dentro)

    • 2
  2. iwaseatenbyagrue
    2017-03-22T07:57:07+08:002017-03-22T07:57:07+08:00

    Você também pode configurar o logstash para analisar os vários arquivos de log json produzidos por padrão.

    Outra abordagem é usar o que é chamado de sidecar no Kubernetes.

    Eles fornecem alguns exemplos diferentes em sua página de conceitos de criação de log de cluster .

    Como você escolhe aplicar esse conceito depende inteiramente de suas necessidades.

    No entanto, uma simples prova de conceito pode funcionar por:

    • criando um sidecar logstash que aceita fluxos syslog de entrada (por exemplo, usa a entrada syslog)
    • configurar todos os contêineres para usar o driver syslog do docker para enviar o log para o sidecar.

    Você também pode, é claro, configurar um ouvinte syslog central (usando logstash ou rsyslog, por exemplo) e fazer isso sem um sidecar.

    Essa abordagem também segue a mesma linha da sugestão de @ Jason Martin de usar o GELF.

    Outro uso de um sidecar local pode ser criar um contêiner executando logstash com um arquivo input e expor um volume de log (por exemplo, /var/log/ ou /logs). Você pode compartilhar esse volume com outros contêineres, para permitir que eles gravem seus logs (por exemplo, /logs/$INSTANCE_ID/file.log) e fazer com que o logstash os analise.

    Esta última configuração permite monitorar arquivos em vez de STDOUT/STDERR, mas você provavelmente terá que ter seu diretório de log chmod 1777(ou vários sidecars).

    A configuração 'reversa' também funcionaria, é claro (mas parece mais difícil de gerenciar/manter): faça com que os contêineres de seu aplicativo exponham um volume de log e faça com que um sidecar logstash leia o conteúdo do volume de log.

    • 0

relate perguntas

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