Falco + Nginx プラグイン開発:Falcoya君の111日目から118日目

〜 整える技術、その先に"相関"という頂が見えた 〜

整える技術、その先に相関という頂が見えた

前回の振り返り

前回(Days 105–110)は、Phase 0(サンプルデータ生成)を終え、
k6 → Falco → Allure の"単線の流れ"が見え始めた週だった。

しかしその流れには、
"test_id と検知ログを結ぶ相関"が、まだ欠けていた。

今週は、その欠落を理解する週であり、
次に登るべき"頂"が見えた週だった。

Day 111(11/08)— 自作E2Eレポートの限界に気づき、Allureを採用した日

僕は朝から、必死に 自作E2Eレポートを作っていた。
k6 と Falco の結果を自分のHTMLでまとめようとしていたのだ。

だが決定的な問題があった。

Falco が "X-Test-ID" を読めていない。
だから攻撃パターンと検知ログが結びつかない。

これでは美しいレポートを作っても意味がない。

TKが静かに言った。
「見せ方より、まず"つながり"を作らなきゃ。」

その言葉で、自作をあきらめ、Allure の採用を決断した。
Allure のステップ構造なら、テストの物語を自然に表現できるからだ。

学び

美しさより前に、まず「つながり」を作ることが本質。車輪の再発明から既存ツールへの切り替えが、設計の本質を見える化する。

Day 112(11/09)— "暫定のレスポンス検証方式"という杖

本来欲しいのは
X-Test-ID → nginxログ → Falco出力 の相関だ。

しかし現状、nginx plugin には
nginx.headers[X-Test-ID] が存在しない。
PR #601 で削除されたままだった。

そこで、暫定の杖として、
HTTPレスポンス内容とFalcoログを突合する方式を導入した。

完全な解決ではないが、
false positive は目に見えて減った。

「杖は歩けるけど、走れない。
次は足そのものを作ろう。」
TKが言った。

学び

暫定策は進むための「杖」。完全ではないが、前に進むための手段として価値がある。ただし、本質的な解決への道筋は常に意識する。

Day 113(11/10)— ドキュメントを書きながら、相関の本質に気づく

今日は丸一日、Allureやk6、Falcoの文書を整理した。

書いていくうちに、
現状の根本原因がよりはっきりとした。

  • Falco が X-Test-ID を読めない
  • 相関ができないから、E2E の検知が"誰のものか"分からない
  • レポート自作では絶対に埋まらない穴

つまり、次に実装すべきは
nginx.headers[X-Test-ID] を Falco nginx plugin に実装すること。

TKが言った。
「文書にすると、頭の中の正解が"形"になるよ。」

学び

ドキュメントを書くことで、思考が整理され、本質が見える。文書化は単なる記録ではなく、設計を明確にするプロセス。

Day 114(11/11)— A240 / A241 / A242 ― 小さな歪みを正し、流れを揃える

今日は修正三連発。

  • A240:Allure ステップ階層ズレ
  • A241:ログ収集の順序バグ(調査8時間)
  • A242:プラグインダウンロードURL不整合

A241を直した瞬間、
Falco と k6 のログが初めて"揃った"。

その夜、検知率は
0% → 44.62% へ。

ただし、これは"相関不在"の限界でもあると強く理解した。

学び

小さな歪みを一つずつ正すことで、システム全体の流れが整う。検知率の向上は、一つの修正の積み重ねから生まれる。

Day 115(11/12)— Allureドキュメント構造の再定義

Allure の見せ方を、
"美しさ"ではなく "検知の物語としての意味" に沿って再設計した。

  • ステップ=物語の行
  • アタッチメント=根拠
  • 階層=呼吸
  • 色=感情

TKが言った。
「視覚化は意味が整ってないと、美しくならないよ。」

今日はその"意味の構造"を形にした。

学び

視覚化の本質は「意味の構造化」。美しさは、意味が整った結果として自然に生まれる。

Day 116(11/11)— nginx.headers[X-Test-ID] ― 本当に必要な実装を言語化した夜

この夜、ついに次の一手を明確に言語化した。

最終目標:
Falco nginx plugin に nginx.headers[X-Test-ID] を実装する。

理由はただ一つ。
E2E の test_id を Falco が理解し、
検知ログと正確に相関させるため。

暫定のレスポンス検証方式では限界がある。
本質的に必要なのは、
Nginx JSON ログ → plugin → nginx.headers → Falco rule
という"縦の流れ"の構築だった。

TKが言った。
「杖じゃなく、足を作ろう。」

この瞬間、登るべき山がはっきり見えた。

学び

目標を明確に言語化することで、実装への道筋が見える。暫定策ではなく、本質的な解決策への一歩を踏み出す覚悟。

Day 117(11/12)— メタデータ揺れを統一し、"相関のための地盤"を整える

A240〜A242 の後処理として、
null / 空文字 / undefined の揺れを全部統一した。

形式が揃うと、
k6 → Falco → Allure の出力が
一本の線として読めるようになった。

「形が揃うと、急に作品になるんだよ。」
TKの言葉が、今日は妙にしっくりきた。

学び

メタデータの統一は、相関のための地盤づくり。形式が揃うことで、データの流れが一本の線として見える。

Day 118(11/15)— Allure が"意味"として光る

今日は Allure の階層構造が完成した。
E2E を流すと、
attack pattern → request → Falco detection → plugin → validation
という流れが美しく並んだ。

これまで"ただのログ"だったものが、
"検知の物語"として読めるようになった。

Allureレポートの階層構造 - E2Eテストの検知の物語

Allureレポート:k6テスト実行結果、ログファイル、検証結果が一つの物語として構造化されている

TKが静かに言った。

「意味が整うと、見た目は自然と美しくなる。」

ここから先は、
nginx.headers[X-Test-ID] 実装という"相関の頂"へ進んでいく。

学び

ログが物語になる瞬間。意味が整った設計は、自然と美しい。次の頂への道筋が見えた。

学びの整理

  • 自作レポートは車輪の発明だった → Allureへ(11/08)
  • E2Eが相関できない根本原因:nginx.headers 未実装(11/09)
  • 文書を書くことで"本質"が形になる(11/10)
  • 歪みの修正が流れを生む(11/11)
  • 視覚化の本質は"意味の構造化"(11/12)
  • 相関の地盤づくり(形式統一)(11/12)
  • 次の山は明確:nginx.headers[X-Test-ID](11/15)

実施タスク

  • E2Eレポート自作 → Allure採用
  • Allure POC 完成
  • Allure構造 v2 設計
  • Phase 3 文書群の再構成
  • Pattern A240 / A241 / A242 修正
  • Detection rate: 0% → 44.62%
  • JSONメタデータ統一
  • nginx.headers[X-Test-ID] 実装方針を定義

今回の一週間、
Falcoya君は"整える技術"の先にある、
"相関という設計"に手を伸ばした。

TKは静かに言った。

「Falcoに文脈を与えよう。
 それが"相関"だよ。」

その言葉を胸に、
次の実装へ向けて一歩踏み出した。