<?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>Ga4 on Tarragon</title><link>https://tarrragon.github.io/blog/tags/ga4/</link><description>Recent content in Ga4 on Tarragon</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><copyright>Tarragon (CC BY 4.0)</copyright><lastBuildDate>Fri, 19 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://tarrragon.github.io/blog/tags/ga4/index.xml" rel="self" type="application/rss+xml"/><item><title>商業方案的事件類型對應</title><link>https://tarrragon.github.io/blog/monitoring/01-mental-model/commercial-event-mapping/</link><pubDate>Fri, 19 Jun 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/monitoring/01-mental-model/commercial-event-mapping/</guid><description>&lt;p>商業監控方案各自有不同的事件分類體系。理解它們的分類邏輯和四類事件（event / error / metric / lifecycle）的對應關係，才能在接入時正確映射自架方案的事件，避免資料遺漏或分類錯誤。&lt;/p>
&lt;h2 id="sentry">Sentry&lt;/h2>
&lt;p>Sentry 的核心概念是 error tracking，但已擴展到 performance monitoring 和 session replay。&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>四類事件&lt;/th>
 &lt;th>Sentry 對應&lt;/th>
 &lt;th>說明&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>Event&lt;/td>
 &lt;td>Breadcrumb&lt;/td>
 &lt;td>使用者操作記錄在 breadcrumb trail，附加在 error 上&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Error&lt;/td>
 &lt;td>Event（Exception type）&lt;/td>
 &lt;td>Sentry 的核心。自動捕獲 + 手動 captureException&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Metric&lt;/td>
 &lt;td>Transaction + Span&lt;/td>
 &lt;td>Performance monitoring 的度量單位&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Lifecycle&lt;/td>
 &lt;td>Breadcrumb（navigation）&lt;/td>
 &lt;td>app 生命週期記錄為 navigation/system breadcrumb&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>Sentry 的設計假設是「error 是主角，其他事件是 error 的 context」。Event 和 lifecycle 都以 breadcrumb 形式附加在 error 報告上，獨立查看的能力有限。Breadcrumb 預設保留最近 100 條且不可獨立查詢 — 它是 error 報告的附件，不是獨立的事件資料庫。Metric 對應的 Transaction + Span 則有獨立的 Performance 頁面可以查看，和 error 是不同的 UI 入口。如果主要需求是行為分析而非 error tracking，Sentry 的 breadcrumb 模型可能不夠用。&lt;/p>
&lt;h2 id="firebase-crashlytics--analytics">Firebase Crashlytics + Analytics&lt;/h2>
&lt;p>Firebase 把 error tracking 和行為分析拆成兩個獨立產品。&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>四類事件&lt;/th>
 &lt;th>Firebase 對應&lt;/th>
 &lt;th>說明&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>Event&lt;/td>
 &lt;td>Analytics custom event&lt;/td>
 &lt;td>GA4 的 event，有 parameters 附加屬性&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Error&lt;/td>
 &lt;td>Crashlytics exception&lt;/td>
 &lt;td>fatal + non-fatal exception 分開處理&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Metric&lt;/td>
 &lt;td>Analytics event + parameters&lt;/td>
 &lt;td>用 event 的 parameters 記錄數值（無原生 metric）&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Lifecycle&lt;/td>
 &lt;td>Analytics auto events&lt;/td>
 &lt;td>screen_view、app_open 等自動收集&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>Firebase 的特點是 Crashlytics 和 Analytics 各自獨立運作 — error 資料在 Crashlytics console，行為資料在 Analytics console。Metric 沒有原生支援，只能用 Analytics event 的 parameters 欄位記錄數值（例如 &lt;code>event: 'page_load', parameters: {duration_ms: 320}&lt;/code>），查詢時需要在 BigQuery export 中自行聚合。兩個 console 之間的關聯需要手動（在 Crashlytics 的 custom key 中設定 user ID，再到 Analytics 用同一個 ID 查行為）。&lt;/p>
