我为日志流设置了一个非常基本的度量过滤器,以计算符合特定条件的行数。我的用例与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控制台设置了指标过滤器。该过滤器可以正常工作,只不过它会累加所有实例ID的值。但是,该度量标准仅在考虑了instanceid的情况下对我有价值。
是否有一种方法可以获取每个instanceid的指标,例如将instanceid写为dimension到度量标准?
我搜索了一段时间,但找不到合适的内容。对我来说很重要,我不必对instanceid进行硬编码,因为实例可能随时终止,并且将创建新实例。再者,我想避免使用evaluating the metric on the EC2-machine。
有什么办法可以实现我的目标?我真的很感谢任何建议!
答案 0 :(得分:3)
我看不到指标过滤器如何在这里为您提供帮助。首先,它们不支持维度,您只能设置指标名称和名称空间。其次,您在日志行上没有实例ID,并且每个日志行都无法使用指标过滤器。
如果一次仅具有1个实例,则可以使用指标筛选器。然后,您可以配置autoscaling hook以在新实例启动时创建新的指标过滤器,并将实例ID放入指标名称,并具有另一个自动伸缩挂钩,以在实例终止时删除指标过滤器。如果您有1个以上的实例,则此方法会将值重复计算一次。
您还说过,您希望避免从应用程序本身发布自定义指标(这是我的首选方法)。
这给我们留下了subscription filters。
您可以将日志事件传递给lambda函数。这些事件将包含有关日志事件来源的日志组和日志流的信息。您应该将实例ID作为日志流名称的一部分。
然后,您需要编写一个lambda函数,该函数从日志流中获取实例ID,解析日志事件,然后使用EMF将此信息发送回CloudWatch日志中。但是您可以直接使用CloudWatch Agent和EMF在应用程序中执行此操作,这就是为什么我更喜欢这种方法。