<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>Vector - Tag - arleo.eu</title><link>https://www.arleo.eu/en/tags/vector/</link><description>Vector - Tag - arleo.eu</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Wed, 15 Apr 2026 19:02:00 +0200</lastBuildDate><atom:link href="https://www.arleo.eu/en/tags/vector/" rel="self" type="application/rss+xml"/><item><title>CrowdSec Log Pipeline with Vector: Filtering Noise and Capturing Real Bans</title><link>https://www.arleo.eu/en/posts/crowdsec-vector-pipeline/</link><pubDate>Wed, 15 Apr 2026 19:02:00 +0200</pubDate><author>Jmr</author><guid>https://www.arleo.eu/en/posts/crowdsec-vector-pipeline/</guid><description><![CDATA[<div class="featured-image">
                <img src="/images/crowdsec-vector-pipeline-featured.jpg" referrerpolicy="no-referrer">
            </div><h2 id="-in-short">⚡ In short</h2>
<p>The initial Vector pipeline was flooding BetterStack with ~500 events/24h, of which 434 were CAPI pulls with no local monitoring value. This work reconfigures the Vector filter to keep only high-value bans (<code>cscli</code>) and fixes a major blind spot: actual nginx-lua bouncer bans were not appearing anywhere in BetterStack.</p>
<h2 id="-why">🧠 Why</h2>
<p>This homelab&rsquo;s security stack relies on three components working together:</p>
<ul>
<li><strong>nginx</strong> with the CrowdSec lua bouncer (<code>lua-resty-crowdsec</code>) for real-time request blocking</li>
<li><strong>CrowdSec</strong> for threat detection and ban decision management</li>
<li><strong>Vector</strong> centralizing logs to BetterStack for monitoring</li>
</ul>
<p>After setting up the initial pipeline, two problems quickly became apparent. First, the signal was drowned in noise: out of 500 events/24h, 434 came from the hourly community CAPI pull and 66 from third-party lists — neither represents a threat detected on <em>this</em> infrastructure. Second, actual lua bouncer bans (real-time blocks in nginx) were not appearing anywhere in BetterStack, creating a blind spot on real security activity.</p>]]></description></item><item><title>Normalizing nginx and CrowdSec Logs in BetterStack with Vector</title><link>https://www.arleo.eu/en/posts/vector-logs-harmonisation-betterstack/</link><pubDate>Fri, 10 Apr 2026 21:04:00 +0200</pubDate><author>Jmr</author><guid>https://www.arleo.eu/en/posts/vector-logs-harmonisation-betterstack/</guid><description><![CDATA[<div class="featured-image">
                <img src="/images/vector-logs-harmonisation-betterstack-featured.jpg" referrerpolicy="no-referrer">
            </div><h2 id="-in-short">⚡ In short</h2>
<p>Two problems coexisted in BetterStack: <code>mcp-oauth.access.log</code> logs arrived as unreadable raw JSON, and CrowdSec logs produced visual duplicates. This work normalizes all logs so they display as structured clickable tags, with correct timestamps and without parasitic fields.</p>
<h2 id="-why">🧠 Why</h2>
<p>BetterStack displays logs as highlighted clickable tags in the Live Tail when JSON fields are properly structured. Before this work, observation was degraded on two fronts:</p>
<ul>
<li><code>mcp-oauth.access.log</code> logs arrived as unreadable raw JSON (custom format incompatible with Vector&rsquo;s nginx parser) — fields <code>nginx.client</code>, <code>nginx.path</code>, <code>nginx.status</code> were not extracted</li>
<li>CrowdSec and CF WAF logs arrived as plain text with duplicates (<code>Ban ban | ... | Ban ban</code>)</li>
</ul>
<p>The goal was to normalize all logs in BetterStack to display like standard nginx logs:</p>]]></description></item></channel></rss>