1
votes

I am using multi container Beanstalk and trying to forward container logs to CloudWatch.

The option in Dockerrun.aws.json does not work for me as I need to forward the logs for each env to its own log group while having universal zip file to be deployed to each env. Unfortunately, there is no way to have log group specified as a variable in Dockerrun.aws.json.

So, what I am using is .ebextensions/00-container-logs.config:

files:
  "/etc/awslogs/config/container_logs.conf" :
    mode: "000644"
    owner: root
    group: root
    content: |
      [app-container-logs]
      file=/var/log/containers/*-stdouterr.log
      log_group_name=`{"Fn::Join":["-", [{ "Ref":"AWSEBEnvironmentName" }, "AppAndCrons"]]}`
      log_stream_name=ApplicationContainerLogs

commands:
  "01":
    command: service awslogs restart

The issue: once docker starts logging to a new file, it stops sending the logs to CloudWatch until the command "service awslogs restart" is executed manually. Any ideas, please?

1

1 Answers

0
votes

Adding file_fingerprint_lines helped a lot, as I have my first line of each log file empty (while the first line is hashed by CloudWatch).

content: |
  [app-container-logs]
  file=/var/log/containers/*-stdouterr.log
  log_group_name=`{"Fn::Join":["-", [{ "Ref":"AWSEBEnvironmentName" }, "AppAndCrons"]]}`
  log_stream_name=ApplicationContainerLogs
  file_fingerprint_lines=1-8