2017-02-01 9 views
6

Я запускаю один контейнер Docker на эластичном бобовом стебле, используя его Single Container Docker Configuration, и пытается отправить приложение stdout приложения в CloudWatch с помощью awslogs logging driver.Elastic Beanstalk Single Container Docker - использовать драйвер регистрации журналов awslog

EB ищет файл Dockerrun.aws.json для конфигурации контейнера, но, насколько я вижу, не имеет возможности использовать awslogs в качестве драйвера регистрации контейнера (или добавить любые другие флаги в docker run команда в этом отношении).

Я пытался взломом команды docker run используя ответ при условии here, путем добавления файла .ebextensions/01-commands.config с содержанием:

commands: 
    add_awslogs: 
    command: 'sudo sed -i "s/docker run -d/docker run --log-driver=awslogs --log-opt awslogs-region=eu-west-2 --log-opt awslogs-group=dockerContainerLogs -d/" /opt/elasticbeanstalk/hooks/appdeploy/enact/00run.sh' 

Это работает, в том смысле, что он изменяет сценарий запуска и журналы показывают в CloudWatch.

Но приложение EB умирает. Контейнер вверх, но не отвечает на запросы.

я нахожу следующее сообщение об ошибке в журнале контейнера:

"журналы" команда поддерживается только для "JSON-файл" и "journald" каротажного водителей (получил: awslogs)

Я нахожу ответы на похожие вопросы, касающиеся ECS (не EB), предлагая добавить ECS_AVAILABLE_LOGGING_DRIVERS с awslogs. Но я не нашел эту конфигурацию в EB.

Любые мысли?

ответ

8

Я отправляю здесь ответ, который я получил от поддержки AWS:

В среде Elastic Beanstalk один контейнер будет сохранить стандартный вывод и STDERR на/вар/Журнал/ЕВ-грузчик/контейнеры/eb- current-app/by по умолчанию, а так как новый стек решений позволяет вам обмениваться журналом с облачным экраном, автоматизируя конфигурацию агента AWSLogs на примерах, я рекомендую добавить ebextension в . файлы stdout и stderr записываются в конфигурацию облачного экрана и используют уже настроенный агент для передайте эти файлы в журналов cloudwatch. вместо того, чтобы прикасаться к предварительным крючкам, который не равен , поддерживаемый AWS, поскольку крючки могут меняться от версии стека решений до другой.

Относительно ошибки вы видите «журналы» команда поддерживается только для «JSon-файла» и «journald» водителей лесозаготовительных (GOT: awslogs)»это ошибки от того, как работают докеры, когда он настроен на отправлять журналы другого водителя рядом с JSON-файл или journald он не сможет журналы отображения локально, поскольку он не имеет локальную копию из них.

### BEGIN .ebextensions/logs.config 
option_settings: 
    - namespace: aws:elasticbeanstalk:cloudwatch:logs 
    option_name: StreamLogs 
    value: true 
    - namespace: aws:elasticbeanstalk:cloudwatch:logs 
    option_name: DeleteOnTerminate 
    value: false 
    - namespace: aws:elasticbeanstalk:cloudwatch:logs 
    option_name: RetentionInDays 
    value: 7 

files: 
    "/etc/awslogs/config/stdout.conf": 
    mode: "000755" 
    owner: root 
    group: root 
    content: | 
     [docker-stdout] 
     log_group_name=/aws/elasticbeanstalk/environment_name/docker-stdout 
     log_stream_name={instance_id} 
     file=/var/log/eb-docker/containers/eb-current-app/*-stdouterr.log 

commands: 
    "00_restart_awslogs": 
    command: service awslogs restart 

### END .ebextensions/logs.config 
1

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

/var/log/awslogs.log 

это идет в .ebextensions/logs.config

option_settings: 
    - namespace: aws:elasticbeanstalk:cloudwatch:logs 
    option_name: StreamLogs 
    value: true 
    - namespace: aws:elasticbeanstalk:cloudwatch:logs 
    option_name: DeleteOnTerminate 
    value: false 
    - namespace: aws:elasticbeanstalk:cloudwatch:logs 
    option_name: RetentionInDays 
    value: 14 

files: 
    "/etc/awslogs/config/stdout.conf": 
    mode: "000755" 
    owner: root 
    group: root 
    content: | 
     [/var/log/containers/docker-stdout] 
     log_group_name=/aws/elasticbeanstalk/`{ "Ref" : "AWSEBEnvironmentName" }`/docker-stdout.log 
     log_stream_name={instance_id} 
     file=/var/log/containers/*-stdouterr.log 

commands: 
    "00_restart_awslogs": 
    command: service awslogs restart 

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

  • Нет связанных вопросов^_^