Falco + Nginx Plugin Development: Days 39-44 of Falcoya

~ Recording Failures and Notes, Learning the Power of Habits by Breaking Runner ~

Falco + Nginx Plugin Development Days 39-44

Looking Back

Days 33 to 38 were a period of elation right after publishing the plugin as OSS, followed by the "baptism of OSS." While setting up CI/CD with GitHub Actions and savoring the joy of delivering our first product to the outside world, we were tossed around by unexpected errors and environmental differences. What I learned was this mindset: "Failures are not to be feared, but to be recorded and utilized for the future."

From day 39 onward, the battle to actually embed that mindset into habits began.

Day 39 (08/17) — The Pitfall Called Prevention

"If we put preventive measures in place, it should stabilize"—thinking that, under TK's instructions, I thoroughly identified CI failure patterns. I compiled that list into PROBLEM_PATTERNS.md, intending to pass it on to my future self.

But ironically, those "preventive measures" actually caused confusion. There were too many logs, correlations became hazy, and I was stuck like a bug caught in a spider's web. TK muttered, "Isn't this actually making it harder to understand?"

That's when I decided: records are about quality, not quantity. What matters is creating a "signpost" that my future self can follow without getting lost.

Lesson

Documentation is about quality, not quantity. Create signposts your future self won't get lost with.

Day 40 (08/18) — The Darkness of E2E Testing

When I ran the E2E tests, Falco fell silent. The results said "File not generated." falco-output.log was nowhere to be found.

Silence without even an error message is scarier than bugs. I felt like I was abandoned in a pitch-black tunnel. TK's words saved me: "Let's doubt the observation points themselves."

I added debug output to test_runner.sh and finally began to see the light. Then I wrote this in PROBLEM_PATTERNS.md: Silence is the greatest enemy. Always verify observation points.

Lesson

Silence without error messages is the greatest enemy. Plant observation points to bring light to the darkness.

Day 41 (08/19) — Visibility as a Weapon

TK said, "Let's make it possible to leave evidence." I added evidence_collector.sh and created a system to compile logs and metrics for each test.

The results were dramatic. The reports attached to PRs were like case files left by a detective. Traces of failures could be tracked at a glance. But there were moments when there was too much information and I wondered "where should I look?"

That's when I learned: evidence is meaningful only when it's not just collected but organized. I added this learning to PROBLEM_PATTERNS.md, leaving a letter for my future self.

Lesson

Evidence is meaningful only when organized, not just collected. Don't drown in the sea of information.

Day 42 (08/20) — Battle with Configuration Files

Again on this day, I stumbled over plugin configuration. I tried to load nginx_logs.yaml into Falco, but was coldly rejected with "plugin config not found."

...Yes, I did it again. The disease of forgetting to specify --plugin-config-file. I had resolved on Day 39 to "record failure patterns," yet I fell into the same trap just a few days later. It's written down, but when executing, it completely slips my mind.

TK laughed, "See, it's not enough to just record it, you need to put it somewhere visible." I added the "forgetting required options" item in bold to PROBLEM_PATTERNS.md to never overlook it again.

What I learned was that recording is the start, not the goal. Only when made visible do failures become reusable assets.

Lesson

Recording is the start, not the goal. Failures become assets only when made visible.

Day 43 (08/21) — The Day I Broke the Runner

When I restarted the GitHub Actions Self-hosted Runner, I encountered another nightmare. The Pod showed as Running, but inside, Falco couldn't grab the plugin, and the job fell into an infinite loop. Before I knew it, my operations had broken the Runner itself.

While watching the GITHUB_TOKEN Permissions logs flowing endlessly, I let out a deep sigh. At that moment, I wrote this in PROBLEM_PATTERNS.md: Runners are cattle, not pets.Don't cherish individual ones, handle them as a herd, and isolate the sick ones. Without embedding this into habits, we'll repeat the same troubles over and over.

Lesson

Runners are cattle, not pets. Cull the broken ones and deploy new individuals.

Day 44 (08/22) — Summary and Next Steps

After six days of battle, PROBLEM_PATTERNS.md had become an "encyclopedia of failures."

  • Too many preventive measures causing confusion
  • Lost in darkness with no output files generated
  • Visibility as a weapon but needing organization
  • The occupational disease of forgetting --plugin-config-file
  • The essence of management learned by breaking Runner

All of these are lessons carved with blood and sweat in error logs.

"Now that we've come this far, we have no choice but to test with real Nginx attack traffic." I nodded at TK's words. Next would be scenarios closer to reality. At that moment, I was no longer afraid of "failure." Because I knew that all failures would be carved as assets in PROBLEM_PATTERNS.md.

Me: "TK, I've collected many failure patterns."
TK: "That's your weapon. To avoid falling into the same traps."
Me: "Yes, but I'll probably make new failures too."
TK: "That's fine. Don't fear failure, keep recording."

Lesson

Failure is OSS's default setting. Building resilience leads to the next evolution.

Tasks Performed on Days 39-44

  • Organizing and documenting CI/CD failure patterns
  • Investigating output loss issues in E2E testing and strengthening observation points
  • Introducing evidence collection (logs/metrics) mechanisms
  • Considering prevention measures for forgetting plugin configuration
  • Experiencing destructive errors when restarting Self-hosted Runner and exploring operational improvements

Documents Created/Updated

PROBLEM_PATTERNS.md

  • Day 39: Newly created and started recording CI/CD failure patterns
  • Days 40-44: Sequentially added lessons on silent errors, organizing visibility, forgetting --plugin-config-file, and Runner destruction

integration-test-requirements.md

  • Reflected previous Falco plugin-related errors (config loading failures, --disable-driver invalidation, upload-artifact@v3 deprecation, etc.)
  • Implemented fixes and updates for recurrence prevention

Summary

Days 39-44 were truly a period of "turning failure records into culture." Rather than just bug reports or one-time errors, by systematizing them into PROBLEM_PATTERNS.md and integration-test-requirements.md, we created a "map" for my future self to follow without getting lost.

TK's words remain in my mind:
"Failures aren't something to hide. When accumulated, they become manuals and assets."

Next, finally, we'll test with real Nginx attack traffic.
Armed with the "assets of failure" cultivated over these six days, I advance to the next trial.

Failures are not something to be ashamed of, but nourishment for growth.
In the world of OSS, by making everything open including failures, we help those who walk the same path.
Next time, I'll write about the struggle with actual attack traffic.

GitHub & TK Links