现有几个 Web APP 共用一组 Lambda ,每个 Lambda 还会在同一个 APP 的不同阶段被多次调用。
根据业务逻辑将 Lambda 调用分成几组,统计每个 Lambda 在各个业务逻辑组内的运行时间(Duration
),并绘制成图表( Graphed Metrics )。
WebAPP1
的业务逻辑分成了两组 A
和 B
,WebAPP2
的业务逻辑分成两组 C
和 D
,ABCD
分别调用了 Lambda1
和 Lambda2
,想要按 ABCD
生成 4 个仪表盘( Dashboard ),每个表盘里分别显示 Lambda1
和 Lambda2
在一段时间内的运行时间统计图。
Duration
,只能按 Lambda 函数来统计,而无法将同一个函数的 Duration
根据业务逻辑进一步细分,即无法得知每次调用的 Duration 属于哪个业务逻辑组。 -> 于是考虑使用 Custom MetricsDiemensions
,但同时也需要自行提供用来统计的 Value
。而且 Lambda 的精确运行时间只能在每次调用结束后由 AWS 自动统计得出。因此需要想办法得到 AWS 计算出来的那个 Duration
。-> 查了一下似乎没有现成的 API 可用,但 AWS 会在每次调用结束后在 CloudWatch Logs 里留下 log ,里面包含了想要得到的那个 Duration
Duration
于是到此为止的思路是,每个 Lambda 在调用结束前都通过 Log 留下统计需要的信息(业务逻辑组名和函数名),并异步地触发另一个用来统计的 Lambda 。该 Lambda 首先通过 Query 来解析 Log 文本,并通过 RequestId
将业务逻辑信息与 AWS 提供的 Duration
匹配,生成用于 Custom Metics 的统计数据,最后推到 CloudWatch Metrics 上。
那么问题来了,从 Lambda 留下 log 到可以用 Query 来搜索 CloudWatch Logs 解析 Log 文本,再到取得解析结果,每一个阶段都需要等待一段时间,具体时间尚不明确,目前粗略测试分别是 3 分钟和 5 秒。如果一次 Lambda 调用触发一回对该调用的 Log 解析和 Metrics 数据生成,就要花 3 分多的时间,似乎有些本末倒置了……毕竟处理业务逻辑也不至于用这么久,统计运行时间反倒更耗时就离谱。另外折腾半天走到这里,总感觉自己是在 XY 问题里面兜圈子。
如果 AWS 能有某种现成功能来解决是再好不过的了,但翻文档看得要吐血也没什么头绪,希望群佬指点迷津:有没有什么其他更好的解法?如果当前思路大体尚可,该如何优化上述问题,还有哪些需要注意的问题?最后,如何从更宏观的视角来掌握 AWS 里的这些东西?
感谢阅读,先行谢过!
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.