loginjector/README.md

1.7 KiB

loginjector

Retrieve logs from docker containers in real time.

Not all programs support sending logs to a remote server, so logs in containers tend to be lost by lazy sysadmins. This is a tool that attempts to fix this, by leveraging rsyslog.

By specifying a list of log paths in the container or auto detection from a built-in list, loginjector will generate a rsyslog config within the container and spawn rsyslogd. Simultaneously, loginjector listens on UDP ports to receive log entires sent by containers and writes them to disk on the host.

Assumptions

  • The rsyslogd binary is available in the container at /usr/sbin/rsyslogd (this is stander for ubuntu base images)
  • Docker is using it's default networking strategy

Installation

  • git clone ssh://git@gitlab.davepedu.com:222/dave/loginjector.git
  • cd loginjector
  • python3 setup.py install

Running

  • loginjector -s unix://var/run/docker.sock -o /var/log/container/

(The above arguments are actually the defaults and need not be specified)

Specifying custom paths

Add the -c <file> argument where <file> is a json or yml file structured like:

{
    "container_name": {
        "app_name": ["/log/path.log", "/another/log/path.log"],
        "another_app": [ ... ]
    },
    "another_container": {

    }
}

Container bake-in

If you're a docker image creator, you can add a file to your image containing log paths.

Add to your image a file at the path /.loghint containing:

{
    "app_name": ["/log/path.log", "/another/log/path.log"],
    "another_app": [ ... ]
}

TODO

  • Implement the custom path option displayed above
  • Implement the loghint file mentioned above