在cloudwatchLogs

时间:2017-03-21 10:40:59

标签: amazon-web-services amazon-ec2 configuration stream amazon-cloudwatchlogs

我使用AWS CloudWatch日志代理将我的应用程序日志推送到AWS Cloudwatch。

cloudwatchLogs内的EC2 instance配置文件中,我有这个条目:

[/scripts/application]
datetime_format = %Y-%m-%d %H:%M:%S
file = /workingdir/customer/logfiles/*.log
buffer_duration = 5000
log_stream_name = {instance_id}
initial_position = start_of_file
log_group_name = /scripts/application

根据此配置,workingdir目录中的所有日志文件都被发送到同一个流中的cloudwatchLogs,名称是实例Id。

我的问题是,我想要为每个日志文件创建一个单独的logStream,以便日志读取更加快速和可解析。换句话说,每次我有一个新的日志文件时,都会自动创建一个新的日志流。

我想通过cron作业中的shell脚本来做这件事但是我必须更改架构中的许多其他配置,所以我正在寻找一种在配置文件中执行此操作的方法。在文档中,他们说:

  

log_stream_name

     

指定目标日志流。您可以使用文字字符串或   预定义变量({instance_id},{hostname},{ip_address})或   两者的组合来定义日志流名称。日志流是   如果它尚不存在则自动创建。

日志文件的名称不能100%可预测,但它们总是具有以下结构:

CustomerName-YYYY-mm-dd.log

另外,另一个问题是:

  

必须停止并重新启动正在运行的代理才能进行配置   更改生效。

在这种情况下如何设置logStream?

非常感谢任何想法或建议或解决方法。

1 个答案:

答案 0 :(得分:0)

我知道已经快两年了,但是我想做完全一样的事情,却找不到找到使之生效的方法。 我求助于AWS支持,然后确认无法完成。就像您发布的一样,我们仅限于文档中提供的选项。但是,您可以让日志组包含直到第一个点的日志文件路径:

  

log_group_name –可选。指定用作日志组名称的内容   在CloudWatch Logs中。允许的字符包括a-z,A-Z,0-9,'_'   (下划线),“-”(连字符),“ /”(正斜杠)和“。”。 (句点)。

     

我们建议您指定此字段以防止混淆。 如果   省略此字段,直到最后一个点的文件路径都将用作日志   组的名字。例如,如果文件路径是   /tmp/TestLogFile.log.2017-07-11-14,日志组名称为   /tmp/TestLogFile.log。

https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-Configuration-File-Details.html