Потоковое ведение журнала и предварительные версии с помощью .ebextensions

#amazon-web-services #amazon-elastic-beanstalk

#amazon-веб-сервисы #amazon-elastic-beanstalk

Вопрос:

Я пытаюсь передать в потоковом режиме файл журнала, который записывает мое приложение. Я использовал https://github.com/awsdocs/elastic-beanstalk-samples/blob/master/configuration-files/aws-provided/instance-configuration/logs-streamtocloudwatch-linux.config в качестве отправной точки. К сожалению, кажется, что /etc/awslogs это больше не правильный путь для добавления дополнительной конфигурации CloudWatch.

Я обнаружил, что могу поместить файл в /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/my.json , чтобы заставить его работать. Но я не могу создать этот файл и заставить CloudWatch проанализировать его с помощью .ebextensions . Я пытался сделать это, используя файл со следующим содержимым. Файл не существует после развертывания. Если бы я использовал имя файла, предложенное awsdoc, файл был бы создан.

.ebextensions/02-logs-streamtocloudwatch.config :

 files:
  "/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/my.json" :
    mode: "000644"
    owner: root
    group: root
    content: |
        {
            "logs": {
                "logs_collected": {
                    "files": {
                        "collect_list": [
                            {
                                "file_path": "/var/log/eb-docker/containers/eb-current-app/my.log",
                                "log_group_name": "/aws/elasticbeanstalk/my-env/var/log/eb-docker/containers/eb-current-app/my.log",
                                "log_stream_name": "{instance_id}"
                            }
                        ]
                    }
                }
            }
        }

  

Кроме того, на данный момент у моего файла журнала должны быть 666 разрешения (я знаю, что это не идея). Создание файла в, /opt/elasticbeanstalk/hooks/appdeploy/post/99_permissions.sh содержащего следующее содержимое, с помощью .ebextensions , похоже, тоже не работает.

.ebextensions/04-permissions.config :

 files:
  "/opt/elasticbeanstalk/hooks/appdeploy/post/99_dbg_permissions.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/usr/bin/env bash
      chmod 666 /var/log/eb-docker/containers/eb-current-app/dbg.log
  

Чего мне не хватает в том, как использовать .ebextensions и / или конфигурацию CloudWatch в Beanstalk?

Я хотел бы не только исправить это, но и понять проблему (где я могу создавать / изменять файлы, когда / как). Я ценю любую помощь…

Комментарии:

1. «. Но я не могу создать этот файл и заставить CloudWatch проанализировать его с помощью .ebextensions». почему? Как вы пытались это сделать? Какие ошибки вы получаете?

2. @Marcin: Я добавил файлы, которые использовал в своем посте. Большая часть моей проблемы заключается в том, что я не понимаю, почему мне кажется, что я могу создавать файлы и изменять разрешения в некоторых местах, но не везде. Я предполагаю, что я столкнулся с какой-то проблемой синхронизации (используя неправильный хук), может быть ..?

Ответ №1:

Благодаря ответу @Marcin я смог добавить свой файл журнала в конфигурацию потоковой передачи журналов:

.platform/hooks/postdeploy/02-logs-streamtocloudwatch.sh

 #!/bin/bash

echo '{
    "logs": {
        "logs_collected": {
            "files": {
                "collect_list": [
                    {
                        "file_path": "/var/log/eb-docker/containers/eb-current-app/my.log",
                        "log_group_name": "/aws/elasticbeanstalk/my-env/var/log/eb-docker/containers/eb-current-app/my.log",
                        "log_stream_name": "{instance_id}"
                    }
                ]
            }
        }
    }
}' > "/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/my.json"
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a append-config
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a stop
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a start
  

Ответ №2:

Как вы правильно отметили, папка /opt/elasticbeanstalk/hooks/ не существует. Причина в том, что вы, вероятно, используете EB-среду на основе Amazon Linux 2 (AL2) вместо AL1. Папка была доступна только в старой EBs на основе AL1.

В AL2 появился новый механизм перехватов, описанный в разделе перехваты на платформе развертывания приложений.

Поэтому вам необходимо адаптировать свой код для использования новых перехватов или вернуться к среде EB на основе AL1.