【问题标题】:Create a logStream for each log file in cloudwatchLogs为 cloudwatchLogs 中的每个日志文件创建一个 logStream
【发布时间】:2017-03-21 10:40:58
【问题描述】:

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

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

[/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?

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

【问题讨论】:

  • 我知道您很久以前就问过这个问题,但您最终找到解决方案了吗?在尝试将 AWS 日志记录代理配置为更加自动化时,我遇到了同样的限制,从而避免了单独配置每个日志流的需要;我们只是有太多的日志文件,这不可行,因此非常感谢任何输入。谢谢!

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


【解决方案1】:

我知道现在已经快两年了,但我想做完全相同的事情,但找不到让它发挥作用的方法。 我求助于 AWS Support,然后确认这无法完成。我们仅限于文档中提供的选项,就像您发布的那样。但是,您可以让 日志组 包含直到第一个点的日志文件路径:

log_group_name – 可选。指定用作日志组名称的内容 在 CloudWatch 日志中。允许的字符包括 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-23
    • 1970-01-01
    • 2015-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-10
    相关资源
    最近更新 更多