Elastic Beanstalk выводит пользовательские журналы в - PullRequest
0 голосов
/ 04 октября 2019

У меня есть приложение Elastic Beanstalk, которое запускает приложение .Net через IIS в среде Windows. Я хочу, чтобы мои пользовательские журналы отображались в AWS CloudWatch.

Приложение использует регистратор Serilog в одном из своих статических классов.
Регистратор выводит сообщение, когда я иду по пути к конечной точке (например, /api/log-a-message").
Журналы записываются в файл "C: \ LogsFolder \ LogFile.log".

После некоторых онлайн-поиска и чтения других вопросов и документов AWS. В итоге я написал .ebextensions/log_configuration.conf со следующим содержимым:

### BEGIN .ebextensions/CloudWatch.config
files:
  "C:/Program Files/Amazon/ElasticBeanstalk/config/taillogs.d/":
    content: |
      [ZeW logs]
      log_group_name = `{"Fn::Join":["/", ["/aws/elasticbeanstalk", { "Ref":"AWSEBEnvironmentName" }, "Serilog"]]}`
      log_stream_name = {instance_id}
      file = C:/LogsFolder/LogFile.log
### END .ebextensions/CloudWatch.config

Но журналы все еще не появляются в CloudWatch.

1 Ответ

0 голосов
/ 14 октября 2019

Мне удалось почти сделать это. ... Получается, что для AWS CloudWatch вам необходимо добавить конфигурацию в формате JSON.

Ниже приведен мой файл .ebextensions/custom_logs.config, который Elastic Beanstalk использует для расширений. Это просто создает файл custom_logs.json для использования CloudWatch.

files:
  "C:/Users/Administrator/Desktop/custom_logs.json":
    content: |
      {
        "agent": {
          "metrics_collection_interval": 5
        },
        "logs": {
          "logs_collected": {
            "files": {
              "collect_list": [{
                "file_path": "C:\\MyCustomLogsFolder\\MyCustomLogFile.log",
                "log_group_name": "/aws/elasticbeanstalk/UsuallyThisIsTheEnvironmentName/MyCustomLogGroup-Log",
                "timezone": "UTC",
                "timestamp_format": "%Y-%m-%d %H:%M:%S",
                "multi_line_start_pattern": "{timestamp_format}"
              }]
            }
          }
        }
      }

После создания этого файла на моем рабочем столе Elastic Beanstalk я могу подключиться к экземпляру и выполнить следующую команду (включая & в начале):

& C:\\'Program Files'\\Amazon\\AmazonCloudWatchAgent\\amazon-cloudwatch-agent-ctl.ps1 -a append-config -m ec2 -c file:C:\\Users\\Administrator\\Desktop\\cu
stom_logs.json -s

Единственное, что мне нужно выяснить сейчас, это как сделать это автоматически после запуска экземпляра.


Удалось сделать это с помощьюследующий код (в дополнение к приведенному выше выражению files:):

services:
  windows:
    AmazonCloudWatchAgent:
      enabled: 'true'
      ensureRunning: 'true'
      files:
        - "C:/MyCustomLogsFolder/MyCustomLogFile.log"
container_commands:
  01_cloudwatch_append:
    command: powershell.exe -ExecutionPolicy Bypass -Command "$cwa_ctl='C:\\Program Files\\Amazon\\AmazonCloudWatchAgent\\amazon-cloudwatch-agent-ctl.ps1'; $custom_logs_config='C:\\Users\\Administrator\\Desktop\\custom_logs.json'; & $cwa_ctl -a append-config -m ec2 -c file:$custom_logs_config -s;"
    ignoreErrors: true
    waitAfterCompletion: 10
...