将 instanceid 维度添加到 cloudwatch 指标过滤器

Add instanceid dimension to cloudwatch metric-filter

我为日志流设置了一个非常基本的指标过滤器来计算符合特定条件的行数。我的用例与 the tutorial for counting apache HTTP status codes.

中描述的用例非常相似

例如日志事件看起来像

127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 404 2326

过滤器与

非常相似
[IP, UserInfo, User, Timestamp, RequestInfo, StatusCode=404, Bytes]

我通过 Cloudwatch 控制台设置了指标过滤器。过滤器工作完美,只是它累积了所有 instanceids 的值。但是,该指标只有在考虑了 instanceid 的情况下才对我有价值。

有没有办法获取每个实例 ID 的指标,例如将实例 ID 作为 dimension 写入指标?

我搜索了一段时间,没有找到合适的。这对我来说非常重要,我不必对 instanceid 进行硬编码,因为实例可能会在任何时候终止并且将创建新实例。进一步我想避免 evaluating the metric on the EC2-machine.

有什么方法可以实现我的目标吗?如果有任何建议,我将不胜感激!

我看不出指标筛选器对您有何帮助。首先,它们不支持维度,你只能设置一个指标名称和命名空间。其次,您在日志行上没有实例 ID,并且指标筛选器按日志行工作。

如果您一次只有 1 个实例,则可以使用指标过滤器。然后,您可以配置 autoscaling hook 以在新实例启动时创建新的指标筛选器,并将实例 ID 放入指标名称中,并使用另一个自动缩放挂钩在实例终止时删除指标筛选器。如果您有超过 1 个实例,这种方法会重复计算值。

您还说您想避免从应用程序本身发布自定义指标(这是我的首选方法)。

这给我们留下了 subscription filters

您可以将日志事件传递给 lambda 函数。这些事件将包含有关日志事件起源的日志组和日志流的信息。您应该将实例 ID 作为日志流名称的一部分。

然后您需要编写一个 lambda 函数,从日志流中获取实例 ID,解析日志事件并使用 EMF 将此信息发送回 CloudWatch 日志。但是您可以使用 CloudWatch 代理和 EMF 直接从应用程序执行此操作,这就是我更喜欢这种方法的原因。