云账单只回答“花了多少”,回答不了“钱去哪了”。AWS Cost and Usage Report 动辄数百万行,每行都精确到资源、小时、费率,但“钱去哪了”是一条路径:从发票进入供应商、落到账户、变成资源、最后归属某个团队。平面表格画不出路径,原生工具一次只能切一个维度,于是会议里总有人要在脑子里做六张表的 join——会议就死在这里。
常见的钱都漏在哪:非生产环境从不休眠。一周 168 小时,工作周大概 50 小时,开发、预发、QA、演示环境 24/7 跑着,每周为没人用的约 120 小时付费,这是账单里最大的可控支出。无归属支出。没有 owner 标签、没有团队、没有成本中心的资源,没人拥有就没人质疑,10–30% 的账单可能归不到任何人头上。僵尸资源。未挂载的卷、空闲负载均衡器、三年前的快照、还在为早已不重要的流量计费的 NAT 网关。“以防万一”的规格。2024 年事故时翻倍的实例,CPU 常年 6%,没人回退。按需计费的常驻负载。跑了两年的基线,还按实验环境计费。行业调查多年把云浪费定在约三分之一,比例不重要,规律才重要:浪费集中在归属最弱的地方,不是谁的钱就最容易漏。
那张图就是桑基图。左边进右边出,所有流入必须流出,藏不住东西。对云账单,四列就够:Provider → Account → Resource type → Team。整张发票作为一条宽带进入,展开直到每美元落到团队上。落到 Unattributed 节点的部分,画得和其他人一样粗、一样显眼——这就是重点。最粗的那条流,是任何仪表盘都不引以为傲的那条。阅读不需要培训,这才是真正的功能:粗带子就去看,眼睛自动跑查询,CFO 十秒读懂,不用人解释可用区是什么。
好版本需要什么:列可重排。默认 Provider → Account → Type → Team,但有时问题关于区域、购买类型或单个资源。点击下钻。图本身就是过滤器,点账户节点整个图收窄到流经它的钱,带面包屑路径。浪费叠加层。标出哪些流含可回收的钱——闲置、超配、可调度——以及多少。Unattributed 作为一等公民流,带一个让人无法忽略的开关。实时数据。“截至周二”的图会被反复质疑,实时的才会被执行。可复现的 URL。会议前一小时把链接贴进 Slack,两边看的是同一张图。
自己搭完全可行,周末项目够出 v1:导出账单数据(AWS 用 CUR,GCP 用 billing export),按三四个维度 GROUP BY,把 source–target 对喂给 d3-sankey、Plotly 或 ECharts。画图是最容易的 20%,剩下 80% 是三件事:Type → Team 这一步取决于标签质量,桑基图会忠实把你的分配缺口画成一条巨大的 Unattributed 带子——这是特性,但要有心理准备;保持实时,定时导出、聚合任务、缓存新鲜度,静态 HTML 的 v1 一周就过期,和之前的透视表一样死掉;交互性,下钻、面包屑、URL 里的视图状态,这一步周末会变成一季度。
我们在 ZopNight 的成本报告里内置了这张图。Cost Breakdown 卡片有 Trend / Flow 切换,Flow 就是桑基图。四列布局可选,默认 Provider → Account → Type → Team,可换成 Service、Region、Purchase type 或下钻到单个资源。图是唯一的过滤面,点节点或流就收窄,面包屑显示下钻路径。节省叠加层把节点和流按可回收金额比例标红,红色粗的地方就是待办清单。悬停任意元素,检查器显示金额及其在源和目标中的占比。维度能被推荐引擎过滤时,显示“$X 可回收”并深链到对应建议;不能行动时隐藏提示,不拿没按钮的数字吊胃口。Unattributed 高亮开关留给那场对话。整个视图状态在 URL 里——布局、下钻路径、叠加层,贴进 Slack,财务打开就是你的视图。每次渲染都从原始成本记录实时取数,没有“更新于昨天”的脚注。
“一张图”的诉求从来不是图表本身,是财务和工程终于能对着同一个对象争论——一个同时看得见“多少”“在哪”“能怎么办”的产物。它一旦变成链接,“钱去哪了”就不再是两周的调研项目,只是你打开的一个东西。
#开发者 #工具 #FinOps #AWS #云成本 #桑基图 #DevOps
@DevToolboxHub