Управление журналами в 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).