有关 AWS 的提问,被困住好久,有没有高手救救弟弟

查看 21|回复 0
作者:enchilada2020   
背景
现有几个 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]
  • Amazon CloudWatch 自带了 Metrics ,但通过免费的 Basic Metrics 得到的 Duration,只能按 Lambda 函数来统计,而无法将同一个函数的 Duration 根据业务逻辑进一步细分,即无法得知每次调用的 Duration 属于哪个业务逻辑组。 -> 于是考虑使用 Custom Metrics
  • Custom Metrics 可以根据业务逻辑需要定义 Diemensions,但同时也需要自行提供用来统计的 Value。而且 Lambda 的精确运行时间只能在每次调用结束后由 AWS 自动统计得出。因此需要想办法得到 AWS 计算出来的那个 Duration。-> 查了一下似乎没有现成的 API 可用,但 AWS 会在每次调用结束后在 CloudWatch Logs 里留下 log ,里面包含了想要得到的那个 Duration
  • 进而调查 CloudWatch Logs ,发现可以用 Logs Insights 的 Query 语法来解析 Log 文本,从而得到 AWS 自动生成的 Duration
    [/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 里的这些东西?
    感谢阅读,先行谢过!
  • 您需要登录后才可以回帖 登录 | 立即注册

    返回顶部