2017-02-01 14 views
6

Używam pojedynczego kontenera Docker na Elastic Beanstalk przy użyciu jego Single Container Docker Configuration i próbuję wysłać aplikację stdout do CloudWatch przy użyciu awslogs logging driver.Elastic Beanstalk Single Container Docker - użyj sterownika rejestrującego awslogs

EB szuka pliku Dockerrun.aws.json do konfiguracji kontenera, ale z tego, co widzę, nie ma opcji użycia awsloga jako sterownika zapisywania kontenera (lub dodania innych flag do docker run polecenie w tej sprawie).

Próbowałem włamanie do komendy docker run pomocą odpowiedź warunkiem here, dodając plik .ebextensions/01-commands.config o treści:

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' 

To działa, w tym sensie, że modyfikuje skrypt uruchomić, a logi pokazują w CloudWatch.

Ale aplikacja EB umiera. Kontener jest gotowy, ale nie odpowiada na żądania.

znaleźć następujący błąd w dziennikach kontenerowych:

"dzienniki" komenda jest obsługiwana tylko dla "json-file" i "journald" Logowanie sterowników (got: awslogs)

Znajduję odpowiedzi na podobne pytania dotyczące ECS (nie EB) sugerując, aby dołączyć ECS_AVAILABLE_LOGGING_DRIVERS z awsloga. Ale nie znajduję tego ustawienia konfiguracji w EB.

Jakieś myśli?

Odpowiedz

8

jestem delegowania tutaj odpowiedź jaką otrzymałem od AWS wsparcia:

Jako środowisko Elastic Beanstalk jednym pojemniku zbawi stdout i stderr w/var/log/EB-doker/Pojemniki/Eb- current-app/by domyślnie, a ponieważ nowy stos rozwiązań pozwala ci przesyłać strumieniowo dziennik do Cloudwatch, automatyzując konfigurację agenta AWSLogs w instancjach, co zalecam, aby dodać rozszerzenie ebextension do add stdout i stderr loguje pliki do konfiguracji chmurowej i używają już skonfigurowanego agenta do przesyłaj te pliki do dzienników w dzienniku stanu w chmurze. zamiast dotykać pre-hooków, które nie są wspierane przez AWS, ponieważ haki mogą zmieniać się z wersji stosu do wersji .

Odnośnie błędu widzisz „Raporty” polecenie jest obsługiwane tylko dla „json-file” i „journald” kierowców rejestrowania (GOT: awslogs)”to błąd jest od sposobu działania Döcker, gdy jest on skonfigurowany wysyłanie dzienników do drugim kierowcą obok jSON-pliku lub journald nie będzie w stanie wyświetlania dzienników lokalnie, gdyż nie posiada lokalną kopię nich.

### 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

udało mi się rozwinąć poprzedni odpowiedź na wieloelementowe elastyczne środowisko beanstalk, a także wstrzyknąć nazwę środowiska aby udzielić poprawnego uprawnienia w roli e2, aby móc utworzyć grupę dziennika.Można sprawdzić, czy to działa, patrząc w:

/var/log/awslogs.log 

to idzie w .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 
Powiązane problemy