【问题标题】:Adding fields to Cloudwatch without using JSON不使用 JSON 将字段添加到 Cloudwatch
【发布时间】:2019-03-19 18:22:06
【问题描述】:

所以我有来自 Nginx 和 tomcat 服务器的典型运行日志,它们只是具有典型日志格式的单行文本文件。我已将 tomcat 访问日志更改为输出管道分隔字段,因此我可以使用一些 unix 脚本轻松处理它们。我想摆脱我的 unix 脚本,转而使用 cloudwatch 以类似的方式处理我的日志,但是我发现 cloudwatch 在默认情况下真的不理解时间戳、消息和日志流之外的任何内容。

它将使用 JSON 添加字段,但在涉及日志文件时 JSON 是冗长的。我想让它处理一个 CSV 文件,这似乎是 JSON 的明显替代品。我愿意更改我的日志格式以满足这样的要求,但我找不到任何关于如何做到这一点的信息。

为了向 cloudwatch 添加字段,我是否只能选择将日志转换为 JSON?我知道 parse 命令,但是每次我想构建查询时,我发现重构我的字段很麻烦。特别是因为这些将主要是访问日志,其中将包含许多字段。我在我的系统上设置了 aws cloudwatch 日志代理,我目前正在将这些日志发送到 cloudwatch。

【问题讨论】:

  • CloudWatch 没有架构的概念,因此我怀疑是否支持 CSV 之类的东西。另见Supported Logs and Discovered Fields
  • 任意 JSON 的格式定义了模式,因为所有 JSON 对象都将具有相同的布局,因此共享布局就是模式。否则,您无法合理地查询不同模式的所有对象。如果您可以接收任意 JSON,那么 CSV 只是同一事物的一种更简单的格式。标题是定义列的元数据,每一行是一个对象,其中键是标题,列是值。考虑到大多数日志文件在原生格式中比 JSON 更接近 CSV,这有多难。
  • CloudWatch 不会占用整个日志文件。它需要包含少量行的块。它也不要求所有 JSON 对象都具有相同的布局。我不知道他们的一系列限制会有多难,但这正是他们选择做的事情。
  • 我想我的意思是将类似 CSV 的结构转换为 JSON 对象将是微不足道的。如果只知道列布局,awslogs-agent 可以支持将典型日志转换为 JSON。所以我问这个问题的重点是这是否存在于我不知道的 awslogs-agent 中?或者是否有其他一些基础设施可以将我的工厂日志转换为 Cloudwatch 可以识别的内容,而无需我推出自己的解决方案?这些问题的答案似乎是否定的。

标签: amazon-cloudwatch


【解决方案1】:

处理以空格分隔的日志文件最接近的方法是使用度量过滤器。或者至少 CloudWatch 的作者是这样设计的。

https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html

最好的例子在这里:

不确定这是否适用于我尝试对日志执行的操作,但这是一个开始。这是最接近正确答案的事情。如果你想把它做好,你必须自己做。

【讨论】:

    猜你喜欢
    • 2019-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-02
    • 2020-08-15
    • 2019-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多