(Контейнер Docker на AWS-ECS завершается до того, как все журналы будут напечатаны в CloudWatch Logs) Почему некоторые потоки группы журналов CloudWatch не завершены (т. Е. Контейнер Docker Fargate завершается успешно, но журналы перестают обновляться внезапно)? Это время от времени наблюдается почти во всех группах журналов, однако не при каждом запуске потока журналов / задач. Я использую версию 1.3.0
Описание:
Dockerfile
запускает скрипты node.js или Python с помощью команды CMD
.
Это не серверы / длительные процессы, и в моем случае требуется, чтобы контейнеры закрывались после завершения задачи.
Пример файла Dockerfile:
FROM node:6
WORKDIR /path/to/app/
COPY package*.json ./
RUN npm install
COPY . .
CMD [ "node", "run-this-script.js" ]
Все журналы правильно распечатываются на stdout / stderr моего терминала, когда эта команда запускается на терминале локально с docker run
.
Чтобы запустить их как задачи ECS на Fargate, драйвер журнала для установлен как awslogs
из шаблона CloudFormation.
...
LogConfiguration:
LogDriver: 'awslogs'
Options:
awslogs-group: !Sub '/ecs/ecs-tasks-${TaskName}'
awslogs-region: !Ref AWS::Region
awslogs-stream-prefix: ecs
...
Видя, что иногда вывод журналов cloduwatch бывает неполным, я провел тесты и проверил все ограничения из CW Logs Limits, и я уверен, что проблема не в этом.
Сначала я думал, что это проблема с асинхронным выходом node js до того, как console.log()
будет сброшен, или что процесс завершается слишком рано, но та же проблема возникает, когда я использую другой язык - что заставляет меня думать, что это не проблема с кодом, а именно с облачными часами.
У меня не получилось вызвать задержки в коде путем добавления таймера сна.
Возможно, поскольку контейнер докеров выходит сразу после завершения задачи, журналы не получают достаточно времени для записи в CWLogs, но должен быть способ гарантировать, что этого не произойдет?
образцы журналов: неполный поток:
{ "message": "configs to run", "data": {"dailyConfigs":"filename.json"]}}
running for filename
завершенный поток журнала:
{ "message": "configs to run", "data": {"dailyConfigs":"filename.json"]}}
running for filename
stdout: entered query_script
... <more log lines>
stderr:
real 0m23.394s
user 0m0.008s
sys 0m0.004s
(node:1) DeprecationWarning: PG.end is deprecated - please see the upgrade guide at https://node-postgres.com/guides/upgrading