Управление журналами в Docker

Я хочу отправить журнал STDOUT из контейнера Docker на fluentd. Но когда один контейнер выводит журналы доступа и журналы ошибок, журналы смешиваются.

пример

# rails access log
2017-04-07 12:10:01 +0000 6a51e389e724: {"log":"I, [2017-04-07T12:10:01.825923 #7]  INFO -- : Started GET \"/users/new\" for 172.21.0.1 at 2017-04-07 12:10:01 +0000","container_id":"6a51e389e724c67be4e714402b69da192db4a304cbfdf638594de6cff9774c23","container_name":"/app","source":"stdout"}

# rails error log
2017-04-07 12:10:01 +0000 6a51e389e724: {"container_id":"6a51e389e724c67be4e714402b69da192db4a304cbfdf638594de6cff9774c23","container_name":"/app","source":"stdout","log":"E, [2017-04-07T12:10:01.830039 #7] ERROR -- : Invoke logger error"}

# rails access log
2017-04-07 12:10:03 +0000 6a51e389e724: {"log":"I, [2017-04-07T12:10:01.825923 #7]  INFO -- : Started POST \"/users/create\" for 172.21.0.1 at 2017-04-07 12:10:01 +0000","container_id":"6a51e389e724c67be4e714402b69da192db4a304cbfdf638594de6cff9774c23","container_name":"/app","source":"stdout"}

Могу ли я добавить метку для каждого типа журнала? Пожалуйста, скажите мне, если у вас есть хорошее решение.

Спасибо вам и всего наилучшего.

1 ответ

Поскольку журналы доступа и ошибок вашего приложения отправляются в STDOUT контейнера, у вас нет возможности разделить их, зарегистрировав драйвер. В качестве решения вы можете отправить журнал доступа в STDOUT, журнал ошибок в STDERR контейнера, а затем дифференцировать журналы по полю "источник" каждого сообщения json (это можно сделать, если вы подключите fluentd к asticsearch+kibana).

Другие вопросы по тегам