【发布时间】: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 可以识别的内容,而无需我推出自己的解决方案?这些问题的答案似乎是否定的。