Шаблон проектирования журналов контейнеров AWS ECS

У меня классическое приложение scala, оно производит три разных журнала в локации

/var/log/myapp/log1/mylog.log
/var/log/myapp/log2/another.log
/var/log/myapp/log3/anotherone.log

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

Теперь приложение / контейнер будет развернуто в AWS ECS с группой автоматического масштабирования. в этом случае несколько контейнеров могут работать на одном хосте ecs.

Я хочу использовать облачные часы для отслеживания журналов своих приложений.

Одним из решений может быть размещение агента журнала aws в контейнере моего приложения.

Есть ли лучший способ получить журналы приложений из контейнера в журнал облачных наблюдений.

помощь очень ценится.


person Know Nothing    schedule 21.06.2017    source источник


Ответы (2)


При использовании докера рекомендуется не входить в файлы, а отправлять журналы в stdout и stderr. Это предотвращает запись журналов в файловую систему контейнера и (в зависимости от используемого драйвера журналирования) позволяет просматривать журналы с помощью подкоманды docker logs / docker container logs.

Многие приложения имеют параметр конфигурации для входа в _5 _ / _ 6_, но если это не вариант, вы можете создать символическую ссылку для перенаправления вывода; например, официальный образ NGINX на Docker Hub использует этот подход.

Docker поддерживает драйверы журналирования, которые позволяют отправлять журналы (среди прочего) в облачные часы AWS. После того, как вы изменили свой образ, чтобы он регистрировался в _7 _ / _ 8_, вы можете настроить драйвер ведения журналов AWS.

Дополнительную информацию о ведении журнала в Docker можно найти в разделе "ведение журнала" документации < / а>

person thaJeztah    schedule 21.06.2017
comment
Спасибо @thaJeztah. Но наше приложение является устаревшим и не было написано как докер. Если мы напишем новое приложение, мы сможем пойти по пути докера. Теперь нам нужно иметь дело с устаревшими приложениями, так что же лучше всего подходит для моего варианта использования? - person Know Nothing; 21.06.2017
comment
@KnowNothing: использует ли это приложение какую-либо структуру ведения журналов? Если это так, то вы, вероятно, можете переопределить текущее поведение с помощью специального файла конфигурации и / или некоторых системных свойств. Другой вариант - использовать подход связывания, предложенный @thaJeztah, или вы можете попробовать запустить агент CloudWatch либо непосредственно в контейнере (например, используя процесс супервизора), либо как связанный контейнер с rsyslog между ними (оба варианта довольно сложны - я Я настоятельно рекомендую сделать ссылку на stdout или перенастроить фреймворк, если это возможно). - person Szymon Jednac; 21.06.2017
comment
@Know - ничего, если вы создадите символическую ссылку на эти файлы на _1 _ / _ 2_, это должно сработать; ты пробовал это делать? - person thaJeztah; 21.06.2017
comment
Связывание @thaJeztah будет работать, но оно объединит все три файла журнала в один поток журнала, но мы хотим, чтобы три файла журнала в трех разных потоках в Cloudwatch под одной группой журналов - person Know Nothing; 21.06.2017
comment
Можем ли мы не просто установить агент журнала на хосте ecs и выполнить монтирование тома. Я не уверен, что произойдет, если несколько экземпляров контейнера будут запущены на одном хосте ecs с одинаковым монтированием тома? - person Know Nothing; 22.06.2017

Вам не нужен агент журнала, если вы можете изменить код.

Вы можете напрямую публиковать данные пользовательских показателей в ColudWatch, как сказано на этой странице: https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/examples-cloudwatch-publish-custom-metrics.html

person Justin    schedule 16.02.2020