<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>FlowG Blog</title>
        <link>https://flowg.cloud/blog</link>
        <description>FlowG Blog</description>
        <lastBuildDate>Thu, 07 May 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <item>
            <title><![CDATA[VRL Log Splitting]]></title>
            <link>https://flowg.cloud/blog/vrl-log-splitting</link>
            <guid>https://flowg.cloud/blog/vrl-log-splitting</guid>
            <pubDate>Thu, 07 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[FlowG pipelines become more powerful with the new v0.55.0 release]]></description>
            <content:encoded><![CDATA[<p>🎉<!-- -->
<strong><a href="https://github.com/link-society/flowg/releases/tag/v0.55.0" target="_blank" rel="noopener noreferrer" class="">FlowG v0.55.0</a></strong>
has been released, and with it a new shiny feature: <strong>VRL Log Splitting</strong>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="before-one-input-one-output">Before: One input, one output<a href="https://flowg.cloud/blog/vrl-log-splitting#before-one-input-one-output" class="hash-link" aria-label="Direct link to Before: One input, one output" title="Direct link to Before: One input, one output" translate="no">​</a></h2>
<p>Until now, a transformer would take one log record as input and return one log
record as output. That works well for parsing, enriching, or reshaping logs.</p>
<p>But real logs are not always that simple.</p>
<p>Sometimes one incoming log line actually contains several events (like in
OpenTelemetry when batching multiple logs). Sometimes, we want to send different
information from a single log to different services (metrics to a timeserie
database, user information to an audit tool, ...).</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="after-one-input-many-outputs">After: One input, many outputs<a href="https://flowg.cloud/blog/vrl-log-splitting#after-one-input-many-outputs" class="hash-link" aria-label="Direct link to After: One input, many outputs" title="Direct link to After: One input, many outputs" translate="no">​</a></h2>
<p>With this release, a <a href="https://flowg.cloud/docs/user/guides/transformers" target="_blank" rel="noopener noreferrer" class="">transformer</a>
can return an array. Each item in that array becomes its own log record.</p>
<p>For example:</p>
<div class="language-vrl codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#272822;--prism-color:#F8F8F2"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-vrl codeBlock_bY9V thin-scrollbar" style="background-color:#272822;color:#F8F8F2"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain">. = [</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  1,</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  2,</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  "hello",</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  { "foo": { "bar": "baz" } }</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">]</span><br></div></code></pre></div></div>
<p>The above script would produce the following logs:</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#272822;--prism-color:#F8F8F2"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="background-color:#272822;color:#F8F8F2"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token punctuation" style="color:#F8F8F2">{</span><span class="token property" style="color:#F92672">"value"</span><span class="token operator" style="color:#F8F8F2">:</span><span class="token plain"> </span><span class="token string" style="color:#A6E22E">"1"</span><span class="token punctuation" style="color:#F8F8F2">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:#F8F8F2">{</span><span class="token property" style="color:#F92672">"value"</span><span class="token operator" style="color:#F8F8F2">:</span><span class="token plain"> </span><span class="token string" style="color:#A6E22E">"2"</span><span class="token punctuation" style="color:#F8F8F2">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:#F8F8F2">{</span><span class="token property" style="color:#F92672">"value"</span><span class="token operator" style="color:#F8F8F2">:</span><span class="token plain"> </span><span class="token string" style="color:#A6E22E">"hello"</span><span class="token punctuation" style="color:#F8F8F2">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:#F8F8F2">{</span><span class="token property" style="color:#F92672">"foo.bar"</span><span class="token operator" style="color:#F8F8F2">:</span><span class="token plain"> </span><span class="token string" style="color:#A6E22E">"baz"</span><span class="token punctuation" style="color:#F8F8F2">}</span><br></div></code></pre></div></div>
<blockquote>
<p><strong>NB:</strong> All data types are normalized and flattened to fit the datamodel of
FlowG.</p>
</blockquote>
<p>Each generated log is passed to the next nodes in the pipeline.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="simplicity-as-a-consequence">Simplicity as a consequence<a href="https://flowg.cloud/blog/vrl-log-splitting#simplicity-as-a-consequence" class="hash-link" aria-label="Direct link to Simplicity as a consequence" title="Direct link to Simplicity as a consequence" translate="no">​</a></h2>
<p>This feature makes pipelines easier to design. Instead of forcing every
downstream node to understand a large nested payload, you can split the payload
early and let the rest of the pipeline work on simpler records.</p>
<p>As a result:</p>
<ul>
<li class="">filters can operate on one event at a time</li>
<li class="">routing rules become easier to write</li>
<li class="">storage output is more predictable</li>
<li class="">forwarding to third-party systems becomes more natural</li>
</ul>
<p>The pipeline no longer has to carry a batch-shaped record when what you really
want is a stream of individual events.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="a-foundational-change-for-the-future">A foundational change for the future<a href="https://flowg.cloud/blog/vrl-log-splitting#a-foundational-change-for-the-future" class="hash-link" aria-label="Direct link to A foundational change for the future" title="Direct link to A foundational change for the future" translate="no">​</a></h2>
<p>On the technical side of things, this feature introduce some foundational
changes to how VRL programs are called by FlowG.</p>
<p>As a reminder, FlrowG is implemented in <strong>Go</strong>, but the VRL library is
implemented in <strong>Rust</strong>. To make both talk to each other, it requires the
<strong>C FFI</strong>.</p>
<p>Before the <em>v0.55.0</em> release, the communication went like this:</p>
<ul>
<li class="">convert a Go <code>map[string]string</code> into a C <code>hmap</code> (homemade data structure),
lots of allocations done to copy the data</li>
<li class="">convert the C <code>hmap</code> to a Rust <code>HashMap&lt;String, String&gt;</code>, lots of allocations
done to copy the data (again)</li>
<li class="">convert the <code>HashMap&lt;String, String&gt;</code> to a <code>vrl::value::ObjectMap</code> (why the
<code>HashMap</code> intermediate step? because I did not think it through) wrapped in a
<code>vrl::value::Value</code> (the input for a VRL program)</li>
<li class="">convert and flatten the resulting <code>vrl::value::Value</code> of the VRL program to
a <code>HashMap&lt;String, String&gt;</code> (more allocations, more copies)</li>
<li class="">convert the <code>HashMap&lt;String, String&gt;</code> to a C <code>hmap</code> (here, we actually
<strong>move</strong> the data! to be then freed by Golang's allocator, which in
retrospective might not be a good idea)</li>
<li class="">convert the C <code>hmap</code> to a Go <code>map[string]string</code> (more allocations, more
copies)</li>
</ul>
<p>Not only there are way more allocations and copies than needed, but there is a
dubious memory ownership model, and a not very flexible API.</p>
<p>In the future, <a href="https://github.com/link-society/flowg/discussions/595" target="_blank" rel="noopener noreferrer" class="">we might want to support more than just logs</a>,
which means the actual inputs to the VRL program might evolve.</p>
<p>That's when I noticed, the <code>vrl::value::Value</code> is actually (de)serializable
using Rust's great library <a href="https://serde.rs/" target="_blank" rel="noopener noreferrer" class="">serde</a>.</p>
<p>If we use <a href="https://msgpack.org/" target="_blank" rel="noopener noreferrer" class="">MessagePack</a> to (de)serialize our events and
send through the C FFI boundaries only a byte array, this might simplify
everything:</p>
<ul>
<li class="">avoiding unnecessary allocations and copies</li>
<li class="">make the VRL program runner completly agnostic of the data shape</li>
<li class="">cleaner memory ownership model</li>
</ul>
<p>The flow becomes:</p>
<ul>
<li class="">serialize the Go <code>map[string]string</code> to a <code>[]byte</code> buffer (the buffer is
cached to avoid allocating it for every log)</li>
<li class="">convert the Go <code>[]byte</code> buffer to a C <code>uint8_t*</code> pointer and a <code>size_t</code>
length (no copy needed, memory is owned by Go)</li>
<li class="">convert the pointer and length to a Rust <code>&amp;[u8]</code> (no copy needed, memory
is still owned by Go)</li>
<li class="">deserialize the <code>&amp;[u8]</code> directly to a <code>vrl::value::Value</code> (allocations and
copies unavoidable here)</li>
<li class="">call the VRL program</li>
<li class="">serialize the resulting <code>vrl::value::Value</code> to a <code>Vec&lt;u8&gt;</code> buffer (the buffer
is cached to avoid allocating it for every log)</li>
<li class="">convert the <code>Vec&lt;u8&gt;</code> buffer to a C <code>uint8_t*</code> pointer and a <code>size_t</code> length
(again, no copy needed, memory is owned by Rust)</li>
<li class="">convert the C pointer and length to a non owning Go <code>[]byte</code></li>
<li class="">deserialize the <code>[]byte</code> to <code>any</code>, convert and flatten to <code>map[string]string</code>
(allocations and copies unavoidable here)</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="conclusion">Conclusion<a href="https://flowg.cloud/blog/vrl-log-splitting#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>That's all folks! Conclusions are hard to write, so stay tuned for more content.</p>
<p style="text-align:right"></p><p><code>\_o&lt; {quack}</code></p><p></p>]]></content:encoded>
            <author>david.delassus@link-society.com (David Delassus)</author>
            <category>release</category>
            <category>vrl</category>
        </item>
        <item>
            <title><![CDATA[Road to 1.0]]></title>
            <link>https://flowg.cloud/blog/road-to-stable</link>
            <guid>https://flowg.cloud/blog/road-to-stable</guid>
            <pubDate>Wed, 01 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[The Minimum Viable Product is done, we're now working towards 1.0]]></description>
            <content:encoded><![CDATA[<p>🎉<!-- -->
<strong><a href="https://github.com/link-society/flowg/releases/tag/v0.54.0" target="_blank" rel="noopener noreferrer" class="">FlowG v0.54.0</a></strong>
has been released, finalizing the <a href="https://github.com/link-society/flowg/milestone/2" target="_blank" rel="noopener noreferrer" class="">MVP</a>
milestone of our roadmap.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="minimum-viable-product">Minimum Viable Product<a href="https://flowg.cloud/blog/road-to-stable#minimum-viable-product" class="hash-link" aria-label="Direct link to Minimum Viable Product" title="Direct link to Minimum Viable Product" translate="no">​</a></h2>
<p>For the MVP, we wanted to have at least the following features:</p>
<ul>
<li class="">ability to ingest and store logs</li>
<li class="">interoperability with many third party services, done via
<a href="https://flowg.cloud/docs/technical/forwarders" target="_blank" rel="noopener noreferrer" class="">Forwarders</a></li>
<li class="">basis of clustering with the most common cluster formation strategies</li>
</ul>
<p>After months of work, this is now done. Special thanks to our main contributors,
without who we would not be here today:</p>
<ul>
<li class=""><a href="https://github.com/glooopsies" target="_blank" rel="noopener noreferrer" class="">@glooopsies</a></li>
<li class=""><a href="https://github.com/Minnerlas" target="_blank" rel="noopener noreferrer" class="">@Minnerlas</a></li>
<li class=""><a href="https://github.com/atpugtihsrah" target="_blank" rel="noopener noreferrer" class="">@atpugtihsrah</a></li>
<li class=""><a href="https://github.com/n4vxn" target="_blank" rel="noopener noreferrer" class="">@n4vxn</a></li>
</ul>
<p><strong>FlowG</strong> has all you need to make sense of the logs of your production
environments, and we're quite active on the
<a href="https://github.com/link-society/flowg/issues" target="_blank" rel="noopener noreferrer" class="">bug tracker</a>, so don't hesitate
to ask any question, or report eventual problems.</p>
<p>There is still a lot of work to be done, and it's all going towards the <strong>1.0</strong>,
first "stable" version.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="road-to-10">Road to 1.0<a href="https://flowg.cloud/blog/road-to-stable#road-to-10" class="hash-link" aria-label="Direct link to Road to 1.0" title="Direct link to Road to 1.0" translate="no">​</a></h2>
<p>What we call "stable" here means that the API will be locked down, no breaking
change guaranteed.</p>
<p>We have 2 big projects for this, and probably a few more down the line that are
not planned yet, or not even fleshed out yet:</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="frontend-redesign">Frontend Redesign<a href="https://flowg.cloud/blog/road-to-stable#frontend-redesign" class="hash-link" aria-label="Direct link to Frontend Redesign" title="Direct link to Frontend Redesign" translate="no">​</a></h3>
<p>Historically, the frontend was made with <a href="https://templ.guide/" target="_blank" rel="noopener noreferrer" class="">Templ</a>,
<a href="https://htmx.org/" target="_blank" rel="noopener noreferrer" class="">HTMX</a>, and <a href="https://tailwindcss.com/" target="_blank" rel="noopener noreferrer" class="">Tailwind</a>. Due to the
difficulties of handling the amount of client-state we had, and keeping the API
and UI features in sync, we decided to migrate to a <a href="https://react.dev/" target="_blank" rel="noopener noreferrer" class="">React</a>
SPA with <a href="https://mui.com/" target="_blank" rel="noopener noreferrer" class="">React MUI</a>.</p>
<p>Unfortunately, lots of Tailwind code remained, and the result is a mix of 2
conflicting design systems, leading to some visual glitches and inconsistencies
that are hard to debug and/or fix.</p>
<p>A proper redesign is waranted:</p>
<ul>
<li class="">removing Tailwind and fully adopting MUI</li>
<li class="">reorganizing the code to be more consistent and following best practices</li>
<li class="">documenting the architecture to facilitate onboarding new contributors</li>
</ul>
<p>Over the next few months, this work is gonna be done by
<a href="https://github.com/coyote2190" target="_blank" rel="noopener noreferrer" class="">@coyote2190</a>, our most recent contributor.
Special thanks to him as well!</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="replication">Replication<a href="https://flowg.cloud/blog/road-to-stable#replication" class="hash-link" aria-label="Direct link to Replication" title="Direct link to Replication" translate="no">​</a></h3>
<p>We currently have an experimental implementation of the replication layer,
allowing <strong>FlowG</strong> to be a highly available service.</p>
<p>This implementation is buggy, costly in terms of performance, and wrong on many
levels.</p>
<p>A complete redesign is also planned for the next few months. We'll keep using
the <a href="https://en.wikipedia.org/wiki/SWIM_Protocol" target="_blank" rel="noopener noreferrer" class="">SWIM Protocol</a>, via
<a href="https://github.com/hashicorp/memberlist" target="_blank" rel="noopener noreferrer" class="">Hashicorp Memberlist</a> Go package, for
the automatic cluster formation. But instead of relying on the costly
"TCP Push/Pull" mechanism to synchronize storages, we'll implement a proper
Operation Log, and synchronize changes via a custom workflow, separate from the
<em>SWIM</em> Protocol.</p>
<p>As for the replication model, we still want
<a href="https://en.wikipedia.org/wiki/Eventual_consistency" target="_blank" rel="noopener noreferrer" class="">eventual consistency</a>, that
hasn't changed. Only the implementation will change, and be correct.</p>
<p>Correctness will be proven with an exhaustive test suite, trying to ensure that
most edge cases are covered.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="testing-the-chaos">Testing the chaos<a href="https://flowg.cloud/blog/road-to-stable#testing-the-chaos" class="hash-link" aria-label="Direct link to Testing the chaos" title="Direct link to Testing the chaos" translate="no">​</a></h3>
<p>We want to prove that <strong>FlowG</strong> can perform well in production environments,
where many things can go wrong. To do so, we will continuously improve the test
suite and set up test environments, following the principles of
<a href="https://en.wikipedia.org/wiki/Chaos_engineering" target="_blank" rel="noopener noreferrer" class="">Chaos Engineering</a>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="traces-and-metrics-with-opentelemetry">Traces and Metrics with OpenTelemetry?<a href="https://flowg.cloud/blog/road-to-stable#traces-and-metrics-with-opentelemetry" class="hash-link" aria-label="Direct link to Traces and Metrics with OpenTelemetry?" title="Direct link to Traces and Metrics with OpenTelemetry?" translate="no">​</a></h3>
<p>At the moment, <strong>FlowG</strong> only supports logs. The OpenTelemetry integration also
only supports those.</p>
<p>But OpenTelemetry also has "metrics" and "traces", which are essential parts of
any observability solutions. It is not yet clear if we want that in <strong>FlowG</strong> or
not, there is an
<a href="https://github.com/link-society/flowg/discussions/595" target="_blank" rel="noopener noreferrer" class="">ongoing discussion</a>
about it on Github, and would appreciate any feedback on this.</p>
<p>Nothing has been fleshed out yet for this. It might not be part of the 1.0
release, which is fine because it does not look like that introducing this
feature would be a breaking change.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="conclusion">Conclusion<a href="https://flowg.cloud/blog/road-to-stable#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>The list of contributors keeps growing, and you have all our thanks for that!</p>
<p>Any feedback is welcomed, feel free to join our community either on the Github
or on <a href="https://discord.com/invite/zjG3mMaENg" target="_blank" rel="noopener noreferrer" class="">Discord</a>.</p>
<p>If you are using <strong>FlowG</strong> in production, give us a ping, we'll add you to our
<code>README</code>.</p>
<blockquote>
<p>To infinity and beyond!</p>
</blockquote>]]></content:encoded>
            <author>david.delassus@link-society.com (David Delassus)</author>
            <category>release</category>
            <category>mvp</category>
            <category>stable</category>
        </item>
        <item>
            <title><![CDATA[FlowG talk at OSMC 2025]]></title>
            <link>https://flowg.cloud/blog/osmc-2025-video</link>
            <guid>https://flowg.cloud/blog/osmc-2025-video</guid>
            <pubDate>Tue, 03 Feb 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[FlowG was presented at the OSMC 2025 edition in Nuremberg, Germany]]></description>
            <content:encoded><![CDATA[<div style="position:relative;padding-bottom:56.25%;height:0"><iframe src="https://www.youtube.com/embed/zrvc6hPmNYI" style="position:absolute;top:0;left:0;width:100%;height:100%" allowfullscreen=""></iframe></div>
]]></content:encoded>
            <author>david.delassus@link-society.com (David Delassus)</author>
            <category>osmc</category>
            <category>talk</category>
            <category>video</category>
        </item>
        <item>
            <title><![CDATA[ElasticSearch API compatibility]]></title>
            <link>https://flowg.cloud/blog/elasticsearch-compatibility</link>
            <guid>https://flowg.cloud/blog/elasticsearch-compatibility</guid>
            <pubDate>Mon, 25 Aug 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[FlowG v0.45.0 introduces API compatibility with ElasticSearch]]></description>
            <content:encoded><![CDATA[<p>🎉<!-- -->
<strong><a href="https://github.com/link-society/flowg/releases/tag/v0.45.0" target="_blank" rel="noopener noreferrer" class="">FlowG v0.45.0</a></strong>
has been released with partial support for the ElasticSearch API!</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="introduction">Introduction<a href="https://flowg.cloud/blog/elasticsearch-compatibility#introduction" class="hash-link" aria-label="Direct link to Introduction" title="Direct link to Introduction" translate="no">​</a></h2>
<p><strong>FlowG</strong>'s goals have always been: interoperability and ease of use. Many
applications already use the "ELK" stack:</p>
<ul>
<li class=""><em>ElasticSearch</em> for indexing</li>
<li class=""><em>Logstash</em> for aggregation</li>
<li class=""><em>Kibana</em> for viewing</li>
</ul>
<p>Usually, logs are sent to <em>Logstash</em> via Syslog, which then forwards them to
ElasticSearch for storage and indexing.</p>
<p><strong>FlowG</strong> already could be set up as a drop-in replacement for <em>Logstash</em> thanks
to its Syslog Server endpoint, and its multitude of forwarders.</p>
<p>But with the latest release, we're taking things up a notch with the partial
support for ElasticSearch API.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-does-this-mean">What does this mean?<a href="https://flowg.cloud/blog/elasticsearch-compatibility#what-does-this-mean" class="hash-link" aria-label="Direct link to What does this mean?" title="Direct link to What does this mean?" translate="no">​</a></h2>
<p><strong>FlowG</strong> exposes on the <code>/api/v1/middlewares/elastic</code> endpoint an API
compatible with ElasticSearch, allowing you to plug your existing application,
which uses the ElasticSearch client libraries, into <strong>FlowG</strong>, without changing
your code.</p>
<blockquote>
<p>⚠️<!-- --> <strong>NB:</strong> The support is only partial.</p>
</blockquote>
<p>At the moment, only 2 operations are supported:</p>
<ul>
<li class=""><code>HEAD /{index}</code>: check if an index exists</li>
<li class=""><code>POST /{index}/_doc</code>: index a document</li>
</ul>
<p>And only HTTP Basic authentication is supported.</p>
<p>Indexes map to FlowG pipelines, the following request would send the document
through the <code>default</code> pipeline:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#272822;--prism-color:#F8F8F2"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="background-color:#272822;color:#F8F8F2"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain">POST /api/v1/middlewares/elastic/default/_doc</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">Authorization: Basic ...</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">{"foo": {"bar": "baz}}</span><br></div></code></pre></div></div>
<blockquote>
<p><strong>NB:</strong> In FlowG, the datamodel is flat, so the document is flattened by the
API before handing it to the pipeline, this would be equivalent to:</p>
</blockquote>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:#272822;--prism-color:#F8F8F2"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="background-color:#272822;color:#F8F8F2"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token punctuation" style="color:#F8F8F2">{</span><span class="token property" style="color:#F92672">"foo.bar"</span><span class="token operator" style="color:#F8F8F2">:</span><span class="token plain"> </span><span class="token string" style="color:#A6E22E">"baz"</span><span class="token punctuation" style="color:#F8F8F2">}</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-now-the-roadmap">What now? The roadmap<a href="https://flowg.cloud/blog/elasticsearch-compatibility#what-now-the-roadmap" class="hash-link" aria-label="Direct link to What now? The roadmap" title="Direct link to What now? The roadmap" translate="no">​</a></h2>
<p>More operations might be added later on to the "compatibility API" to smooth out
the integration of <strong>FlowG</strong> into your existing infrastructure, though the goal
is not to have 100% feature parity (only the subset that makes sense to support
in <strong>FlowG</strong>).</p>
<p>But also, more APIs might come in later, depending on user feedback/requests.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="summary">Summary<a href="https://flowg.cloud/blog/elasticsearch-compatibility#summary" class="hash-link" aria-label="Direct link to Summary" title="Direct link to Summary" translate="no">​</a></h2>
<p>As of <strong>FlowG v0.45.0</strong>, logs can be ingested via:</p>
<ul>
<li class="">HTTP as text data (one log per line) on <code>/api/v1/pipelines/{PIPELINE}/logs/text</code></li>
<li class="">HTTP as JSON data on <code>/api/v1/pipelines/{PIPELINE}/logs/struct</code></li>
<li class="">HTTP as OpenTelemetry data on <code>/api/v1/pipelines/{PIPELINE}/logs/otlp</code></li>
<li class="">Syslog protocol</li>
<li class="">ElasticSearch REST API on <code>/api/v1/middlewares/elastic/{PIPELINE}/_doc</code></li>
</ul>
<p><a href="https://github.com/link-society/flowg/releases/tag/v0.45.0" target="_blank" rel="noopener noreferrer" class="">See the release notes</a></p>]]></content:encoded>
            <author>david.delassus@link-society.com (David Delassus)</author>
            <category>release</category>
            <category>elastcisearch</category>
            <category>compat</category>
        </item>
    </channel>
</rss>