16

I usually run applications as docker containers because of its high flexibility and availability. Is there a way to get the container logs into my logstash server.

Kishor Unnikrishnan
  • 1,928
  • 4
  • 21
  • 33

1 Answers1

23

Docker includes multiple logging mechanisms to help you get information from running containers and services by means of logging drivers.

Each Docker daemon has a default logging driver, which each container uses unless you configure it to use a different logging driver.

You can simply get your container logs by configuring Logstash as follows and running the container whose logs are to be viewed by changing its default log driver to syslog.

#logstash.conf

input {
  tcp {
    port => 5000
  }
}

output {
  stdout {}
}

The below two commands will display the hello-world container logs in logstash.

docker run -it --rm --name=logstash -p 5000:5000 -v /path/to/logstash.conf:/usr/share/logstash/config/logstash.yml docker.elastic.co/logstash/logstash:7.14.0

docker run --log-driver=syslog --log-opt syslog-address=tcp://<logstash-system-ip>:5000 hello-world

The output of Logstash can even sent to elasticsearch by simply configuring the output section as,

  elasticsearch {

    hosts => ["<elastic-system-ip>:9200"]

  }

Visit https://docs.docker.com/engine/admin/logging/overview/

Gijs
  • 79
  • 6
Kishor Unnikrishnan
  • 1,928
  • 4
  • 21
  • 33
  • 2
    The command to run logstash doesn't quite work. It should be this: `docker run -it --rm --name logstash -p 5000:5000 -v /path/to/logstash.conf:/usr/share/logstash/pipeline/logstash.conf docker.elastic.co/logstash/logstash:7.14.0` – Gijs Aug 23 '21 at 09:18