<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>监控 on Last Stand</title><link>https://amatsuzero.github.io/LastStand/tags/%E7%9B%91%E6%8E%A7/</link><description>Recent content in 监控 on Last Stand</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Thu, 07 May 2026 15:42:48 +0800</lastBuildDate><atom:link href="https://amatsuzero.github.io/LastStand/tags/%E7%9B%91%E6%8E%A7/index.xml" rel="self" type="application/rss+xml"/><item><title>APM-B端平台设计</title><link>https://amatsuzero.github.io/LastStand/posts/interview/ios-apm/b%E7%AB%AF%E5%B9%B3%E5%8F%B0%E8%AE%BE%E8%AE%A1/</link><pubDate>Thu, 07 May 2026 15:42:48 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/interview/ios-apm/b%E7%AB%AF%E5%B9%B3%E5%8F%B0%E8%AE%BE%E8%AE%A1/</guid><description>&lt;p&gt;B 端 APM 平台的目标不是“展示所有数据”，而是让研发团队在最短路径内完成：&lt;strong&gt;发现问题、判断影响、定位原因、分配负责人、验证修复、防止再次劣化&lt;/strong&gt;。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="一信息架构"&gt;一、信息架构&lt;/h2&gt;
&lt;pre class="mermaid"&gt;flowchart TB
Home["质量概览"] --&gt; Stability["稳定性"]
Home --&gt; Performance["性能体验"]
Home --&gt; Network["网络"]
Home --&gt; Session["用户会话"]
Home --&gt; Release["版本发布"]
Home --&gt; Alert["告警中心"]
Home --&gt; Config["SDK 配置"]
Stability --&gt; Crash["Crash"]
Stability --&gt; Watchdog["Watchdog"]
Stability --&gt; FOOM["FOOM"]
Performance --&gt; Launch["启动"]
Performance --&gt; View["页面"]
Performance --&gt; Freeze["卡顿/掉帧"]
Performance --&gt; Resource["资源"]
Release --&gt; Gray["灰度对比"]
Release --&gt; Gate["发布门禁"]
Alert --&gt; Rule["规则"]
Alert --&gt; Notify["通知"]
Alert --&gt; Silence["静默"]
&lt;/pre&gt;
&lt;p&gt;一级导航不要按技术实现命名，比如 Kafka、ClickHouse、符号化任务；应该按用户任务命名，比如稳定性、性能体验、网络、发布、告警。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="二首页质量概览"&gt;二、首页质量概览&lt;/h2&gt;
&lt;p&gt;首页回答三个问题：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;当前版本稳不稳？&lt;/li&gt;
&lt;li&gt;过去一段时间有没有变差？&lt;/li&gt;
&lt;li&gt;最应该处理的 Top 问题是什么？&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;核心卡片：&lt;/p&gt;</description></item><item><title>APM-C端SDK架构</title><link>https://amatsuzero.github.io/LastStand/posts/interview/ios-apm/c%E7%AB%AFsdk%E6%9E%B6%E6%9E%84/</link><pubDate>Thu, 07 May 2026 15:42:48 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/interview/ios-apm/c%E7%AB%AFsdk%E6%9E%B6%E6%9E%84/</guid><description>&lt;p&gt;iOS APM SDK 是整个系统的数据入口。它运行在真实用户设备上，和业务 App 共进程、共资源、共生命周期，所以设计目标不是“能力越多越好”，而是 &lt;strong&gt;低开销、可控制、可降级、可追责、可合规&lt;/strong&gt;。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="一sdk-职责边界"&gt;一、SDK 职责边界&lt;/h2&gt;
&lt;p&gt;SDK 应该做：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;采集 Crash、Watchdog、FOOM、卡顿、启动、网络、页面、MetricKit、业务 Trace 等现场。&lt;/li&gt;
&lt;li&gt;生成并维护 &lt;code&gt;session_id&lt;/code&gt;、&lt;code&gt;view_id&lt;/code&gt;、&lt;code&gt;action_id&lt;/code&gt;、&lt;code&gt;resource_id&lt;/code&gt;、&lt;code&gt;trace_id&lt;/code&gt; 等关联 ID。&lt;/li&gt;
&lt;li&gt;做轻量预处理：去重、聚合、脱敏、采样、压缩、加密。&lt;/li&gt;
&lt;li&gt;按数据价值分级落盘和上报。&lt;/li&gt;
&lt;li&gt;接收远程配置，动态控制模块开关、采样率、阈值和熔断。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;SDK 不应该做：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;复杂 OLAP 查询。&lt;/li&gt;
&lt;li&gt;大规模归因计算。&lt;/li&gt;
&lt;li&gt;服务端符号化。&lt;/li&gt;
&lt;li&gt;跨用户聚合。&lt;/li&gt;
&lt;li&gt;长时间 CPU 采样或高频全量堆栈采样。&lt;/li&gt;
&lt;li&gt;未经允许采集请求 body、用户输入、定位、通讯录等敏感数据。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="二分层架构"&gt;二、分层架构&lt;/h2&gt;
&lt;pre class="mermaid"&gt;flowchart TB
API["Public API&lt;br/&gt;start / identify / track / trace / breadcrumb"]
Core["SDK Core&lt;br/&gt;生命周期 / 插件管理 / 远程配置 / 采样 / 隐私"]
Context["Context Manager&lt;br/&gt;App / Device / User / Session / View / Trace"]
Plugins["Plugin Layer&lt;br/&gt;Crash / Watchdog / FOOM / FPS / Launch / Network / MetricKit / Business"]
Processor["Event Processor&lt;br/&gt;标准化 / 脱敏 / 聚合 / 去重 / 优先级"]
Store["Local Store&lt;br/&gt;mmap / WAL / SQLite / 文件队列"]
Uploader["Uploader&lt;br/&gt;批量 / 压缩 / 加密 / 重试 / 熔断"]
API --&gt; Core
Core --&gt; Context
Core --&gt; Plugins
Plugins --&gt; Processor
Context --&gt; Processor
Processor --&gt; Store
Store --&gt; Uploader
Uploader --&gt; Core
&lt;/pre&gt;
&lt;p&gt;推荐模块：&lt;/p&gt;</description></item><item><title>APM-业界方案</title><link>https://amatsuzero.github.io/LastStand/posts/interview/ios-apm/%E4%B8%9A%E7%95%8C%E6%96%B9%E6%A1%88/</link><pubDate>Thu, 07 May 2026 15:42:48 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/interview/ios-apm/%E4%B8%9A%E7%95%8C%E6%96%B9%E6%A1%88/</guid><description>&lt;p&gt;本文对比目前 iOS APM 领域主流的七大方案，从接入形态、原理、能力深度、适用场景四个维度深入剖析。每个方案都包含核心技术原理与关键源码解读，帮助读者做&amp;quot;自研还是三方、自研该参考哪个&amp;quot;的选型决策。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="一全景对比"&gt;一、全景对比&lt;/h2&gt;
&lt;pre class="mermaid"&gt;quadrantChart
title "iOS APM 方案对比"
x-axis "低侵入" --&gt; "高侵入"
y-axis "浅能力" --&gt; "深能力"
quadrant-1 "专业级"
quadrant-2 "旗舰级"
quadrant-3 "入门级"
quadrant-4 "高性价比"
MetricKit: [0.05, 0.45]
Firebase: [0.15, 0.4]
"Xcode Organizer": [0.02, 0.35]
Sentry: [0.3, 0.65]
Bugly: [0.25, 0.5]
"Matrix (微信)": [0.6, 0.88]
"Slardar (字节)": [0.65, 0.95]
"Hertz (美团)": [0.5, 0.8]
"Alita (阿里 mPaaS)": [0.55, 0.85]
&lt;/pre&gt;
&lt;hr&gt;
&lt;h2 id="二metrickit--xcode-organizerapple-官方"&gt;二、MetricKit + Xcode Organizer（Apple 官方）&lt;/h2&gt;
&lt;h3 id="21-定位"&gt;2.1 定位&lt;/h3&gt;
&lt;p&gt;Apple 自 iOS 13 推出的官方性能监控框架，&lt;strong&gt;完全系统侧实现&lt;/strong&gt;，SDK 零开销，是所有方案的基线。&lt;/p&gt;</description></item><item><title>APM-产品与架构设计</title><link>https://amatsuzero.github.io/LastStand/posts/interview/ios-apm/%E4%BA%A7%E5%93%81%E4%B8%8E%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1/</link><pubDate>Thu, 07 May 2026 15:42:48 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/interview/ios-apm/%E4%BA%A7%E5%93%81%E4%B8%8E%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1/</guid><description>&lt;p&gt;APM 系统的产品设计不能从“要采哪些指标”开始，而应该从“谁要用这些数据解决什么问题”开始。iOS APM 的产品形态可以分成 C 端真实用户体验、B 端研发治理平台两面；技术实现则分成 iOS SDK、数据平台、Web 控制台三层。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="一产品边界"&gt;一、产品边界&lt;/h2&gt;
&lt;p&gt;APM 的 C 端不是一个给用户看的页面，而是运行在用户设备里的监控能力；APM 的 B 端才是研发、测试、架构、运维、产品、客服使用的控制台。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;视角&lt;/th&gt;
&lt;th&gt;C 端&lt;/th&gt;
&lt;th&gt;B 端&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;用户&lt;/td&gt;
&lt;td&gt;App 真实用户&lt;/td&gt;
&lt;td&gt;研发、测试、架构、运维、产品、客服&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;形态&lt;/td&gt;
&lt;td&gt;iOS SDK，无感运行&lt;/td&gt;
&lt;td&gt;Web 控制台、告警、工单、报表&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;核心体验&lt;/td&gt;
&lt;td&gt;不打扰、不拖慢、不泄露隐私&lt;/td&gt;
&lt;td&gt;快速发现、下钻、归因、分发、验证&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;主要风险&lt;/td&gt;
&lt;td&gt;SDK 自身引发卡顿、崩溃、耗电、流量&lt;/td&gt;
&lt;td&gt;指标口径混乱、告警疲劳、无法定位&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;成功标准&lt;/td&gt;
&lt;td&gt;数据真实且采集成本低&lt;/td&gt;
&lt;td&gt;问题能被稳定治理，发布劣化能被拦截&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;因此产品设计要同时回答两类问题：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;C端：真实用户到底经历了什么？
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;B端：团队如何用这些数据把问题修掉？
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="二用户角色"&gt;二、用户角色&lt;/h2&gt;
&lt;p&gt;APM B 端不是只给研发看，不同角色需要不同入口。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;角色&lt;/th&gt;
&lt;th&gt;典型问题&lt;/th&gt;
&lt;th&gt;核心视图&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;客户端研发&lt;/td&gt;
&lt;td&gt;我负责的模块有没有新 Crash、卡顿、FOOM&lt;/td&gt;
&lt;td&gt;我的 Issue、堆栈详情、会话时间线&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;后端研发&lt;/td&gt;
&lt;td&gt;某接口在真实用户侧是否变慢、失败率是否升高&lt;/td&gt;
&lt;td&gt;网络资源详情、Trace 关联、接口维度大盘&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;测试/QA&lt;/td&gt;
&lt;td&gt;灰度版本是否比线上版本变差&lt;/td&gt;
&lt;td&gt;版本对比、灰度监控、回归报告&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;架构/技术负责人&lt;/td&gt;
&lt;td&gt;App 整体质量趋势如何，哪个团队拖后腿&lt;/td&gt;
&lt;td&gt;质量大盘、模块排行、SLO&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;产品/业务负责人&lt;/td&gt;
&lt;td&gt;性能是否影响转化、留存、下单&lt;/td&gt;
&lt;td&gt;页面秒开率、关键路径成功率、业务漏斗&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;客服/运营&lt;/td&gt;
&lt;td&gt;单个用户为什么反馈无法使用&lt;/td&gt;
&lt;td&gt;用户查询、Session 轨迹、错误上下文&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;设计 B 端时不要把所有人塞进同一个大盘。首页可以共用，但下钻路径要按角色分流。&lt;/p&gt;</description></item><item><title>APM-指标体系</title><link>https://amatsuzero.github.io/LastStand/posts/interview/ios-apm/%E6%8C%87%E6%A0%87%E4%BD%93%E7%B3%BB/</link><pubDate>Thu, 07 May 2026 15:42:48 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/interview/ios-apm/%E6%8C%87%E6%A0%87%E4%BD%93%E7%B3%BB/</guid><description>&lt;p&gt;APM 的第一步不是写代码，而是&lt;strong&gt;定义指标&lt;/strong&gt;。一个 App 的性能好坏不是一句话能说清的，必须把模糊的&amp;quot;快 / 稳 / 省&amp;quot;拆解为可量化、可对比、可报警的数字。本文把业界常用指标按&amp;quot;稳定性 / 流畅性 / 启动 / 资源 / 业务 / 网络&amp;quot;六大族分类，并补充 RUM 的 &lt;code&gt;Session / View / Action / Resource / Error&lt;/code&gt; 口径，给出每个指标的定义、计算方式、典型目标值与常见陷阱。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="一指标设计原则"&gt;一、指标设计原则&lt;/h2&gt;
&lt;p&gt;设计指标前先达成共识：&lt;/p&gt;
&lt;h3 id="11-北极星分层"&gt;1.1 北极星分层&lt;/h3&gt;
&lt;pre class="mermaid"&gt;graph TB
L0[用户体验北极星&lt;br/&gt;留存率 / NPS]
L1[业务指标&lt;br/&gt;秒开率 / 转化率 / 关键路径完成率]
L2[技术指标&lt;br/&gt;FPS / Crash率 / 启动时间]
L3[原子指标&lt;br/&gt;单帧耗时 / 内存峰值 / 单请求耗时]
L0 --&gt; L1 --&gt; L2 --&gt; L3
&lt;/pre&gt;
&lt;p&gt;好的指标体系应该：&lt;strong&gt;技术指标能解释业务指标，业务指标能解释北极星&lt;/strong&gt;。否则就是&amp;quot;为了采集而采集&amp;quot;。&lt;/p&gt;
&lt;h3 id="12-分位数思维"&gt;1.2 分位数思维&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;永远不要只看平均值&lt;/strong&gt;。同一个启动指标：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;设备&lt;/th&gt;
&lt;th&gt;平均&lt;/th&gt;
&lt;th&gt;P50&lt;/th&gt;
&lt;th&gt;P90&lt;/th&gt;
&lt;th&gt;P99&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;iPhone 15&lt;/td&gt;
&lt;td&gt;800ms&lt;/td&gt;
&lt;td&gt;750ms&lt;/td&gt;
&lt;td&gt;900ms&lt;/td&gt;
&lt;td&gt;1200ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;iPhone SE 2&lt;/td&gt;
&lt;td&gt;2000ms&lt;/td&gt;
&lt;td&gt;1500ms&lt;/td&gt;
&lt;td&gt;3500ms&lt;/td&gt;
&lt;td&gt;8000ms&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;平均值把两者拉成 1400ms，但 iPhone SE 的 P99 用户&amp;quot;实际等了 8 秒&amp;quot;。APM 的所有耗时指标都必须同时提供 P50 / P90 / P99。&lt;/p&gt;</description></item><item><title>APM-数据模型与上报</title><link>https://amatsuzero.github.io/LastStand/posts/interview/ios-apm/%E6%95%B0%E6%8D%AE%E6%A8%A1%E5%9E%8B%E4%B8%8E%E4%B8%8A%E6%8A%A5/</link><pubDate>Thu, 07 May 2026 15:42:48 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/interview/ios-apm/%E6%95%B0%E6%8D%AE%E6%A8%A1%E5%9E%8B%E4%B8%8E%E4%B8%8A%E6%8A%A5/</guid><description>&lt;p&gt;APM 的上报系统不只是“把 JSON 发到服务端”。它要解决三件事：&lt;strong&gt;数据如何建模、事件如何关联、移动端如何可靠且低成本地上传&lt;/strong&gt;。这一层设计不好，后面的服务端聚合、B 端下钻和告警都会变成补丁工程。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="一设计目标"&gt;一、设计目标&lt;/h2&gt;
&lt;p&gt;数据模型与上报层要同时满足：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;目标&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;可关联&lt;/td&gt;
&lt;td&gt;页面、操作、网络、错误、性能现场能被 Session 串起来&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;可聚合&lt;/td&gt;
&lt;td&gt;同类问题能按 fingerprint、版本、机型、页面、接口聚合&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;可重试&lt;/td&gt;
&lt;td&gt;弱网、后台、进程退出后数据不轻易丢&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;可去重&lt;/td&gt;
&lt;td&gt;重试不会造成重复统计&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;可采样&lt;/td&gt;
&lt;td&gt;高频数据不会压垮端侧、网络和服务端&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;可脱敏&lt;/td&gt;
&lt;td&gt;敏感数据在端侧就被过滤或掩码&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;可演进&lt;/td&gt;
&lt;td&gt;Schema 版本升级后新旧 SDK 可以共存&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="二rum-对象模型"&gt;二、RUM 对象模型&lt;/h2&gt;
&lt;p&gt;推荐用 RUM 层级组织端侧事件：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Session
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; View
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Action
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Resource
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Error
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; LongTask / Freeze
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Custom Event
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;对象&lt;/th&gt;
&lt;th&gt;含义&lt;/th&gt;
&lt;th&gt;示例&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Session&lt;/td&gt;
&lt;td&gt;一次用户前台使用会话&lt;/td&gt;
&lt;td&gt;打开 App 到退后台&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;View&lt;/td&gt;
&lt;td&gt;一个页面实例&lt;/td&gt;
&lt;td&gt;首页、详情页、支付页&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Action&lt;/td&gt;
&lt;td&gt;一次用户操作&lt;/td&gt;
&lt;td&gt;点击下单、搜索、提交表单&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Resource&lt;/td&gt;
&lt;td&gt;一次资源请求&lt;/td&gt;
&lt;td&gt;HTTP 请求、图片资源、WebView 资源&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Error&lt;/td&gt;
&lt;td&gt;一次错误&lt;/td&gt;
&lt;td&gt;Crash、业务错误、网络错误、JS 错误&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LongTask / Freeze&lt;/td&gt;
&lt;td&gt;一次长任务或卡顿&lt;/td&gt;
&lt;td&gt;主线程阻塞 800ms&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;RUM 模型的价值是把“点状指标”变成“用户故事”：&lt;/p&gt;</description></item><item><title>APM-数据采集</title><link>https://amatsuzero.github.io/LastStand/posts/interview/ios-apm/%E6%95%B0%E6%8D%AE%E9%87%87%E9%9B%86/</link><pubDate>Sat, 02 May 2026 22:32:27 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/interview/ios-apm/%E6%95%B0%E6%8D%AE%E9%87%87%E9%9B%86/</guid><description>&lt;p&gt;本文聚焦 iOS APM SDK 的&lt;strong&gt;采集层&lt;/strong&gt;，把 &lt;code&gt;APM-指标体系&lt;/code&gt; 定义好的指标落地到具体代码与底层原理。按照采集对象分八个模块展开：崩溃、卡死、内存/OOM、FPS 卡顿、启动、网络、CPU/磁盘、业务。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;原理深度与相关文章联动：本文给出整体采集设计与关键代码；单项（如 Mach 异常、Signal、MemoryGraph 等）的纯原理细节在&amp;quot;崩溃/卡顿/启动/耗电&amp;quot;系列中已有深入剖析，本篇通过链接形式串联，避免重复。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="一采集技术图谱"&gt;一、采集技术图谱&lt;/h2&gt;
&lt;pre class="mermaid"&gt;graph TB
subgraph Hook[Hook 技术]
H1[Method Swizzling&lt;br/&gt;Objective-C Runtime]
H2[fishhook&lt;br/&gt;C 函数符号重绑]
H3[Objc Categroy + +load]
H4[KVO / NSNotificationCenter]
H5[C++ Virtual Table Hook]
end
subgraph System[系统 API]
S1[MetricKit]
S2[os_signpost / OSLog]
S3[Runtime&lt;br/&gt;task_* / thread_*]
S4[libdispatch signpost]
S5[URLSessionTaskMetrics]
end
subgraph Signal[信号/异常]
E1[NSSetUncaughtExceptionHandler]
E2[signal / sigaction]
E3[Mach Exception Port]
E4[libc++ abi 异常]
end
subgraph Sampling[采样]
P1[RunLoop Observer]
P2[Timer/GCD Source]
P3[CADisplayLink]
P4[backtrace 回溯]
end
&lt;/pre&gt;
&lt;hr&gt;
&lt;h2 id="二崩溃采集"&gt;二、崩溃采集&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;原理文章：&lt;a href="https://amatsuzero.github.io/LastStand/posts/interview/ios-performance/crash-%E5%8E%9F%E7%90%86/"&gt;崩溃-原理&lt;/a&gt; · &lt;a href="https://amatsuzero.github.io/LastStand/posts/interview/ios-performance/crash-mach%E5%BC%82%E5%B8%B8/"&gt;崩溃-Mach异常&lt;/a&gt; · &lt;a href="https://amatsuzero.github.io/LastStand/posts/interview/ios-performance/crash-%E4%BF%A1%E5%8F%B7%E5%A4%84%E7%90%86/"&gt;崩溃-信号处理&lt;/a&gt; · &lt;a href="https://amatsuzero.github.io/LastStand/posts/interview/ios-performance/crash-%E9%87%87%E9%9B%86/"&gt;崩溃-采集&lt;/a&gt;&lt;/p&gt;</description></item><item><title>APM-服务端数据架构</title><link>https://amatsuzero.github.io/LastStand/posts/interview/ios-apm/%E6%9C%8D%E5%8A%A1%E7%AB%AF%E6%95%B0%E6%8D%AE%E6%9E%B6%E6%9E%84/</link><pubDate>Thu, 07 May 2026 15:42:48 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/interview/ios-apm/%E6%9C%8D%E5%8A%A1%E7%AB%AF%E6%95%B0%E6%8D%AE%E6%9E%B6%E6%9E%84/</guid><description>&lt;p&gt;APM 服务端本质上是一个面向移动端遥测数据的实时数据平台。它不是简单的“接收接口 + MySQL”，而要处理高吞吐写入、弱 Schema 演进、实时聚合、明细查询、符号化、Issue 聚类、告警计算和配置反控。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="一整体架构"&gt;一、整体架构&lt;/h2&gt;
&lt;pre class="mermaid"&gt;flowchart TB
SDK["iOS SDK"] --&gt; Gateway["接入网关"]
Gateway --&gt; RawQueue["Raw Queue&lt;br/&gt;Kafka / Pulsar"]
RawQueue --&gt; Clean["清洗标准化&lt;br/&gt;Schema / 脱敏 / 维度补全"]
Clean --&gt; Stream["实时计算&lt;br/&gt;Flink / Spark Streaming"]
Clean --&gt; RawStore["原始冷存储&lt;br/&gt;OSS / HDFS / S3"]
Stream --&gt; DetailStore["明细存储&lt;br/&gt;ClickHouse / Doris"]
Stream --&gt; MetricStore["指标存储&lt;br/&gt;Prometheus / VictoriaMetrics / M3"]
Stream --&gt; SearchStore["搜索存储&lt;br/&gt;Elasticsearch / OpenSearch"]
Stream --&gt; IssueService["Issue 聚合服务"]
IssueService --&gt; Symbol["符号化服务"]
IssueService --&gt; Alert["告警服务"]
Alert --&gt; Notify["IM / Email / Phone / Webhook"]
DetailStore --&gt; Query["查询 API / BFF"]
MetricStore --&gt; Query
SearchStore --&gt; Query
IssueService --&gt; Query
Config["配置服务"] --&gt; SDK
&lt;/pre&gt;
&lt;p&gt;核心原则：&lt;/p&gt;</description></item><item><title>iOS APM 与 RUM 体系总览</title><link>https://amatsuzero.github.io/LastStand/posts/interview/ios-apm/apm/</link><pubDate>Thu, 07 May 2026 15:42:48 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/interview/ios-apm/apm/</guid><description>&lt;p&gt;APM（Application Performance Monitoring / Management）是面向线上真实用户的性能稳定性观测与治理体系。对 iOS App 来说，它不是一个单纯的 Crash SDK，也不是一个“把指标画成图”的后台，而是一套贯穿 &lt;strong&gt;C 端真实用户体验、端侧采集 SDK、服务端数据平台、B 端研发治理平台&lt;/strong&gt; 的完整系统。&lt;/p&gt;
&lt;p&gt;RUM（Real User Monitoring）是 APM 在真实用户体验侧的核心模型：把用户的一次使用会话拆成 &lt;code&gt;Session / View / Action / Resource / Error / LongTask&lt;/code&gt; 等对象，用统一 ID 串联页面、交互、网络、错误和性能现场。没有 RUM 模型，APM 很容易退化成一堆孤立指标；有了 RUM 模型，平台才能回答“哪个真实用户在什么页面做了什么操作，随后发生了什么性能或稳定性问题”。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="一重构后的系列结构"&gt;一、重构后的系列结构&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;文章&lt;/th&gt;
&lt;th&gt;定位&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://amatsuzero.github.io/LastStand/posts/interview/ios-apm/apm/"&gt;APM&lt;/a&gt;（本文）&lt;/td&gt;
&lt;td&gt;系列入口：APM/RUM 定义、B/C 端边界、技术分层、建设路线&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://amatsuzero.github.io/LastStand/posts/interview/ios-apm/%E4%BA%A7%E5%93%81%E4%B8%8E%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1/"&gt;APM-产品与架构设计&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;产品视角：C 端体验、B 端用户、角色视图、治理闭环&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://amatsuzero.github.io/LastStand/posts/interview/ios-apm/%E6%8C%87%E6%A0%87%E4%BD%93%E7%B3%BB/"&gt;APM-指标体系&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;指标口径：稳定性、流畅性、启动、资源、网络、业务、RUM 指标&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://amatsuzero.github.io/LastStand/posts/interview/ios-apm/c%E7%AB%AFsdk%E6%9E%B6%E6%9E%84/"&gt;APM-C端SDK架构&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;iOS SDK 架构：插件化、远程配置、采样、隐私、低开销、防自崩&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://amatsuzero.github.io/LastStand/posts/interview/ios-apm/%E6%95%B0%E6%8D%AE%E9%87%87%E9%9B%86/"&gt;APM-数据采集&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;采集技术：Crash、Watchdog、FOOM、卡顿、启动、网络、MetricKit、业务 Trace&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://amatsuzero.github.io/LastStand/posts/interview/ios-apm/%E6%95%B0%E6%8D%AE%E6%A8%A1%E5%9E%8B%E4%B8%8E%E4%B8%8A%E6%8A%A5/"&gt;APM-数据模型与上报&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;事件模型、RUM ID、协议、落盘、批量、重试、脱敏、采样&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://amatsuzero.github.io/LastStand/posts/interview/ios-apm/%E6%9C%8D%E5%8A%A1%E7%AB%AF%E6%95%B0%E6%8D%AE%E6%9E%B6%E6%9E%84/"&gt;APM-服务端数据架构&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;接入网关、消息队列、实时计算、存储、符号化、Issue 聚合、配置下发&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://amatsuzero.github.io/LastStand/posts/interview/ios-apm/b%E7%AB%AF%E5%B9%B3%E5%8F%B0%E8%AE%BE%E8%AE%A1/"&gt;APM-B端平台设计&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Web 控制台：大盘、详情页、用户会话、告警、工单、发布防劣化&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://amatsuzero.github.io/LastStand/posts/interview/ios-apm/%E4%B8%9A%E7%95%8C%E6%96%B9%E6%A1%88/"&gt;APM-业界方案&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;MetricKit、Sentry、Firebase、Bugly、Matrix、Slardar、Hertz 等方案对比&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;重构后的主线是：&lt;/p&gt;</description></item></channel></rss>