2017-02-22 3 views
8

Я заинтересован в прослушивании/реагировании на событие, что служба не может начать запуск задачи из-за недостаточного процессора или памяти. Эта информация может быть просмотрена на консоли, если я выбрал конкретную услугу и просмотрю ее вкладку «События». Там будет отображаться следующее событие:Как прослушать событие «Недостаточно процессора/памяти» в службе AWS ECS?

Служба X не смогла разместить задачу, потому что экземпляр контейнера не выполнил все его требования. Ближайший соответствующий экземпляр-экземпляр Y имеет недостаточные модули ЦП. , см. раздел «Поиск и устранение неисправностей».

Экземпляры контейнера в кластере управляются в группе AutoScalingGroup, поэтому соответствующее действие будет реагировать на это событие путем масштабирования в дополнительном экземпляре, который затем позволит планировать задачу для запуска. Теперь, моя проблема в том, как я реагирую на это событие?

У меня есть LogGroup, который содержит данные из следующих файлов из всех экземпляров EC2 в кластере:

  • /вар/Журнал/dmesg
  • /вар/Журнал/сообщения
  • /вар/журнал/докер
  • /var/log/ecs/ecs-init.log.*
  • /var/log/ecs/ecs-agent.log.*

(экземпляры EC2 основаны на изображениях с оптимизацией amazon-ecs)

Первоначально я думал, что сообщение «service X не удалось разместить задачу ...» появится в одном из этих файлов журнала (более конкретно в ecs-agent.log или ecs-init.log), но это было не так.

Я тогда понял, что «ECS Evenets» - вещь (см. Больше на http://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_cwe_events.html). Но, к сожалению, это конкретное событие не является тем, что поддерживается «Событиями ECS». Только: Контейнерные события Изменение состояния событий и Состояние задачи задачи Изменение. НЕ «События изменения состояния службы». Несмотря на это, можно было бы подумать, что события со вкладки «События» в сервисе также будут переданы потоком, а это не так. Я пришел к пониманию документации даже говорит, что:

«Вы можете использовать поток событий Amazon ECS для CloudWatch События получить вблизи уведомления в режиме реального времени о текущем состоянии обоих контейнерных экземпляров в пределах кластера Amazon ECS, и текущее состояние всех задач, выполняемых на этих экземплярах контейнера. "

И, таким образом, «поток событий Amazon ECS для событий CloudWatch» не обрабатывает события обслуживания (и, тем самым, не события для задач, которые не могут быть запущены). Я действительно надеюсь, что «события изменения состояния службы» будут включены в будущем, таким образом я смогу сделать правило Event CloudWatch, которое соответствует этому событию, вызывает функцию Lambda, которая затем определит, было ли событие событием типа «service X» не удалось выполнить задачу ... », и, основываясь на этом, манипулировать AutoScalingGroup для масштабирования в дополнительном экземпляре кластера.

Но, как указано, в настоящий момент это не поддерживается. Есть ли другой способ, которым я могу «слушать» это событие?Я даже думал о запуске лямбды каждые 2-3 минуты, который использует CLI для вызова «aws ecs описать-services -service X» для вывода списка событий, а затем совпадения на «службе X» не удалось выполнить задачу ..." мероприятие. Но это просто кажется неправильным ...

Любая помощь очень ценится. Благодаря!

+0

Если AWS предоставил разумные показатели для ECS (* абсолютный * cpu/memory available), тогда это будет возможно. То есть, можно установить сигнал тревоги, когда эти значения упадут ниже самых больших требований к службам, работающим на кластере и масштабируемым соответствующим образом. Запрос функции AWS? – MikeGM

+0

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

ответ

1

Я также ищу решение этой проблемы. Наша компания использует Spotinst для управления нашими кластерами ECS. В прошлом году я попросил Спотинста предоставить решение. Менеджер продукта там только что сообщил мне, что они выпустят эту функцию в начале августа (через пару недель).

+0

UPDATE: теперь мы используем эту функцию для автоматического масштабирования (она работает хорошо), и Spotinst работает над улучшением функции, чтобы оставить больше «запасных» ресурсов доступными. –

Смежные вопросы