Журнал потокового файла в cloudwatch - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть EC2-экземпляр, запускающий Docker, использующий docker-compose. Я хотел бы, чтобы все журналы, записанные в файл одним из приложений, отправляли эти данные асинхронно в CloudWatch. Было бы идеально иметь отдельный контейнер, который совместно использует каталог журналов с контейнером приложения и выполняет что-то вроде tail -f и отправляет вывод в CloudWatch.

Я не эксперт, но я думаю, что Filebeat делает нечто подобное, но не знаю, могу ли я настроить его для отправки в CloudWatch.

1 Ответ

0 голосов
/ 23 сентября 2018

Итак, я использовал этот образ докера

Это мой сервис в моем docker-compose.yml

  cloudwatch:
    image: iconara/awslogs:latest
    command: "--region eu-central-1 --config-file /etc/awslogs/app.conf"
    volumes:
      - ./environment/cloudwatch/conf/awscli.conf:/etc/awslogs/app.conf
      - ./environment/cloudwatch/state:/var/lib/awslogs/
      - ./logs:/app-logs/general/
      - ./project/storage/logs:/app-logs/laravel/
      - ~/.aws:/root/.aws

Я монтирую учетные данные, чтобы использовать их для разработки на Mac OSX, которая, возможно, не требуется для экземпляра EC2, в зависимости от ваших настроек. Я также смонтировал файл состояния, чтобы при перезапуске контейнера одни и те же журналы не могли быть загружены дважды.

Это мой ./environment/cloudwatch/conf/awscli.conf

[general]
state_file = /var/lib/awslogs/agent-state
use_gzip_http_content_encoding = true

[/app-logs/logs/laravel.log]
datetime_format = %Y-%m-%d %H:%M:%S
file = /app-logs/laravel/laravel.log
buffer_duration = 5000
#log_stream_name = {instance_id}
log_stream_name = development
initial_position = start_of_file
log_group_name = /app-logs/laravel/laravel.log
multi_line_start_pattern = {datetime_format}
...