В настоящее время у нас есть следующая настройка:
Несколько машин AWS EC2, на некоторых из которых запущен контейнер Docker, а на некоторых - без докеров. Для получения системных журналов, журналов веб-сервера (Apache) и журналов приложений у нас есть агент Fluentd (td-agent), работающий на экземпляре EC2. Они пересылают сообщения журнала ошибок на централизованный сервер Fluentd (агрегатор журналов), который, в свою очередь, отправляет их в Graylog. Что касается журналов доступа, все td-агенты на инстансах пересылают их непосредственно в AWS Kinesis Firehose, который, в свою очередь, сохраняет их на S3 каждые 5 минут (в буфере) и доступен для поиска AWS Athena. Журналы доступа к контейнерам Docker записываются в stdout, а журналы ошибок - в stderr. Драйвер ведения журнала docker для fluentd используется для пересылки их td-агенту, установленному на соответствующем хост-компьютере.
Теперь с этой настройкой есть некоторые проблемы:
Мы не используем CloudWatch Logs из-за цены и других причин. Работа с реальными файлами журналов также означала бы, что нам нужно было бы регулярно их чередовать, обращать внимание на дисковое пространство и т. Д. Последний пункт можно решить, используя RAM-Disk или отдельный диск. Но это не решит реальной проблемы наличия кеша / буфера фиксированного размера, который может заполниться и блокировать входящие журналы.
Какой подход лучше к этой проблеме? Есть ли какие-либо передовые методы ведения журнала контейнеров Docker?
На тот случай, если кто-то еще споткнется и задастся вопросом, как это сделать, вот какие у нас были варианты и что мы в итоге взяли на себя:
docker logs
, но они гибкие только для пользователя root. Они не предназначены для автоматической системы. Поверьте, я пробовал, и оно того не стоило. Несколько недостатков, включая отсутствие поддержки tag
директиве td-agent требуется не менее 30 секунд для использования файлов журнала новых контейнеров и так далее.tag
, могут быть просмотрены другими пользователями и доступны для просмотра в режиме реального времени и прекрасно работает с td-agent. Недостатки: добавляет еще один сервис и накладные расходы. Не поддерживает docker logs
. Кроме того, может возникнуть проблема с ограничением скорости и т. Д.