2

Amazon предлагает эти готовые файлы для отправки журналов Tomcat/Apache/nginx в журналы Cloudwatch, которые отлично работают.Как отправить журналы node.js в журналы Cloudwatch из приложения Docker из эластичного бобового стежка?

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/AWSHowTo.cloudwatchlogs.html

Однако для моих целей они только отправить Nginx журналы, которые на самом деле не достаточно, и, к сожалению, они также обеспечивают нулевую документацию о формате файла. То, что я пытаюсь достичь, - это отправить log.sys из моего приложения Docker в Cloudwatch (поскольку автосканирование делает экземпляры приходящими и исчезают).

Так что файлы, такие как /var/log/eb-docker/containers/eb-current-app/add839a3b599-stdouterr.log, появятся в Cloudwatch.

Итак, что я пытался до сих пор адаптируют webrequests CONFIG из приведенной выше ссылке:

############################################################################## 
## Sends docker logs to CloudWatch Logs 
############################################################################## 
Mappings: 
    CWLogs: 
    ApplicationLogGroup: 
     LogFile: "/var/log/eb-docker/containers/eb-current-app/*-stdouterr.log" 
     TimestampFormat: "%Y-%m-%d %H:%M:%S" 

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" : "AWSEBCloudWatchLogs8832c8d3f1a54c238a40e36f31ef55a0ApplicationLogGroup"} 

Resources : 
    AWSEBCloudWatchLogs8832c8d3f1a54c238a40e36f31ef55a0ApplicationLogGroup: ## 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" }, "stdouterr"]]} 
     RetentionInDays: 14 

    ## Register the files/log groups for monitoring 
    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/stdouterr.conf": 
       content : | 
       [stdouterr] 
       file = `{"Fn::FindInMap":["CWLogs", "ApplicationLogGroup", "LogFile"]}` 
       log_group_name = `{ "Ref" : "AWSEBCloudWatchLogs8832c8d3f1a54c238a40e36f31ef55a0ApplicationLogGroup" }` 
       log_stream_name = {instance_id} 
       datetime_format = `{"Fn::FindInMap":["CWLogs", "ApplicationLogGroup", "TimestampFormat"]}` 
       mode : "000400" 
       owner : root 
       group : root 

К сожалению, это не похоже на работу. :/

Кроме того, есть ли какие-либо идеи, если журналы появляются вообще, если fe. формат временной метки неверен? Особенно важно, поскольку по умолчанию исключения не имеют временных меток, поэтому фактические ошибки просто исчезнут.

Мои строки журнала приложений в настоящее время выглядит следующим образом: 2016-07-05 09:11:31 ::1 - GET/200 (5.107 ms)

+0

Это отличный вопрос, и это действительно абсурдно, что амазонка не делает этот мозг простым, или почему они решили по умолчанию использовать nginx или прокси-журналы по умолчанию в своем примере. Спасибо, что подтвердили, что я не сумасшедший из-за желания и ожидания того же ;-) – wkhatch

ответ

0

Вы можете использовать эту ссылку для установки cloudwatch агентов по экземплярам Beanstalk (если вы еще не сделали) - http://serebrov.github.io/html/2015-05-20-cloudwatch-setup.html.

Далее - попробуйте отправить файлы в/var/lib/docker/container// .json, чтобы собрать ваши журналы докеров. Здесь записываются файлы stdout и stderr.

+0

Что вы имеете в виду? Получение журналов из '/ var/lib/docker/container/[container-id]/[container-id] -json.log' потребует от меня знать идентификатор контейнера, не так ли? – crappish

+0

'LogFile:"/var/lib/docker/container/**/*. Log "' похоже, но все записи журнала в Cloudwatch представлены как объекты json ('{" log ":" 2016-07- 05 12:17:12 10.0.1.180 - GET/200 (0.334 ms) \ n "," stream ":" stdout "," time ":" 2016-07-05T12: 17: 12.134355109Z "}'), который делает журналы очень трудными для чтения. :/Есть ли способ иметь их как «обычные» записи журнала? – crappish

+0

Это сложный вопрос. Лучший способ решить эту проблему - изменить драйвер ведения журнала контейнеров (у докеров даже есть драйвер журнала cloudwatch). Я попытался сделать это с beanstalk и еще не успел. Я предполагаю, что есть способ, но я еще не нашел его. –

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