Como encaminhar logs do contêiner do Docker para o ELK?

4

Gostaria de saber qual é a maneira mais fácil de encaminhar os logs do contêiner do Docker para um servidor ELK. Até agora, as soluções que tentei depois de pesquisar na Internet não funcionaram.

Basicamente, eu tenho uma imagem de janela de encaixe que executo usando o docker-compose, esse contêiner não registra nada localmente (ela é composta de serviços diferentes, mas nenhum deles é logstash ou qualquer outro), mas vejo o log de docker logs -tf imageName ou% código%. Como estou iniciando os contêineres com composição, não posso usar (ou pelo menos não sei como) a opção docker-compose logs do docker.

Assim, eu queria saber se alguém pode me esclarecer um pouco sobre como encaminhar os logs para um contêiner ELK, por exemplo.

Agradecemos antecipadamente

Atenciosamente

SOLUÇÃO :

Graças a madeddie, consegui resolver meu problema da seguinte maneira, mencionando que usei o empacotamento básico em ELK que Madeddie sugeriu em seu post.

Primeiro, atualizo o arquivo --logs-driver do meu contêiner para adicionar entradas para a referência de registro como madeddie me disse, eu incluí uma entrada por serviço, um trecho do meu docker-compose se parece com isso

   version: '2'
    services:
      mosquitto:
        image: ansi/mosquitto
        ports:
          - "1883:1883" # Public access to MQTT
          - "12202:12202"  #mapping logs
        logging: 
           driver: gelf
           options: 
             gelf-address: udp://localhost:12202
    redis:
     image: redis
     command: redis-server --appendonly yes
     ports:
       - "6379:6379" # No public access to Redis
       - "12203:12203" #mapping logs
     volumes:
       - /home/dockeruser/redis-data:/data
     logging: 
       driver: gelf
       options: 
         gelf-address: udp://localhost:12203 

Em segundo lugar, eu tive que usar um número de porta diferente por sevice para poder encaminhar os logs.

Por fim, atualizei meu arquivo docker-compose.yml do contêiner de elk para mapear cada uma das portas upd onde eu estava enviando meus logs para aquele que o logstash escuta

logstash:
  build: logstash/
  command: logstash -f /etc/logstash/conf.d/logstash.conf
  volumes:
    - ./logstash/config:/etc/logstash/conf.d
  ports:
    - "5000:5000"
    - "12202:12201/udp" #mapping mosquitto logs
    - "12203:12201/udp" #mapping redis logs

Essa configuração e a adição da entrada docker-compose.yml em gelf {} fizeram com que funcionasse. Também é importante configurar corretamente o endereço IP do serviço de encaixe.

Normas!

    
por ndarkness 11.08.2016 / 20:39

1 resposta

3

O Docker compose tem a palavra-chave de registro: source

logging: 
  driver: syslog
  options: 
    syslog-address: "tcp://192.168.0.42:123"

Então, se você sabe para onde ir a partir daí, vá em frente.

Se não, posso aconselhá-lo a examinar o gelf driver de log do docker e o plug-in de entrada do logstash gelf

Se você, por exemplo, usar esta configuração básica de ELK-stack-in-containers, você atualizaria o docker- compor o arquivo e adicionar a porta - "12201:12201/udp" ao logstash.

Edite a seção de entrada logstash.conf para:

input {
    tcp {
        port => 5000
    }
    gelf {
    }

}

Em seguida, configure seus contêineres para usar o driver de registro gelf (não syslog) e a opção gelf-address=udp://ip_of_logstash:12201 (em vez de syslog-address).

A única mágica que você terá que cuidar é como o Docker encontrará o endereço IP ou o nome do host do contêiner do Logstash. Você poderia resolver isso por meio da nomeação do docker-compose, dos links do Docker ou apenas manualmente.

Docker e ELK são poderosos, flexíveis, mas também grandes e complexos. Prepare-se para colocar em algum tempo sério, em leitura e experimentação.

Não tenha medo de abrir novas (e de preferência muito específicas) perguntas que você encontra enquanto explora tudo isso.

    
por 11.08.2016 / 20:58