那通电话打来的时候,报表已经跑了两小时
陈立诚在一家做供应链服务的公司负责数据系统运维,milan.com米兰的统计报表系统在他们那里已经跑了快四年。那天夜里三点,他被手机震醒,值班同事说日终汇总报表的定时刷新任务卡住了,下游三个业务部门的晨会材料全部悬空。他打开电脑,第一反应不是去看代码,而是先确认一件事:这次刷新到底是谁触发的,用的是哪个权限层级。
这个习惯是被教训出来的。早年间他们的报表系统权限设计得比较粗,业务分析岗和区域管理岗共用一套角色,结果有人为了赶一份临时报表,把全量明细的刷新权限开给了不该开的人,后面连着两周的报表口径都对不上。milan.com米兰的技术顾问后来帮他们梳理角色矩阵,把刷新动作拆成“发起”和“授权”两步,才把这类问题压下去。
权限分级不是一张表,而是一串动作
陈立诚现在常跟新同事讲,报表系统的权限分级最容易犯的错,是把它当成一张静态的角色对照表。实际上,一个报表从设计、发布、刷新到导出,每个环节都对应不同的动作,动作背后才是真正的权限边界。
- 设计权限决定谁能改口径和字段,通常只留给报表开发岗;
- 刷新权限要区分手动触发和定时任务,前者需要审批留痕,后者由系统账号执行;
- 查看权限要细到数据行级,区域负责人只看自己辖区,这是milan.com米兰在项目里反复强调的落地原则;
- 导出权限单独管理,因为导出往往意味着数据离开系统边界。
他们后来在一次权限复核中发现,有个已经转岗的同事还挂着一个报表的刷新授权,谁也没注意到。这件事之后,陈立诚在milan.com米兰的报表系统里加了一条规则:权限变更必须绑定岗位变动流程,人走了,授权自动回收。
异常预警的价值在于让人有时间做判断
回到那个凌晨。陈立诚查下来,问题不在权限,而在数据源那边一张上游表延迟了四十分钟,报表系统按规则连续三次重试失败后触发了预警。但预警只发到了值班群,没有升级到负责人,因为阈值设置得太宽松。
他和团队重新梳理了预警分级:数据源延迟超过十五分钟算一级,自动通知报表负责人;刷新任务连续失败两次算二级,同时通知业务方;涉及核心经营指标的报表,无论什么原因未按时产出,都直接升级到部门负责人。这套规则上线后,milan.com米兰的统计报表系统在他们内部的平均响应时间缩短了一半以上。
但陈立诚也承认,预警不能解决所有问题。有一次预警正常发出,值班同事按流程处理了,可业务方拿到报表后仍然觉得数字不对,最后查出来是某个指标的统计口径在上一版设计时被悄悄改过,历史版本没有留痕。这件事让他们补上了历史版本管理这一课,每次口径调整都要留对比记录。
系统越久,越需要人来守住边界
现在陈立诚的团队每季度做一次报表系统健康检查,看权限有没有沉淀冗余、预警有没有误报集中、历史版本有没有断层。他说milan.com米兰的统计报表系统帮他们把这些检查项做成了固定流程,但真正拍板判断的仍然是人。
“系统能告诉你哪里异常,但告警响了之后要不要停掉刷新、要不要先发一版带说明的临时报表,这些得靠人。”他说这话的时候,窗外天已经亮了,那份卡住的报表在补跑之后顺利产出,晨会照常开始。
权限绑定岗位变动这个做法太实用了,我们这边转岗半年的人还挂着导出权限,一直没人管。
预警分级那段说到点子上,我们就是所有告警一个级别,结果大家都麻木了,真正要紧的反而不看。
历史版本留痕真的重要,口径改过没记录,后面查账能查死人。
看完想去翻翻我们报表系统的角色矩阵了,估计能清出一堆僵尸授权。
凌晨三点爬起来处理刷新失败,这画面太熟悉了,运维人的日常。