Назад | Перейти на главную страницу

Лучший способ войти в два разных потока журналов CloudWatch из контейнера ECS?

Мы запускаем наши сервисы на платформе AWS ECS и отправляем наши журналы в AWS CloudWatch.

У нас есть два типа журналов, любой контейнер может производить любой тип:

  1. обычные журналы приложений (доступ, ошибка, еще много чего); они должны быть легко доступны разработчикам и администраторам
  2. журналы аудита (удобочитаемые журналы «кто что и когда делал»); доступ к ним должен быть ограничен

Журналы аудита обязательны в соответствии с нормативными актами, и, помимо более строгих требований к контролю доступа, они имеют более длительный срок хранения, чем журналы приложений, поэтому размещение этих двух журналов в одном потоке на самом деле не вариант. Таким образом, мы используем два потока журналов, один из которых находится в группе журналов CloudWatch со строгой политикой доступа.

В настоящее время мы записываем журналы в отдельные файлы на диске, откуда агент журнала отправляет записи журнала в CloudWatch. Однако мы бы хотели переключиться на "Docker Way" ведения журнала, то есть записывать все журналы в STDOUT или STDERR, а обо всем остальном позаботится драйвер журнала. Это звучит особенно привлекательно, потому что диски журналов (почти) единственные, которые мы используем, и избавиться от них было бы действительно очень приятно. (За исключением дисков журналов, наши контейнеры предназначены только для чтения.)

Проблема в том, что мы не можем найти разумного способа разделить потоки журналов. Очевидно, что нужно как-то пометить сообщения журнала и разделить их позже, но проблема все еще существует:

Надеюсь, нам не хватает чего-то очевидного, и в этом случае мы будем очень признательны за помощь.

Если нет, есть ли какие-нибудь обходные пути (или даже правильные решения), чтобы заставить такие вещи работать?

По крайней мере, есть два собственных способа AWS,

  1. Вы можете создать подписка на журналы CloudWatch для обработки потока журналов для целей аудита
  2. Использовать недавно запущенную функцию Firelens чтобы собирать журналы в любое место, куда вы хотите.

Мы все еще ищем лучший способ сделать это, но пока то, что мы собираемся делать в компании, с которой я работаю, - это прикрепить том к контейнеру и записать туда, установить агент и обрабатывать его как обычный файл журнала.

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

Документация по драйверам

Использование долота Fluent с ECS

Пример использования Fargate

Что касается журнала аудита, не могли бы вы поделиться тем, что вы хотите проверить? Как правило, для таких целей вы можете использовать CloudTrail или GuardDuty.