&lt;h2 id="datadog-rum">Datadog RUM&lt;/h2>
&lt;p>Datadog Real User Monitoring 從全棧 APM 的角度設計 client-side 監控。&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>四類事件&lt;/th>
 &lt;th>Datadog RUM 對應&lt;/th>
 &lt;th>說明&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>Event&lt;/td>
 &lt;td>Action&lt;/td>
 &lt;td>使用者操作（click、tap、scroll）自動或手動捕獲&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Error&lt;/td>
 &lt;td>Error&lt;/td>
 &lt;td>JS exception、network error、custom error&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Metric&lt;/td>
 &lt;td>Long Task + 自訂&lt;/td>
 &lt;td>長任務自動捕獲，自訂 metric 用 global context&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Lifecycle&lt;/td>
 &lt;td>View&lt;/td>
 &lt;td>頁面/畫面的進入和離開，自動偵測 SPA route 變換&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>Datadog RUM 的特點是和 backend APM 的深度整合。Client-side 的 action 可以關聯到 server-side 的 trace，形成從按鈕點擊到 database query 的完整鏈路。自架方案通常做不到這個深度的跨層關聯。&lt;/p></description><content:encoded><![CDATA[<p>商業監控方案各自有不同的事件分類體系。理解它們的分類邏輯和四類事件（event / error / metric / lifecycle）的對應關係，才能在接入時正確映射自架方案的事件，避免資料遺漏或分類錯誤。</p>
<h2 id="sentry">Sentry</h2>
<p>Sentry 的核心概念是 error tracking，但已擴展到 performance monitoring 和 session replay。</p>
<table>
  <thead>
      <tr>
          <th>四類事件</th>
          <th>Sentry 對應</th>
          <th>說明</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Event</td>
          <td>Breadcrumb</td>
          <td>使用者操作記錄在 breadcrumb trail，附加在 error 上</td>
      </tr>
      <tr>
          <td>Error</td>
          <td>Event（Exception type）</td>
          <td>Sentry 的核心。自動捕獲 + 手動 captureException</td>
      </tr>
      <tr>
          <td>Metric</td>
          <td>Transaction + Span</td>
          <td>Performance monitoring 的度量單位</td>
      </tr>
      <tr>
          <td>Lifecycle</td>
          <td>Breadcrumb（navigation）</td>
          <td>app 生命週期記錄為 navigation/system breadcrumb</td>
      </tr>
  </tbody>
</table>
<p>Sentry 的設計假設是「error 是主角，其他事件是 error 的 context」。Event 和 lifecycle 都以 breadcrumb 形式附加在 error 報告上，獨立查看的能力有限。Breadcrumb 預設保留最近 100 條且不可獨立查詢 — 它是 error 報告的附件，不是獨立的事件資料庫。Metric 對應的 Transaction + Span 則有獨立的 Performance 頁面可以查看，和 error 是不同的 UI 入口。如果主要需求是行為分析而非 error tracking，Sentry 的 breadcrumb 模型可能不夠用。</p>
<h2 id="firebase-crashlytics--analytics">Firebase Crashlytics + Analytics</h2>
<p>Firebase 把 error tracking 和行為分析拆成兩個獨立產品。</p>
<table>
  <thead>
      <tr>
          <th>四類事件</th>
          <th>Firebase 對應</th>
          <th>說明</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Event</td>
          <td>Analytics custom event</td>
          <td>GA4 的 event，有 parameters 附加屬性</td>
      </tr>
      <tr>
          <td>Error</td>
          <td>Crashlytics exception</td>
          <td>fatal + non-fatal exception 分開處理</td>
      </tr>
      <tr>
          <td>Metric</td>
          <td>Analytics event + parameters</td>
          <td>用 event 的 parameters 記錄數值（無原生 metric）</td>
      </tr>
      <tr>
          <td>Lifecycle</td>
          <td>Analytics auto events</td>
          <td>screen_view、app_open 等自動收集</td>
      </tr>
  </tbody>
</table>
<p>Firebase 的特點是 Crashlytics 和 Analytics 各自獨立運作 — error 資料在 Crashlytics console，行為資料在 Analytics console。Metric 沒有原生支援，只能用 Analytics event 的 parameters 欄位記錄數值（例如 <code>event: 'page_load', parameters: {duration_ms: 320}</code>），查詢時需要在 BigQuery export 中自行聚合。兩個 console 之間的關聯需要手動（在 Crashlytics 的 custom key 中設定 user ID，再到 Analytics 用同一個 ID 查行為）。</p>
<h2 id="datadog-rum">Datadog RUM</h2>
<p>Datadog Real User Monitoring 從全棧 APM 的角度設計 client-side 監控。</p>
<table>
  <thead>
      <tr>
          <th>四類事件</th>
          <th>Datadog RUM 對應</th>
          <th>說明</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Event</td>
          <td>Action</td>
          <td>使用者操作（click、tap、scroll）自動或手動捕獲</td>
      </tr>
      <tr>
          <td>Error</td>
          <td>Error</td>
          <td>JS exception、network error、custom error</td>
      </tr>
      <tr>
          <td>Metric</td>
          <td>Long Task + 自訂</td>
          <td>長任務自動捕獲，自訂 metric 用 global context</td>
      </tr>
      <tr>
          <td>Lifecycle</td>
          <td>View</td>
          <td>頁面/畫面的進入和離開，自動偵測 SPA route 變換</td>
      </tr>
  </tbody>
</table>
<p>Datadog RUM 的特點是和 backend APM 的深度整合。Client-side 的 action 可以關聯到 server-side 的 trace，形成從按鈕點擊到 database query 的完整鏈路。自架方案通常做不到這個深度的跨層關聯。</p>
<h2 id="接入策略">接入策略</h2>
<p>接入商業方案時的映射原則：</p>
<p><strong>自架事件名稱是 source of truth</strong>。商業方案的事件名稱是自架名稱的映射，不是取代。映射邏輯集中在一個 adapter 層，商業方案更換時只改 adapter。</p>
<p><strong>不要為了配合商業方案改變自架的分類</strong>。Sentry 把 event 記錄為 breadcrumb 不代表自架方案也要把 event 降級成 error 的附屬品。自架的四類分類是語意正確的，商業方案的分類是它自己的產品設計。</p>
<p><strong>同時接入多個方案時做去重</strong>。Error 同時發到 Sentry 和 Crashlytics 會產生重複。在 adapter 層控制「哪類事件發到哪個方案」，避免同一個事件在多個 dashboard 出現。</p>
<h2 id="下一步路由">下一步路由</h2>
<ul>
<li>四類事件的定義 → <a href="/blog/monitoring/01-mental-model/four-event-types/" data-link-title="四類事件的完整定義" data-link-desc="Event / Error / Metric / Lifecycle 四類事件各自的語意、觸發時機和典型用途 — 分類是監控體系的統一語言">四類事件的完整定義</a></li>
<li>商業方案的深入比較 → <a href="/blog/monitoring/06-commercial-comparison/" data-link-title="模組六：商業方案對照" data-link-desc="Sentry / Crashlytics / Datadog RUM / Mixpanel — 自架 vs 商業的功能和成本取捨">模組六 商業方案比較</a></li>
<li>事件命名規範 → <a href="/blog/monitoring/01-mental-model/event-naming-convention/" data-link-title="事件命名規範" data-link-desc="namespace.action 格式的事件命名、命名一致性的工程價值、和商業方案命名慣例的對應">事件命名規範</a></li>
</ul>
]]></content:encoded></item></channel></rss>