看到 Madeira 这个标题先别急着往酒杯里倒葡萄酒也别顺手订去马德拉岛度假的机票——在监控圈子里Madeira 是 Grafana 移动端项目的内部代号。这些年做运维告警值班我把它当成随身携带的值班台来用半夜手机弹出告警推送直接手机上看曲线、查日志、点静默能不动电脑就不动电脑。这篇文章我把自己从安装、接入到日常使用的完整经验写下来都是实际跑过的流程和踩过的坑想给值班运维、SRE、业务研发和数据团队的同学做个参考。1. 项目定位Madeira 到底是个什么项目1.1 从 Grafana 到移动端官方为什么要单独立一个项目Grafana 这个开源数据可视化平台大多数同学都不陌生公司里的监控大屏、指标看板、日志聚合面板背后十有八九是它。但以前它的主力形态是 Web 仪表盘大屏幕和桌面浏览器确实体验好可真到了值班场景就露怯了半夜躺在家里告警响了总不能摸黑爬起来开电脑周末在商场陪家人客户群里甩过来一句“线上指标是不是有问题”你总得有个能快速看一眼的东西。Grafana Labs 做移动端的时候不是简单把网页塞进手机壳子里而是单独拉了一个项目来做代号就叫 Madeira。这里面的逻辑很实际监控场景对实时性、资源占用、弱网容错都有要求如果做一个套壳 WebView虽然省事但推送、离线缓存、后台保活、手势交互这些体验全都会打折。官方想要的是“随身值班台”级别的体验——打开 App 能看到关键面板关掉 App 它也能在后台把告警推给你。这件事对于团队的价值往小了说是方便往大了说是直接缩短 MTTR平均故障修复时间。告警响应链路的第一环永远是“感知”感知越快后续动作才越从容。过去很多故障从发生到有人响应要隔十几分钟不是因为没监控而是因为监控系统被绑在办公室的显示器上。Madeira 解决的正是这最后一公里的触达问题。1.2 谁适合用 Madeira使用人群与典型场景我实际用下来觉得这几类人是最典型的使用者值班运维 / SRE夜间告警响应是刚需手机端做第一道确认决定要不要爬起来处理。业务研发线上出问题时在地铁上、通勤路上先看一眼指标判断是网络抖动还是代码变更导致。数据分析师日常例行查看业务大盘数据移动端足够完成 80% 的“瞄一眼”需求。技术管理者 / 项目经理不写 SQL 也不敲命令只需要看几个核心业务指标的趋势App 里收藏面板就够用。我自己用得最频繁的三个场景是值班夜里处理告警、出差路上陪客户看演示、以及双休日在家收到告警后先判断严重级别。这几个场景共同特点是“人不在电脑前但又必须保持对系统的感知能力”。说白了Madeira 就是在你不方便坐在工位前时让监控数据仍然触手可及。2. 核心功能拆解与产品设计思路2.1 仪表盘浏览不是“小一号的网页”很多人以为移动端就是网页等比缩小真不是。手机屏幕就这么大信息密度和交互逻辑必须重新组织。Madeira 的仪表盘浏览做了几件很实在的事支持收藏常用面板、记录最近访问、按组织/实例切换。我平时把核心看板钉在收藏夹里打开 App 第一屏就是最有用的内容不需要一层层点目录。时间范围选择在移动端也做了优化。网页上常见的绝对时间选择器、快捷范围按钮在手机上被改成了轮盘式的时间区间选择拇指就能操作。面板图表的渲染也尽量做了懒加载只有滚动到附近才真正拉数据避免一次性加载整个 Dashboard 导致流量和电量飙升。这里要特别夸一下离线缓存。我在地库、高铁隧道这种信号差的地方打开 App之前看过的仪表盘仍然能显示数据虽然是旧的但至少界面不白屏。这个设计对运维场景非常实用——紧急时刻你敢掏出手机看数据就是因为哪怕弱网它不会转圈转到死。2.2 告警推送与静默告警是移动端监控工具的灵魂功能Madeira 把这块做得很完整。服务端规则触发告警后App 会收到系统级推送点进去直接看到告警详情包括触发指标、当前数值、持续时间、关联标签。最实用的是可以在手机端直接操作静默Silence——比如深夜一批非关键任务报错刷屏直接选一个时间窗口把这条规则静默掉不用登录电脑去 Alertmanager 里敲配置。为什么移动端要支持告警静默因为很多误报其实有非常明显的特征短期流量抖动、发布期间的瞬时错误率升高、依赖服务短暂不可用。以前遇到这种情况你要么忍着噪音要么想办法上电脑操作体验极其割裂。现在手机上一键静默值班效率提高一个量级。推送配置也支持多实例多租户。同一个 App 可以绑定开发、测试、生产多个 Grafana 环境每个环境独立推送。我个人的习惯是把生产环境调成强提醒测试环境只做角标提示避免被无效通知轰炸。2.3 Explore 与数据探索Explore 模式也被带到了移动端可以在手机上执行 PromQL / LogQL 查询看到时序图表和日志结果。可能有人觉得手机上敲 PromQL 是给自己找罪受但我的看法是它真正的价值场景不是复杂查询而是快速验证。比如告警说“某接口错误率超过 5%”你顺手打开 Explore输入sum(rate(http_requests_total{status5xx}[5m])) by (path)马上就能确认是某一两个路径在报错还是全面告警。为了弥补手机键盘输入的不便Explore 针对移动端加了不少辅助设计包括查询历史记录、常用查询模板、自动补全建议。实际用下来如果日常查询语句都是自己常写的固定句式把语法备忘放在手边移动端完全能胜任轻量排障。2.4 多实例与统一登录企业里的 Grafana 部署五花八门有托管的有自建的有内网 IP 访问的。Madeira 很聪明地支持多实例配置你可以给每个实例起个业务名称比如“生产核心”“测试环境”“客户端演示”切换时下拉选择即可。认证方面支持 Grafana Cloud 账号、本地用户名密码、OAuth/SSO。我最推荐的是 Token 方式在 Grafana Web 端创建一个服务账号Service Account把只读 Token 填到 App 里不泄露真实账号密码也方便随时吊销。安全性和便利性都能兼顾。3. 从下载到接入完整实操记录3.1 安装与初始配置安装本身没太多悬念iOS 在 App Store 搜 GrafanaAndroid 在 Google Play 搜 Grafana都是官方应用。安装完打开会进入实例配置界面。以我手头这套环境为例我配了两个实例一个指向公司的 Grafana Cloud 实例一个指向内网自建实例。首屏会让填三样东西实例名称自己起、Grafana 地址URL、认证信息。地址栏要注意写法如果是自建实例通常是https://grafana.company.com/这种完整地址别漏了协议头也别多加路径。填完选择认证方式我用的是 Token 方式在 Web 端Administration → Service accounts → Add service account创建角色选 Viewer 够了如果是想从手机端操作告警静默可以给 Editor 角色。这一步踩过最大的坑是内网证书问题。公司内网 Grafana 用的是自签名证书手机上直接填地址会报“无法验证服务器身份”。解决办法是提前把 CA 证书用邮件或企业分发通道发到手机安装到“已信任根证书”列表里。iOS 装完之后还要在“设置 → 通用 → 关于本机 → 证书信任设置”里手动把信任开关打开Android 不同品牌的信任路径不太一样但基本都在“安全 → 加密与凭据”相关位置。3.2 告警推送配置告警推送是重头戏配置链路比想象中长但原理搞清楚了也不复杂。设备端需要做两件事允许通知权限以及在 App 内确认推送服务已启用。服务端需要配置推送网关Grafana Cloud 实例默认开启自建实例需要额外部署推送通道组件。移动端推送的技术链路大概是这样App 启动后向手机厂商推送服务iOS 的 APNs 或 Android 的 FCM注册设备令牌服务端持令牌下发消息。所以如果 App 装好后一直收不到推送顺着这条链路排查最有效。我在生产环境里实测正常配置下推送延迟基本在 1~2 秒内和系统短信的感知速度差不太多。额外提醒一点国内的 Android 手机没有统一谷歌推送服务很多品牌使用的是厂商自有通道或第三方推送。这会导致部分环境下 App 退到后台后推送不及时极端的可能要亮屏解锁才能唤醒。这不是 Madeira 本身的问题而是 Android 生态碎片化导致的平台差异。我的对策是主力值班机用 iPhone备机放 Android双通道保险。3.3 日常使用技巧配置完成之后日常使用其实靠几个小技巧就能拉开体验差距。第一是把最关键的仪表盘加到收藏夹并且把 App 里的“打开默认面板”设为这个收藏看板每天通勤路上点开 App 第一眼看到的就是它。第二是用系统级小组件iOS 的小组件可以放一个图表面板不点亮 App 直接看到最新数据点Android 也支持类似组件。我这个习惯后来慢慢固定下来手机负一屏放资源水位、错误率、延迟三个核心指标余光一扫就行。第三是告警的归并与过滤。Grafana 本身支持告警规则分组但移动端更实用的是通过标签过滤。凡是关键业务告警统一打上criticaltrue标签手机端可以单独查看这个标签下的所有告警避免被无关告警淹没。第四是善用静默操作遇到“已知的发布期噪声”不要骂娘直接在手机上点几下把噪声吞掉。3.4 移动端安全设置手机是最容易丢的终端安全配置必须做在前面。Madeira 支持 App 内上锁打开时需要 PIN 码或系统生物识别。我建议强制开启别嫌麻烦——手机丢了等于你的监控系统和部分内网地址暴露了风险不小。远程注销也是一个重要功能。如果你在部署配置里用了长期 Token一旦设备丢失应立刻在 Web 端撤销对应的服务账号 Token手机上的会话会立即失效。此外公司安全合规要求严格的话可以限制服务账号的访问范围只允许读取指定 Dashboard截图和导出功能视情况关闭。4. 常见问题与排查技巧实录4.1 登录后白屏或数据不刷新这个是我后台收到过最多的反馈之一但其实排查路径非常固定。先说症状能登录App 也能打开但仪表盘列表空白或者图表一直转圈。按照优先级先检查 Grafana 实例地址是否可达可以用手机浏览器直接访问同地址如果浏览器打开也慢就是网络链路问题接着检查 Token 是否过期或被覆盖自建 Grafana 的 Token 如果配置了 TTL到期后 App 不会主动报错而是默默请求 401表现就是“打开了壳子但拉不到数据”。处理办法是删掉当前实例重新配置一次或者直接在 Web 端生成新 Token 更新进去。如果公司网络有防火墙策略确认手机 IP 是否在 Grafana 实例的允许访问列表里。4.2 收不到告警推送推送收不到这件事我单独做了一个排查对照表症状常见原因处理方式完全收不到任何推送设备未注册推送令牌重启 App检查“通知权限”是否开启只有冷启动后能收到系统省电策略杀掉了后台进程在系统设置中将 App 设为“不受电池优化限制”iOS 收不到但 Android 正常APNs 证书或 Token 异常在 Grafana 服务端检查推送通道日志重新验证令牌部分告警能推部分推不了告警规则的通知策略未绑定到 Alerting → Contact points 中检查默认路由延迟很严重国内安卓无 GMS推送受限改用 iOS 或使用集成第三方推送通道这里插一个非常容易踩的坑升级 Grafana 版本之后如果告警从旧版迁移到新版 Alerting之前配置的通知渠道不会自动全量带过来需要手动确认每条告警所属的通知策略是否还是原来的。我遇到过升级后推送静默失效的情况排查了半天才发现是通知策略被重置成默认了。4.3 自签名证书导致无法连接内网环境用自签名证书在手机上信任 CA 已经说过一遍。这里补充一个细节如果你的 Grafana 地址是 IP 而不是域名证书里的 Common NameCN可能不匹配即使安装了 CA 也可能校验失败。建议内网部署的时候证书要包含实际访问的域名或 IP 的 SAN 条目否则每个手机都要做额外处理。实在不想折腾证书的话可以在内网前面加一层 Nginx/Traefik 做 TLS 终结用泛域名证书统一管理手机上只需要信任一个机构 CA。这也顺便解决了多实例证书分散的问题。4.4 移动端耗电与后台被杀“App 太费电”“后台老被杀”这些问题多数不是 App 本身造成的而是它需要保持后台连接来接收推送。官方设计上其实做了不少省电优化比如空闲时降低刷新频率、网络请求合并但国产 ROM 的激进策略仍然是个变数。我的习惯是值班手机安装完后直接到系统设置里把 App 的后台运行权限拉满关闭“自动省电限制”并且在最近任务列表里给 App 上锁。如果你只是日常查看不是值班机那就保持默认设置反而更省电。还有一个小巧思把当前网络切换成 Wi-Fi 后Grafana 实例如果是内网地址App 不会反复请求失败导致耗电因为内网 IP 在移动网络下本来就是不可达的这属于环境配置问题。4.5 多实例切换时账号混乱配置了开发、测试、生产多个实例后有时候打开 App 会发现自己“在错误的实例上操作”尤其是点击推送通知跳转时通知来自哪个实例App 就会切到哪个实例。这不是 Bug但容易误操作。我的建议是使用系统的“专注模式”或者 App 的免打扰时段值班时只保留生产实例的通知提醒其他环境设置为静默。实例多的话也可以在名称上做区分比如“生产-核心交易”“生产-中间件”避免两个都叫“测试环境”。5. 扩展玩法把 Madeira 变成团队的移动值班台5.1 与工单系统打通单纯收告警只是第一步真正有效的值班体系需要把“通知”变成“任务”。我现在把 Madeira 和内部工单系统打通告警推送到手机时App 内的告警详情会带上链接点进去关联到对应工单操作静默后会回写状态工单自动标记“已接收待观察”。整个闭环下来夜间值班不再依赖群里的“人工吼叫”每个告警都有据可循。具体实现上不复杂Grafana 的 Webhook 本身就支持自定义标签和链接模板只需要在通知模板里把告警 ID、面板 URL、静默操作链接拼进去。手机端最爽的场景是告警来了我先看面板确认然后一键静默工单状态自动流转全程不用翻身开电脑。5.2 移动端专用 Dashboard 设计大屏看板追求信息密度移动端则要克制。我单独设计了两个移动端专用 Dashboard一个叫“值班总览”一个叫“发布健康度”。值班总览只放 6 个关键面板核心服务可用性、错误率、P90 延迟、磁盘水位、消息队列积压、域名证书到期。每个面板都用大号数字迷你趋势图竖屏一眼扫完。设计移动端面板时要注意几点不要放表格手机上看表格是灾难折线图慎用多系列叠加最多三条字体尽量设大时间范围固定为最近 3 小时不要太长。面板 JSON 可以和常规大屏共存只要调整gridPos的宽高刷新频率设置到 30s 一次移动端展示就比较舒服。5.3 数据权限与审计移动端带来了便利也带来了新的管理要求。我的经验是服务账号的权限能收窄就收窄查看权限不等于操作权限如果团队里运维、研发都要用手机看监控按角色创建不同的服务账号给最小权限。同时开启 Grafana 的审计日志如果自建实例支撑的话记录谁在什么时间从哪个 IP 发起了查询配合安全审计需求。这里必须强调一个原则移动端不是可以松懈的入口而是和 Web 端同等重要的攻击面。Token 泄露、设备丢失、截屏外发都是真实风险管理员应该定期检查服务账号列表吊销不再使用的令牌。最后分享点个人体会用了大半年 Madeira我最深的感受是“工具越顺手值班的焦虑感越低”。以前半夜听到告警声整个人是从床上弹起来的脑子里全是模糊的猜测是不是数据库挂了是不是发布出问题了现在手机亮屏推送带上指标数据和面板链接我在被窝里就能把故障范围缩小一半真正需要爬起来处理的次数其实很少。再补一个小技巧收尾把手机设为“深夜专注模式”后只允许 Madeira 的 Alerting 推送穿透免打扰其他社交类 App 全部静默同时配好静默规则表达式只对criticaltrue的告警做全球强提醒。这套组合拳实测下来值班周的睡眠质量提升非常明显告警没有漏过一条但腿却少跑了很多趟。