9

У меня есть приложение эластичного бобового стека, развернутое с контейнером Docker. Само приложение является Java-приложением.Эластичный доклер бобового стебля с Amazon CloudWatch

Моя цель - получить журналы в Cloudwatch. В частности, я хотел бы получить файл stdouterr.log в Cloudwatch. Файл находится в пределах /var/log/eb-docker/containers/eb-current-app/*

Я следил за официальной документацией AWS here. Основываясь на примерах конфигурационных файлов, мне удалось получить nginx Webrequest для Cloudwatch.

Для докер EB stdouterr входа I адаптированного файл Кардифф лог-setup.config к следующему: группа журнала

Mappings: 
    CWLogs: 
    ApplicationLogGroup: 
     LogFile: "/var/log/eb-docker/containers/eb-current-app/*" 
     TimestampFormat: "%d/%b/%Y:%H:%M:%S %z" 

Outputs: 
    ApplicationLogGroup: 
    Description: "The name of the Cloudwatch Logs Log Group created for this environments web server access logs. You can specify this by setting the value for the environment variable: WebRequestCWLogGroup. Please note: if you update this value, then you will need to go and clear out the old cloudwatch logs group and delete it through Cloudwatch Logs." 
    Value: { "Ref" : "AWSEBCloudWatchLogs8832c8d3f1a54c238a40e36f31ef55a0WebRequestLogGroup"} 


Resources : 
    AWSEBCloudWatchLogs8832c8d3f1a54c238a40e36f31ef55a0WebRequestLogGroup: ## Must have prefix: AWSEBCloudWatchLogs8832c8d3f1a54c238a40e36f31ef55a0 
    Type: "AWS::Logs::LogGroup" 
    DependsOn: AWSEBBeanstalkMetadata 
    DeletionPolicy: Retain  ## this is required 
    Properties: 
     LogGroupName: 
     "Fn::GetOptionSetting": 
      Namespace: "aws:elasticbeanstalk:application:environment" 
      OptionName: ApplicationLogGroup 
      DefaultValue: {"Fn::Join":["-", [{ "Ref":"AWSEBEnvironmentName" }, "webrequests"]]} 
     RetentionInDays: 14 

cloudwatch создана, но не журналы не дойдут. Какие шаги мне не хватает или что не так в моем файле конфигурации?

ответ

4

Я только что столкнулся с такой же вопрос - мне удалось получить файлы журнала путем изменения конфигурации LogFile в

Mappings: 
    CWLogs: 
    WebRequestLogGroup: 
     LogFile: "/var/log/eb-docker/containers/eb-current-app/*.log" 
     TimestampFormat: "%d/%b/%Y:%H:%M:%S %z" 

Примечание это работает только, если есть один файл журнала, если вы повторно развернуть контейнер или применить изменение конфигурации, которое приводит к нескольким журналам в этом каталоге, тогда только события из файла журнала с самым последним измененным временем будут обработаны агентом awslogs

Также по умолчанию агент сравнивает первую строку файла журнала, чтобы определить, является ли он другим файлом, если первая строка такая же, она будет игнорироваться Это. Вы можете указать линии агент использует для отпечатков пальцев файла, добавив file_fingerprint_lines конфигурации

, например, использовать линии 1 - 20 для идентификации файла:

AWSEBAutoScalingGroup: 
    Metadata: 
     "AWS::CloudFormation::Init": 
     CWLogsAgentConfigSetup: 
      files: 
      ## any .conf file put into /tmp/cwlogs/conf.d will be added to the cwlogs config (see cwl-agent.config) 
      "/tmp/cwlogs/conf.d/apache-access.conf": 
       content : | 
      [ apache-access_log] 
       file = `{"Fn::FindInMap":["CWLogs", "WebRequestLogGroup", "LogFile"]}` 
       log_group_name = `{ "Ref" : "AWSEBCloudWatchLogs8832c8d3f1a54c238a40e36f31ef55a0WebRequestLogGroup" }` 
       file_fingerprint_lines = 1-20 
       log_stream_name = {instance_id} 
       datetime_format = `{"Fn::FindInMap":["CWLogs", "WebRequestLogGroup", "TimestampFormat"]}` 
       mode : "000400" 
       owner : root 
       group : root 
+0

вы случайно знаете, если есть обходной путь для этого? – Ian

+0

С тех пор я обнаружил, что это неверно, агент awslogs, который толкает события файла журнала в CloudWatch, будет использовать файл с самым последним измененным временем, я отредактирую ответ – Bacon

+0

Вы имеете в виду, что ведение журнала будет продолжаться после развертывание? – Ian

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