2017-02-01 4 views
6

Ich führe einen einzelnen Docker Container auf Elastic Beanstalk unter Verwendung seiner Single Container Docker Configuration, und versuche, die Anwendung stdout an CloudWatch mit der awslogs logging driver zu senden.Elastic Beanstalk Einzelner Container Docker - benutze awslogs logging driver

EB sucht nach einer Dockerrun.aws.json-Datei für die Konfiguration des Containers, aber soweit ich sehen kann, gibt es keine Option, um awslogs als Protokolltreiber des Containers zu verwenden (oder andere Flags zum docker run Befehl für diese Angelegenheit).

Ich habe versucht, das Eindringen in den docker run Befehl zur Verfügung gestellt, die Antwort mit here, indem Sie eine Datei .ebextensions/01-commands.config mit Inhalt hinzufügen:

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' 

Dies funktioniert, in dem Sinne, dass sie den Lauf Skript ändern und Protokolle zeigen in CloudWatch.

Aber die EB-Anwendung stirbt. Der Container ist aktiv, antwortet jedoch nicht auf Anforderungen.

finde ich den folgenden Fehler in den Container Protokolle:

"Protokolle" Befehl nur für "json-Datei" unterstützt wird, und "journald" logging Treiber (GOT: awslogs)

Ich finde Antworten auf ähnliche Fragen in Bezug auf ECS (nicht EB), die vorschlägt, ECS_AVAILABLE_LOGGING_DRIVERS mit awslogs anzufügen. Aber ich finde diese Konfigurationseinstellung nicht in EB.

Irgendwelche Gedanken?

Antwort

8

Ich poste hier die Antwort, die ich von AWS Unterstützung erhalten:

Wie Elastic Beanstalk Einzel Container-Umgebung wird die stdout und stderr auf/var/log/eb-Docker/Container/Eb- speichern current-app/by Standard, und wie der neue Lösungs-Stack ermöglicht Ihnen die Option Protokoll an Cloudwatch zu senden, Automatisierung der Konfiguration des AWSLogs-Agenten auf den Instanzen, was ich zu tun, ist eine Erweiterung zu hinzufügen hinzufügen Die Dateien stdout und stderr protokollieren Dateien in der cloudwatch-Konfiguration und verwenden den bereits konfigurierten Agenten für streamen Sie diese Dateien in Cloudwatch-Protokolle. anstatt die Pre-Hooks zu berühren, die noch von AWS unterstützt werden, da Hooks von Lösung Stack-Version zu anderen wechseln können.

In Bezug auf den Fehler, den Sie „Protokolle“ Befehl sehen nur unterstützt wird für „json-Datei“ und „journald“ Logging-Treiber (GOT: awslogs)“dieser Fehler aus, wie Docker funktioniert, wenn es so konfiguriert ist, senden Protokolle andere Fahrer neben json-Datei oder journald es Anzeigeprotokolle lokal nicht in der Lage sein wird, da es nicht um eine lokale Kopie von ihnen hat.

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

konnte ich in der vorherigen erweitern Antwort für eine multi-Container elastische Bohnen Umwelt sowie injizieren Sie den Namen der Umgebung Erteilen der korrekten Berechtigung in der Rolle ec2, um die Protokollgruppe erstellen zu können.Sie können sehen, ob es von der Suche in arbeitet:

/var/log/awslogs.log 

dies in .ebextensions/logs.config geht

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 
Verwandte Themen