首页 > 解决方案 > Elastic Beanstalk 将自定义日志输出到

问题描述

我有一个 Elastic Beanstalk 应用程序在 Windows 环境中通过 IIS 运行 .Net 应用程序。我想让我的自定义日志显示在 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 中。

标签: amazon-web-servicesamazon-elastic-beanstalkamazon-cloudwatchamazon-cloudwatchlogs

解决方案


我几乎做到了。...所以事实证明,对于 AWS CloudWatch,您需要附加 JSON 格式的配置。

以下是.ebextensions/custom_logs.configElastic 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

推荐阅读