ログ時間集計を再利用検知器化するときは近似検算を排他パーティション不変式へ昇格させる
設計判断
ログ解析
計測
知識
判断
イベントログの時間内訳集計を、アドホックな分析スクリプトから再利用可能な決定論ツールへ固めるときは、「分類合計が壁時計とほぼ一致することを確認する」という近似検算のままにせず、排他的パーティションの厳密不変式へ昇格させる。アドホック分析なら誤差は人が吸収できるが、他の工程が出力値を機械的に転記・集計する検知器では、誤差の出どころ(二重計上・未分類区間・重複帰属)が仕様の穴として残り続けるため。
設計基準
- 全時間区間をちょうど1つのバケツへ割り当てる排他分類にし、「内訳合計 = 実働時間」「実働 + 応答待ち = 壁時計」の2本を常時成立の不変式として全テスト検体で assert する。近似一致の検算値(ログ内の所要時間記録)は不変式とは別の照合フィールドとして残し、乖離率を採用可否の閾値に使う
- 不変式を成立させるには「どの規則にも該当しない区間」の受け皿バケツ(未帰属)が必須。timestamp 欠落・未知イベントの隣接区間・状態機械の対象外区間をここへ落とし、黙って他バケツへ混ぜない
- 同一区間に複数の未完了操作が重なる場合(並行ツール呼び出し等)は帰属の優先順位を明文化し、区間ごとに1回だけ割り当てる。優先順位を決めないと排他性が実装依存になる
- 補助的な実測値(プロトコル側が報告する所要時間など)がパーティションと二重計上の関係になるなら、内訳へ算入せず別掲フィールドにする
- 既知イベント種別は確定列挙し(ネストした discriminator も含めた2層)、列挙外は品質指標(未知件数)へ計上して採用判定を落とす方向に倒す。列挙の拡張は仕様改訂として明示的に行う
- 実行中に追記されるログを測る場合は、起動時のファイルサイズで読み取り終端をバイト固定する。固定しないと測定コマンド自身のイベントが混入し、cutoff の定義が実装依存になる。固定値を出力へ含めると検証可能になる
検証
失敗クラスごとに独立検体を置く: 分類誤り・境界イベント欠落・二重計上・未知種別の黙殺・追記混入。全検体で不変式2本を共通 assert にすると、個別期待値が正しくても排他性が壊れている実装を横断的に検出できる。