<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>错误跟踪 on Saiga</title>
    <link>http://localhost:1313/tags/%E9%94%99%E8%AF%AF%E8%B7%9F%E8%B8%AA/</link>
    <description>Recent content in 错误跟踪 on Saiga</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <managingEditor>wuwenzen@outlook.com (wuwj)</managingEditor>
    <webMaster>wuwenzen@outlook.com (wuwj)</webMaster>
    <lastBuildDate>Mon, 05 Sep 2022 00:00:00 +0000</lastBuildDate>
    <atom:link href="http://localhost:1313/tags/%E9%94%99%E8%AF%AF%E8%B7%9F%E8%B8%AA/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>前端监控闭环：采集、告警到问题跟踪</title>
      <link>http://localhost:1313/posts/2022-09-05-monitoring-and-alert/</link>
      <pubDate>Mon, 05 Sep 2022 00:00:00 +0000</pubDate><author>wuwenzen@outlook.com (wuwj)</author>
      <guid>http://localhost:1313/posts/2022-09-05-monitoring-and-alert/</guid>
      <description>&lt;p&gt;很多团队做前端监控的姿势是：&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;先接一个 SDK，看到了几个报错，然后就没然后了。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;最后变成：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;告警群天天响，大家学会了「静音」；&lt;/li&gt;&#xA;&lt;li&gt;仪表盘很酷，但没人看；&lt;/li&gt;&#xA;&lt;li&gt;真出大问题时，还是靠用户截图。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;这篇文章想聊的是：&lt;strong&gt;怎么从「有监控」升级到「有闭环」&lt;/strong&gt;：采集、告警、问题跟踪、复盘一条链路打通。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-前端到底要监什么&#34;&gt;1. 前端到底要监什么？&lt;/h2&gt;&#xA;&lt;p&gt;可以按三个维度来想：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;可用性&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;JS 运行错误（Error、Promise 未捕获）；&lt;/li&gt;&#xA;&lt;li&gt;资源加载失败（JS/CSS/图片）；&lt;/li&gt;&#xA;&lt;li&gt;页面白屏/异常重定向。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;性能&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;首屏指标（FCP/FP/TTI 等的近似值）；&lt;/li&gt;&#xA;&lt;li&gt;接口耗时、失败率；&lt;/li&gt;&#xA;&lt;li&gt;静态资源加载时间。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;行为 &amp;amp; 转化&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;关键路径的曝光/点击/完成；&lt;/li&gt;&#xA;&lt;li&gt;异常行为（频繁刷新、某步流失明显）。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;实践上，可以先从：&lt;strong&gt;错误 + 性能 + 关键链路打点&lt;/strong&gt; 三件事做起。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;2-采集埋点--sdk-一起用&#34;&gt;2. 采集：埋点 &amp;amp; SDK 一起用&lt;/h2&gt;&#xA;&lt;h3 id=&#34;21-错误采集&#34;&gt;2.1 错误采集&lt;/h3&gt;&#xA;&lt;p&gt;典型方式：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-ts&#34; data-lang=&#34;ts&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;window.&lt;span style=&#34;color:#a6e22e&#34;&gt;addEventListener&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;error&amp;#39;&lt;/span&gt;, (&lt;span style=&#34;color:#a6e22e&#34;&gt;event&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;reportError&lt;/span&gt;({&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;error&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;message&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;event.message&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;filename&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;event.filename&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;lineno&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;event.lineno&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;colno&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;event.colno&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;stack&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;event.error?.stack&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;});&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;window.&lt;span style=&#34;color:#a6e22e&#34;&gt;addEventListener&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;unhandledrejection&amp;#39;&lt;/span&gt;, (&lt;span style=&#34;color:#a6e22e&#34;&gt;event&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;reportError&lt;/span&gt;({&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;unhandledrejection&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;reason&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;String&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;event&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;reason&lt;/span&gt;),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;});&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;结合 sourcemap 上传，可以把错误还原到源代码行。&lt;/p&gt;&#xA;&lt;h3 id=&#34;22-性能采集&#34;&gt;2.2 性能采集&lt;/h3&gt;&#xA;&lt;p&gt;利用 Performance API：&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
