Managing Application Logs

Applications running on tsuru should send all their log messages to stdout and stderr. This will allow docker to capture these logs and forward them according to instructions configured by tsuru.

There are basically two ways to setup application logs in tsuru. Through bs container and directly to an external log service. The sections below will talk about the configuration options and advantages of each setup.

bs

bs (or big sibling) is a container started automatically by tsuru on every docker node created or registered in tsuru. It’s responsible for reporting information on application containers, this information include metrics, unit status and can also include container logs.

On a default tsuru installation all container started on docker will be configured to send logs to the bs container using the syslog protocol. The bs container will then send the logs to the tsuru api server and to any number of configured external syslog servers. Similar to the diagram below:

Docker Node
+---------------------------------------------------------+       +---------------------+
|                                               syslog    |       |                     |
|                                              +----------------->| ext syslog server 1 |
|  +-----------------+ syslog                  |(optional)|       |                     |
|  |  app container  |+----------+             |          |       +---------------------+
|  +-----------------+           |             +          |
|                                |      +--------------+  |       +---------------------+
|                                +----->|              |syslog    |                     |
|                                       | bs container |+-------->| ext syslog server 2 |
|                                +----->|              |(optional)|                     |
|                                |      +--------------+  |       +---------------------+
|  +-----------------+ syslog    |             +          |
|  |  app container  |+----------+             |          |
|  +-----------------+                         |          |
|                                              |          |
|                                              |          |
|                                              |          |
+----------------------------------------------|----------+
                                               |
                                               |
+-------------------+                          |
|                   |  websocket (optional)    |
| tsuru api server  |<-------------------------+
|                   |
+-------------------+

For informations about how to configure bs to forward logs and also some tunning options, please refer to the bs documentation

The advantage of having the bs container as an intermediary is that it knows how to talk to the tsuru api server. Sending logs to the tsuru api server enables the tsuru app-log command which can be used to quickly troubleshoot problems with the application without the need of a third-party tool to read the logs.

However, tsuru api server is NOT a permanent log storage, only the latest 5000 log lines from each application are stored. If a permanent storage is required an external syslog server must be configured.

Direct

tsuru can be configured to completely bypass bs when sending logs. This can be done using the tsuru-admin docker-log-update command. See the command reference documentation for more details.

When a log-driver different from bs is chosen, the logs will be similar to the diagram below:

Docker Node
+-----------------------+
|                       |
|  +-----------------+  |
|  |  app container  |-+|
|  +-----------------+ |chosen driver     +---------------------+
|                      +----------------->|                     |
|                       |                 | external log server |
|                      +----------------->|                     |
|  +-----------------+ |chosen driver     +---------------------+
|  |  app container  |-+|
|  +-----------------+  |
|                       |
+-----------------------+

The downside of using a direct logs is that the tsuru api server will NOT receive any log messages anymore. As a consequence the command tsuru app-log will be disabled and users will have to refer to the chosen log driver to read log messages.