<?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>PagerDuty on Tarragon</title><link>https://tarrragon.github.io/blog/backend/08-incident-response/vendors/pagerduty/</link><description>Recent content in PagerDuty on Tarragon</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><copyright>Tarragon (CC BY 4.0)</copyright><lastBuildDate>Fri, 01 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://tarrragon.github.io/blog/backend/08-incident-response/vendors/pagerduty/index.xml" rel="self" type="application/rss+xml"/><item><title>PagerDuty → incident.io：「On-call」是個 retconned word、同名不同 contract</title><link>https://tarrragon.github.io/blog/backend/08-incident-response/vendors/pagerduty/migrate-to-incident-io/</link><pubDate>Tue, 19 May 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/backend/08-incident-response/vendors/pagerduty/migrate-to-incident-io/</guid><description>&lt;p>「On-call」是個被 retconned 的詞。PagerDuty 用了十年定義它為 &lt;em>alert routing + schedule + escalation&lt;/em> — 重點是「誰會被叫醒」。incident.io 2024 年推出 On-call 模組時保留了同一個詞、但 contract 變了：On-call 在 incident.io 是 &lt;em>IR coordination + Slack-native workflow + retrospective integration&lt;/em> 的 paging 入口 — 重點是「被叫醒之後做什麼」。&lt;/p>
&lt;p>這個語意 retroactive 是這篇 migration playbook 必須先講清楚的事。讀者打開比較表會看到「PagerDuty 有 schedule、incident.io 有 schedule、PagerDuty 有 escalation policy、incident.io 有 escalation policy」、以為這是一場 schema translation 文。實際上 schema 翻譯只是其中一個工作塊、更難的是 &lt;em>org 的事故行為從「等 PagerDuty 叫」變成「在 Slack channel 內跑 lifecycle」&lt;/em>。&lt;/p>
&lt;h2 id="為什麼是-type-e不是-type-a">為什麼是 Type E（不是 Type A）&lt;/h2>
&lt;p>跑 &lt;a href="https://tarrragon.github.io/blog/posts/migration-playbook-%E6%96%B9%E6%B3%95%E8%AB%96%E7%9A%84%E6%BC%94%E5%8C%96%E7%B4%80%E9%8C%84stage-0-variant-%E8%A6%8F%E5%8A%83%E6%8A%8A-collapse-%E7%8E%87%E5%BE%9E-60-%E9%99%8D%E5%88%B0-0/#6-%e7%b6%ad-diff-dimension-audit" data-link-title="Migration Playbook 方法論的演化紀錄：Stage 0 variant 規劃把 collapse 率從 60% 降到 0%" data-link-desc="跨 vendor migration playbook 需要獨立寫作方法論的依據，以及這套方法論從三輪 batch dogfood 中演化出來的驗證證據。">6 維 diff dimension audit&lt;/a>：&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>維度&lt;/th>
 &lt;th>評&lt;/th>
 &lt;th>說明&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>Schema&lt;/td>
 &lt;td>High&lt;/td>
 &lt;td>service / escalation policy / schedule / integration 跟 incident / role / action / catalog 沒 1:1 對應&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Operational&lt;/td>
 &lt;td>High&lt;/td>
 &lt;td>alert routing → Slack-native IR coordination + retrospective workflow&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Paradigm&lt;/td>
 &lt;td>High&lt;/td>
 &lt;td>「alert someone」 → 「coordinate full incident lifecycle from declare to retro」&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Components&lt;/td>
 &lt;td>Medium&lt;/td>
 &lt;td>incident.io 整合 Slack / Linear / Jira / Confluence 變 multi-component&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>App change&lt;/td>
 &lt;td>Medium&lt;/td>
 &lt;td>webhook / integration key / IaC 都要改&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Topology&lt;/td>
 &lt;td>Low&lt;/td>
 &lt;td>都是 cloud SaaS、無 sharding / region 議題&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>三軸 High（schema / operational / paradigm）。按優先序 schema &amp;gt; paradigm &amp;gt; operational、預設會選 Type A。但這條優先序是 &lt;em>audience-dependent heuristic&lt;/em> — 對「我要把 PagerDuty config 翻譯成 incident.io」的讀者選 Type A、對「我要把事故管理 paradigm 從 paging-first 變成 Slack-first」的讀者選 Type E。&lt;/p></description><content:encoded><![CDATA[<p>「On-call」是個被 retconned 的詞。PagerDuty 用了十年定義它為 <em>alert routing + schedule + escalation</em> — 重點是「誰會被叫醒」。incident.io 2024 年推出 On-call 模組時保留了同一個詞、但 contract 變了：On-call 在 incident.io 是 <em>IR coordination + Slack-native workflow + retrospective integration</em> 的 paging 入口 — 重點是「被叫醒之後做什麼」。</p>
<p>這個語意 retroactive 是這篇 migration playbook 必須先講清楚的事。讀者打開比較表會看到「PagerDuty 有 schedule、incident.io 有 schedule、PagerDuty 有 escalation policy、incident.io 有 escalation policy」、以為這是一場 schema translation 文。實際上 schema 翻譯只是其中一個工作塊、更難的是 <em>org 的事故行為從「等 PagerDuty 叫」變成「在 Slack channel 內跑 lifecycle」</em>。</p>
<h2 id="為什麼是-type-e不是-type-a">為什麼是 Type E（不是 Type A）</h2>
<p>跑 <a href="/blog/posts/migration-playbook-%E6%96%B9%E6%B3%95%E8%AB%96%E7%9A%84%E6%BC%94%E5%8C%96%E7%B4%80%E9%8C%84stage-0-variant-%E8%A6%8F%E5%8A%83%E6%8A%8A-collapse-%E7%8E%87%E5%BE%9E-60-%E9%99%8D%E5%88%B0-0/#6-%e7%b6%ad-diff-dimension-audit" data-link-title="Migration Playbook 方法論的演化紀錄：Stage 0 variant 規劃把 collapse 率從 60% 降到 0%" data-link-desc="跨 vendor migration playbook 需要獨立寫作方法論的依據，以及這套方法論從三輪 batch dogfood 中演化出來的驗證證據。">6 維 diff dimension audit</a>：</p>
<table>
  <thead>
      <tr>
          <th>維度</th>
          <th>評</th>
          <th>說明</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Schema</td>
          <td>High</td>
          <td>service / escalation policy / schedule / integration 跟 incident / role / action / catalog 沒 1:1 對應</td>
      </tr>
      <tr>
          <td>Operational</td>
          <td>High</td>
          <td>alert routing → Slack-native IR coordination + retrospective workflow</td>
      </tr>
      <tr>
          <td>Paradigm</td>
          <td>High</td>
          <td>「alert someone」 → 「coordinate full incident lifecycle from declare to retro」</td>
      </tr>
      <tr>
          <td>Components</td>
          <td>Medium</td>
          <td>incident.io 整合 Slack / Linear / Jira / Confluence 變 multi-component</td>
      </tr>
      <tr>
          <td>App change</td>
          <td>Medium</td>
          <td>webhook / integration key / IaC 都要改</td>
      </tr>
      <tr>
          <td>Topology</td>
          <td>Low</td>
          <td>都是 cloud SaaS、無 sharding / region 議題</td>
      </tr>
  </tbody>
</table>
<p>三軸 High（schema / operational / paradigm）。按優先序 schema &gt; paradigm &gt; operational、預設會選 Type A。但這條優先序是 <em>audience-dependent heuristic</em> — 對「我要把 PagerDuty config 翻譯成 incident.io」的讀者選 Type A、對「我要把事故管理 paradigm 從 paging-first 變成 Slack-first」的讀者選 Type E。</p>
<p>決定因素是 <em>讀者最關心什麼</em>。從 PagerDuty 出發評估 incident.io 的 org 通常 <em>已經有 Slack channel 跑 IR</em> 的痛感（雙系統 state drift / context switching cost / Slack bot 補 PagerDuty 的能力斷裂）、進來找的是 paradigm 統一、不是欄位翻譯。schema translation 是工作量、但不是讀者來找答案的問題。所以選 <strong>Type E paradigm shift</strong> 結構、schema translation 抽出獨立段補充。</p>
<h2 id="為什麼遷im-native-coordination-的拉力">為什麼遷：IM-native coordination 的拉力</h2>
<p>事故反應在已經 Slack 中心的 org 是 <em>從 Slack 自然發生</em> 的 — 觀測 alert 進 Slack、SRE 開 thread、PM 跳進來問影響、customer-facing team 在 incident channel 看通報、所有上下文都在 IM 內。PagerDuty 在這個 reality 下變成 <em>第二個 system of record</em>：incident 開在 PagerDuty 也開在 Slack、PagerDuty timeline 跟 Slack scroll 是兩條時間線、status update 要 mirror 兩次、責任分派在 Slack 講但要在 PagerDuty 點。</p>
<p>PagerDuty 注意到這個問題、後加了 Status Updates / Slack integration / Postmortem 模組想把 Slack 拉回 PagerDuty。但結構性還是 <em>PagerDuty 是主、Slack 是 mirror</em> — incident object 的 source of truth 在 PagerDuty、Slack 的訊息只是 attachment。對 <em>Slack-first</em> 的 org 來說這個 ownership 反了：Slack channel 才是事故進行中的 ground truth、PagerDuty incident 應該是 paging 入口的 artifact。</p>
<p>incident.io 設計上把這個關係翻過來：Slack channel 是 IR ground truth、incident object 是 channel 的 metadata 投影。declare incident 在 Slack、role 指派在 Slack bot prompt、status update 在 channel reply、retrospective 從 channel 訊息自動 stitch — incident.io dashboard 是 <em>管理視圖</em>、不是事故 <em>進行視圖</em>。On-call 模組加進來後、連 paging 入口也跟 IR coordination 收斂到同一個 system of record。</p>
<p>這個 pull 是這條 migration 的 <em>driver</em>。schema 翻譯只是把這條 pull 落地的工作。</p>
<h2 id="4-phase-partial-migration不收斂">4-phase partial migration（不收斂）</h2>
<p>Type E paradigm shift 的特徵是 <em>不收斂</em> — 多數 org 不會把 PagerDuty 全退役、會停在某個 phase 變成穩定的 hybrid。下面 4 phase 是 <em>常見演進路徑</em>、不是 <em>必要完成步驟</em>：</p>
<h3 id="phase-1slack-first-responsepaging-留-pagerduty">Phase 1：Slack-first response（paging 留 PagerDuty）</h3>
<p>incident.io 接 PagerDuty incident webhook、PagerDuty 開 incident → incident.io 自動開 Slack channel、跑 response lifecycle（declare / role / status / close / retro）。PagerDuty 仍管 paging schedule + escalation、incident.io 管 response coordination。</p>
<p>這個 phase 的工作主要塊是：</p>
<ul>
<li>incident.io 跟 PagerDuty 雙向 webhook 接（PD incident.trigger → IO open channel、IO incident.resolved → PD ack）</li>
<li>Slack workspace 整合（permissions、channel naming、stakeholder broadcast channel）</li>
<li>Severity 對應表（PagerDuty P1-P5 對 incident.io SEV1-SEV4、語意 reconcile）</li>
<li>跑 2-4 週 dual ops、訓練 SRE 在 Slack 內跑 lifecycle、不要回 PagerDuty 點 timeline</li>
</ul>
<p>完成標準：incident commander 不再需要進 PagerDuty UI、status update / role 指派 / action item 都在 Slack。</p>
<h3 id="phase-2catalog--service-ownership-migrate">Phase 2：Catalog + service ownership migrate</h3>
<p>把 PagerDuty 的 service registry（service / team / escalation policy 關聯）抽出進 incident.io 的 Catalog。Catalog 是 incident.io 的 <em>service metadata source of truth</em>、把 service 跟 team / Slack channel / Linear project / runbook URL 綁在一起、incident 發生時自動推薦 role 跟通知 stakeholder。</p>
<p>工作主要塊：</p>
<ul>
<li>從 PagerDuty API export service / team / escalation policy（REST endpoint <code>/services</code>、<code>/teams</code>、<code>/escalation_policies</code>）</li>
<li>Schema mapping：PagerDuty service → incident.io catalog entry、escalation policy → 暫時不動（留在 PagerDuty）</li>
<li>補 PagerDuty 沒有的欄位：Slack channel、Linear project、runbook URL、tier（catalog 比 PagerDuty service 多 metadata 維度）</li>
<li>Service ownership reconcile（PagerDuty 的 team grant 通常跟 GitHub team / IAM group 不一致、Catalog 是重新對齊機會）</li>
</ul>
<p>完成標準：incident 發生時自動知道 owner team 跟對應 Slack channel、不需要人查。</p>
<h3 id="phase-3schedule--escalation-移到-incidentio-on-call">Phase 3：Schedule + escalation 移到 incident.io On-call</h3>
<p>PagerDuty 的 schedule + escalation policy 改進 incident.io On-call。這是 <em>paging 入口的 ownership 轉移</em> — Phase 1 是 PD 觸發 IO response、Phase 3 是 IO 直接收 alert source 觸發 paging。</p>
<p>工作主要塊：</p>
<ul>
<li>Alert source 改線：Splunk / Datadog / Cloudflare WAF / cloud control plane 的 webhook 從 PagerDuty Event API 改成 incident.io webhook endpoint、deduplication key / severity mapping 重做</li>
<li>Schedule 重建：PagerDuty schedule layer model（多 layer 疊加 + restriction + override）跟 incident.io schedule rule（單純 weekly rotation + override）不是 1:1、複雜 schedule 要重新設計</li>
<li>Escalation policy 重建：PagerDuty 的 multi-step escalation + level-based timeout 對應 incident.io 的 escalation path、policy 比 PagerDuty 簡單但要重新測 failover 行為</li>
<li>Mobile app 切換：on-call 人員裝 incident.io app、PagerDuty app 保留作為 backup paging（Phase 4 才完全捨棄）</li>
</ul>
<p>完成標準：日常 paging 全走 incident.io、PagerDuty 留作 fallback 或退役。</p>
<h3 id="phase-4retrospective--完全退役-pagerduty">Phase 4：Retrospective + 完全退役 PagerDuty</h3>
<p>把 retrospective workflow 切到 incident.io 內建的 post-incident flow、捨棄 PagerDuty Postmortems / Jeli 整合。incident.io 的 retro template 從 Slack channel 訊息自動 stitch timeline、action item 推 Linear / Jira、learning review 結構化。</p>
<p>工作主要塊：</p>
<ul>
<li>既有 Jeli / PagerDuty Postmortems 歷史 export（PagerDuty REST 不直接給 postmortem export、要從 Jeli web app 手動 export）</li>
<li>Retrospective template 對應到 org 既有的 post-incident review 結構</li>
<li>Action item lifecycle 整合（incident.io 推 Linear / Jira → close → retrospective 自動標 done）</li>
</ul>
<p>多數 org 停在 Phase 2 或 Phase 3。完整 Phase 4 退役 PagerDuty 不是必要、且常見的選擇是 <em>PagerDuty 留作 backup paging route</em> 或 <em>特定 integration 持續用</em>（見下一段 capability gap）。</p>
<h2 id="5-個-production-踩雷">5 個 production 踩雷</h2>
<p>實際遷過程踩過的 5 個典型問題：</p>
<h3 id="1-雙系統-state-driftphase-1-最常見">1. 雙系統 state drift（Phase 1 最常見）</h3>
<p>PagerDuty incident.trigger → incident.io 開 channel、但 PagerDuty 上 incident 被自動 resolve（例如 monitoring tool 認為 issue cleared）後、incident.io 沒收到對應 webhook、Slack channel 還 active 顯示 in-progress。修法是雙向 webhook 都要接（PD resolved → IO 自動 close channel），但 webhook 失序的場景仍要有 nightly reconcile job 對比兩邊狀態。</p>
<h3 id="2-severity-翻譯失真">2. Severity 翻譯失真</h3>
<p>PagerDuty 的 P1-P5 跟 incident.io 的 SEV1-SEV4 不是 5:4 對應、是兩個獨立 schema。同一個事故在 PagerDuty 是 P2（高優先但非全面 outage）、進 incident.io 可能變 SEV2（部分服務影響）或 SEV1（依 incident.io custom severity 定義）。Phase 1 雙系統並行時 SRE 在 Slack 看到 SEV1 跑進 war room mode、PagerDuty 同 incident 是 P2 沒拉 stakeholder bridge — 同事故兩邊嚴重度不同步、回應節奏錯亂。修法是事先寫死 mapping table（PD P1 → IO SEV1、PD P2 → IO SEV2、不 case-by-case 判斷），並在 Phase 3 後讓 incident.io severity 變唯一 source of truth。</p>
<h3 id="3-schedule-layer-漏-holiday-override--restriction-layer">3. Schedule layer 漏 holiday override / restriction layer</h3>
<p>PagerDuty schedule 是 layer model — primary rotation（layer 1） + secondary rotation（layer 2） + holiday override（layer 3） + restriction（每層 time-of-day 限制）可以疊加。Export 出來只看 layer 1 通常會漏 holiday override 跟 restriction layer、incident.io schedule rule 是單一 rotation + override list、不 cover 多 layer 疊加。修法是 export 時用 PagerDuty API <code>/schedules/{id}</code> 的完整 layer + final_schedule 一起拉、用 incident.io schedule 的 override list 模擬 layer 疊加、複雜 schedule（例如 follow-the-sun + 4 region + holiday override）可能要拆成多個 incident.io schedule 用 escalation chain 串。</p>
<h3 id="4-slack-channel-過載">4. Slack channel 過載</h3>
<p>incident.io 預設每個 incident 開一個 channel。Phase 1 啟用後 SRE 一週收 50+ channel notification、即使 P3 / P4 也開 channel、Slack sidebar 被淹沒。修法是 incident type 設計時把低 severity（SEV3 / SEV4）改成 <em>don&rsquo;t auto-create channel</em> 或 <em>use shared low-severity channel</em>、只 SEV1 / SEV2 開獨立 channel。incident.io 有這個 configuration、但預設不開、要主動設定。</p>
<h3 id="5-retrospective-切換時歷史-learning-斷層">5. Retrospective 切換時歷史 learning 斷層</h3>
<p>從 Jeli / PagerDuty Postmortems 切到 incident.io retro 後、過去 2 年 postmortem 留在原系統、search 跨不到、新 retro template 跟舊的結構不同、learning review 的 trend analysis 斷層。修法是 Phase 4 前先 export 既有 postmortem 為 markdown 進 GitHub Wiki / Confluence 集中保存、incident.io retro 自動 export 到同位置、retro search 不依賴 vendor lock-in。</p>
<h2 id="schema-translation-主要工作量塊">Schema translation 主要工作量塊</h2>
<p>雖然 Type E 結構不以 schema translation 為主、但 translation 工作量塊在 Phase 2-3 仍佔多數時間：</p>
<table>
  <thead>
      <tr>
          <th>來源（PagerDuty）</th>
          <th>目標（incident.io）</th>
          <th>註</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Service</td>
          <td>Catalog entry</td>
          <td>增加 Slack channel / Linear project metadata</td>
      </tr>
      <tr>
          <td>Team</td>
          <td>Catalog team</td>
          <td>多對應 GitHub team / IAM group</td>
      </tr>
      <tr>
          <td>Escalation policy</td>
          <td>Escalation path</td>
          <td>比 PD 簡單、複雜 escalation 要拆</td>
      </tr>
      <tr>
          <td>Schedule（multi-layer）</td>
          <td>Schedule + override list</td>
          <td>不是 1:1、複雜 schedule 要拆多個</td>
      </tr>
      <tr>
          <td>Integration（webhook）</td>
          <td>Webhook endpoint</td>
          <td>全部 alert source 要重 wire</td>
      </tr>
      <tr>
          <td>Incident workflow</td>
          <td>Incident type + role</td>
          <td>重新設計、不直接翻譯</td>
      </tr>
      <tr>
          <td>Event Orchestration rule</td>
          <td>Workflows</td>
          <td>incident.io workflows 比 EO 簡單、複雜 routing 要外接</td>
      </tr>
      <tr>
          <td>AIOps / Process Automation</td>
          <td>（無對應）</td>
          <td>見 capability gap 段</td>
      </tr>
      <tr>
          <td>Postmortem / Jeli</td>
          <td>Post-incident flow</td>
          <td>template 重寫、歷史保存獨立</td>
      </tr>
  </tbody>
</table>
<h2 id="capability-gappagerduty-有但-incidentio-沒有">Capability gap：PagerDuty 有但 incident.io 沒有</h2>
<p>不是所有功能 incident.io 都有對應。Phase 3-4 推進前要先確認這些能力是否在用、是否願意捨棄或外接：</p>
<ul>
<li><strong>AIOps（intelligent grouping / noise reduction）</strong>：PagerDuty Enterprise tier 用 ML 自動 group alert、incident.io 沒對應、grouping 靠 alert source 端 deduplication key</li>
<li><strong>Process Automation（runbook automation）</strong>：PagerDuty 收購 Rundeck、提供 automated remediation step、incident.io 沒對應、要外接 Tines / n8n / 自製 Lambda</li>
<li><strong>Status Page 整合（PagerDuty 內建）</strong>：PagerDuty 提供 Status Page 模組、incident.io status page 是 separate product、定價跟 feature 不同</li>
<li><strong>Multi-region / 強合規（FedRAMP / IL5）</strong>：PagerDuty 在金融 / 政府 / 高合規 deploy 成熟度高、incident.io SOC 2 + ISO 27001 但 FedRAMP 還在追</li>
</ul>
<p>如果在用 AIOps + Process Automation 而且重要、不要做這個 migration、或保留 PagerDuty 作為 AIOps + Automation 後端、incident.io 處理 response coordination — Phase 1 永久 hybrid。</p>
<h2 id="容量與成本對照">容量與成本對照</h2>
<table>
  <thead>
      <tr>
          <th>項目</th>
          <th>PagerDuty</th>
          <th>incident.io</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>計費模式</td>
          <td>Per-user / month、tier-based（Pro / Business / Enterprise）</td>
          <td>Per-user / month、On-call 模組另計</td>
      </tr>
      <tr>
          <td>隱性容量上限</td>
          <td>API rate limit（10K / minute）</td>
          <td>Slack workspace seat 上限（IR participant ≤ workspace user）</td>
      </tr>
      <tr>
          <td>AIOps 加價</td>
          <td>Enterprise tier + AIOps add-on</td>
          <td>不適用</td>
      </tr>
      <tr>
          <td>Status page</td>
          <td>內建（Business tier+）</td>
          <td>獨立 product</td>
      </tr>
      <tr>
          <td>Process Auto</td>
          <td>Rundeck-based、separate pricing</td>
          <td>不適用</td>
      </tr>
  </tbody>
</table>
<p>實際成本對比需要 RFP — 50 人 SRE org 大致 PD Business + AIOps ~$30-40 / user / mo、incident.io Pro + On-call ~$25-35 / user / mo、cost 差距通常不是 migration 主因（是 paradigm fit + Slack-native）。</p>
<h2 id="何時不要做這個-migration">何時不要做這個 migration</h2>
<ul>
<li><strong>Slack 不是 IR ground truth</strong>：Discord / Teams primary 或 ticket system 為主的 org、incident.io Slack-first 設計無法落地</li>
<li><strong>AIOps + Process Automation 是核心能力</strong>：用了 PD AIOps 自動 group alert 跟 Rundeck 自動 remediation、且這條 chain 重要 — incident.io 沒對應</li>
<li><strong>規模 &lt; 20 SRE / 50 eng</strong>：incident.io 的 catalog + opinionated workflow 設計給中大型 org、小團隊 PagerDuty Lite 或 Grafana OnCall 已經夠用</li>
<li><strong>強合規場景（FedRAMP / IL5 / 金融 SOC 1 type II）</strong>：PagerDuty 合規成熟度高、incident.io 在追、合規團隊不會 sign-off</li>
<li><strong>不打算改變事故行為</strong>：如果 org 只是想換廠商但不想改變 <em>事故在 Slack 跑 lifecycle</em> 的工作模式、這條 migration 的價值丟一半、不如走 <a href="/blog/backend/08-incident-response/vendors/opsgenie/migrate-from-pagerduty/" data-link-title="PagerDuty → Opsgenie：Atlassian 全家桶整合 vs Opsgenie 2027 EOL 的 vendor consolidation 取捨" data-link-desc="PagerDuty → Opsgenie 是 Type A phased schema translation、但 Atlassian 已宣布 Opsgenie 2027-04 EOL — 這條 migration 只在 Atlassian-heavy org &#43; 明確 JSM unification roadmap 下成立、本質是 PD → Opsgenie → JSM Cloud 的雙 hop migration。本文走 6 維 audit（Schema Medium-High 其他 Low）、PagerDuty ↔ Opsgenie ↔ JSM field mapping 對照、5 production 踩雷（escalation step / Heartbeat 缺對應 / integration key dedup 重設 / schedule 時區 / Atlassian Identity SSO 整合）、何時直接走 PD → JSM 跳過 Opsgenie">PagerDuty → Opsgenie</a>（Type A schema translation、同 paradigm）</li>
</ul>
<h2 id="下一步路由">下一步路由</h2>
<ul>
<li>平行 batch：<a href="/blog/backend/08-incident-response/vendors/opsgenie/migrate-from-pagerduty/" data-link-title="PagerDuty → Opsgenie：Atlassian 全家桶整合 vs Opsgenie 2027 EOL 的 vendor consolidation 取捨" data-link-desc="PagerDuty → Opsgenie 是 Type A phased schema translation、但 Atlassian 已宣布 Opsgenie 2027-04 EOL — 這條 migration 只在 Atlassian-heavy org &#43; 明確 JSM unification roadmap 下成立、本質是 PD → Opsgenie → JSM Cloud 的雙 hop migration。本文走 6 維 audit（Schema Medium-High 其他 Low）、PagerDuty ↔ Opsgenie ↔ JSM field mapping 對照、5 production 踩雷（escalation step / Heartbeat 缺對應 / integration key dedup 重設 / schedule 時區 / Atlassian Identity SSO 整合）、何時直接走 PD → JSM 跳過 Opsgenie">PagerDuty → Opsgenie</a>（Type A、同 paradigm 換廠商）/ <a href="/blog/backend/08-incident-response/vendors/atlassian-statuspage/migrate-to-instatus/" data-link-title="Atlassian Statuspage → Instatus：status page 成本下降、但 compatibility audit 不能跳" data-link-desc="Atlassian Statuspage → Instatus 是 Type B drop-in migration、6 維 audit 全 Low；典型情境是從 Statuspage Business / Enterprise 降到 Instatus Pro / Business、但 savings 取決於 subscriber、SSO、audit 與 SLA report 需求。本文走 compatibility audit prefix（subscriber channel 完整度 / SAML SSO / audit log / metrics integration / SLA report / API parity）、4 階段 cutover（DNS TTL &#43; parallel run）、5 個 production 踩雷（SSO tier 選錯、metrics 來源整合斷、subscriber import format / SLA report 缺、custom CSS 不完全相容）、何時不要切（enterprise compliance / 強 Atlassian 整合）">Atlassian Statuspage → Instatus</a>（Type B drop-in）</li>
<li>同 batch Type E：<a href="/blog/backend/09-performance-capacity/vendors/k6/migrate-from-jmeter/" data-link-title="JMeter → k6：k6 不是 JMeter 的「script 版本」、是 VU model 取代 thread model" data-link-desc="JMeter → k6 是 Type E paradigm shift、不是把 .jmx XML 翻成 JavaScript — VU (virtual user) model 跟 thread group model 是兩種對「使用者行為」不同的建模方式。本文走 6 維 audit（Schema High / Paradigm High / Operational Medium）、釐清反向定義、4-phase partial migration（多數 org 停 Phase 2-3 hybrid）、5 production 踩雷（thread group 翻譯失真 / arrival rate vs concurrent VU 混淆 / protocol gap / 結果 schema 改 / CI integration 重做）、protocol gap（JDBC / JMS / LDAP 在 k6 沒原生對應）、何時不要切">JMeter → k6</a>（scripting paradigm shift）</li>
<li>上游：<a href="/blog/backend/08-incident-response/incident-workflow-automation-boundary/" data-link-title="8.21 Incident Workflow Automation Boundary" data-link-desc="定義哪些事故流程適合自動化，哪些決策需要保留人工確認">8.10 Incident Workflow Automation Boundary</a>（automation handoff）</li>
<li>下游：<a href="/blog/backend/08-incident-response/post-incident-review/" data-link-title="8.5 復盤與改進追蹤" data-link-desc="把 RCA 與 action items 轉成可驗證閉環">8.18 Post-Incident Review</a>（incident.io retrospective workflow）</li>
<li>vendor 對照：<a href="/blog/backend/08-incident-response/vendors/pagerduty/" data-link-title="PagerDuty" data-link-desc="On-call / alerting 主流 SaaS、IR 平台演化">PagerDuty</a> / <a href="/blog/backend/08-incident-response/vendors/incident-io/" data-link-title="incident.io" data-link-desc="Slack-native IR 平台、整合 paging / response / retro">incident.io</a></li>
<li>方法論：<a href="/blog/posts/migration-playbook-%E6%96%B9%E6%B3%95%E8%AB%96%E7%9A%84%E6%BC%94%E5%8C%96%E7%B4%80%E9%8C%84stage-0-variant-%E8%A6%8F%E5%8A%83%E6%8A%8A-collapse-%E7%8E%87%E5%BE%9E-60-%E9%99%8D%E5%88%B0-0/" data-link-title="Migration Playbook 方法論的演化紀錄：Stage 0 variant 規劃把 collapse 率從 60% 降到 0%" data-link-desc="跨 vendor migration playbook 需要獨立寫作方法論的依據，以及這套方法論從三輪 batch dogfood 中演化出來的驗證證據。">Migration Playbook Methodology</a>（Type E paradigm shift 結構說明）</li>
</ul>
]]></content:encoded></item></channel></rss>