Elastic Beanstalk 将自定义日志输出到
Elastic Beanstalk output custom logs to
我有一个 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 中。
我几乎做到了。
...所以事实证明,对于 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
我有一个 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 中。
我几乎做到了。 ...所以事实证明,对于 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