现有几个 Web APP 共用一组 Lambda ,每个 Lambda 还会在同一个 APP 的不同阶段被多次调用。
目的
根据业务逻辑将 Lambda 调用分成几组,统计每个 Lambda 在各个业务逻辑组内的运行时间(Duration),并绘制成图表( Graphed Metrics )。
例
WebAPP1 的业务逻辑分成了两组 A 和 B,WebAPP2 的业务逻辑分成两组 C 和 D,ABCD 分别调用了 Lambda1 和 Lambda2,想要按 ABCD 生成 4 个仪表盘( Dashboard ),每个表盘里分别显示 Lambda1 和 Lambda2 在一段时间内的运行时间统计图。
遇到的问题和目前为止的尝试
[ol]
[/ol]
于是到此为止的思路是,每个 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 里的这些东西?
感谢阅读,先行谢过!