← 返回項目列表
業務服務

稽核日誌服務

由 12 個微服務發布的全平台稽核軌跡

從零打造 · 設計全平台事件契約 · 2024.10 — 2025.08
Go go-zero gRPC Kafka MySQL/GORM pprof

項目概述

平台上每一次管理端寫入都會產生一筆稽核事件。我設計了事件契約及其仰賴的 gRPC 中繼資料,重寫共用的發布元件,撰寫 diff 工具,並打造消費服務與其查詢 API。

核心技術亮點

01

Kafka 事件契約,攜帶操作者、IP、請求路徑、模組/動作與 trace ID,以及變更前後快照

02

共用發布元件目前由 12 個微服務呼叫;JSON diff 工具只儲存有變動的欄位,並附上易讀的標籤

03

消費者透過平行 gRPC 呼叫,為每筆事件補上操作者與操作對象的詳細資訊

04

以租戶為範圍的查詢 API,對租戶隱藏平台管理員的操作

05

以 pprof 找出正式環境的記憶體洩漏:以值複製的 RPC 用戶端每處理一則訊息就開啟一條新的 gRPC 連線

核心實現

1

稽核即平台契約

一個 Topic、一套訊息 schema 與一組 gRPC 中繼資料 key,所有服務都以相同方式使用,因此每筆稽核事件都能說明誰、從哪裡、在哪條 trace 下做了什麼。

Why: 唯有每個團隊一致地記錄,稽核軌跡才有價值;共用的契約與發布元件讓這成為預設行為。

Result: 已由 12 個服務發布。

2

記憶體洩漏調查

負載下記憶體持續上升。我開放 pprof、分析 heap profile,發現 RPC 用戶端包裝以值傳遞,導致其延遲建立的連線從未被快取。修正方式是改用指標接收者、提前初始化用戶端,並將大型快照欄位移出熱路徑。

Why: 暫時性的定期 GC 掩蓋了症狀;效能分析才找到根本原因。