← プロジェクト一覧へ
ビジネスサービス

監査ログサービス

12のマイクロサービスから発行されるプラットフォーム全体の監査証跡

ゼロから構築 · プラットフォーム全体のイベント契約を設計 · 2024年10月 — 2025年8月
Go go-zero gRPC Kafka MySQL/GORM pprof

概要

プラットフォーム上のすべての管理系書き込みは監査イベントを発行する。イベント契約とそれが依存する gRPC メタデータを設計し、共有パブリッシャーを書き直し、差分ユーティリティを作成し、コンシューマー側のサービスとその検索 API を構築した。

主な技術ポイント

01

オペレーター、IP、リクエストパス、モジュール/アクション、トレース ID、変更前後のスナップショットを運ぶ Kafka イベント契約

02

共有パブリッシャーは現在12のマイクロサービスから呼び出されている。JSON 差分ユーティリティは変更されたフィールドのみを読みやすいラベル付きで保存

03

コンシューマーが並列 gRPC 呼び出しで、各イベントにオペレーターと対象の詳細情報を付加

04

テナント単位の検索 API。プラットフォーム管理者の操作はテナントから見えないようにする

05

pprof で本番環境のメモリリークを発見:値コピーされた RPC クライアントがメッセージごとに新しい gRPC 接続を開いていた

コア実装

1

プラットフォーム契約としての監査

全サービスが同じ方法で使うトピック、メッセージスキーマ、gRPC メタデータキー。これにより、監査イベントは常に「誰が、どこから、どのトレースのもとで、何をしたか」を示せる。

Why: 監査証跡は全チームが一貫して記録して初めて役に立つ。共有の契約とパブリッシャーによって、それがデフォルトになる。

Result: 12サービスから発行。

2

メモリリーク調査

負荷下でメモリが増え続けていた。pprof を公開してヒーププロファイルを読み、RPC クライアントのラッパーが値渡しされていたため、遅延生成された接続がキャッシュされていないことを突き止めた。修正はポインタレシーバーへの変更、クライアントの事前初期化、ホットパスからの大きなスナップショットフィールドの除去。

Why: 一時的な定期 GC は症状を隠していただけで、原因を見つけたのはプロファイリングだった。