Skip to content

feat: multi-format local sinks and S3 Parquet export for flows - #542

Draft
jpinsonneau wants to merge 2 commits into
netobserv:mainfrom
jpinsonneau:s3-parquet
Draft

feat: multi-format local sinks and S3 Parquet export for flows#542
jpinsonneau wants to merge 2 commits into
netobserv:mainfrom
jpinsonneau:s3-parquet

Conversation

@jpinsonneau

@jpinsonneau jpinsonneau commented Jul 20, 2026

Copy link
Copy Markdown
Member

Summary

  • Default local flows output is json,sqlite; include parquet in --format only when needed (comma-separated / repeatable flags).
  • Optional Hive-partitioned Parquet export to S3-compatible storage via embedded FLP encode.s3 (--s3-endpoint, --s3-bucket, --s3-account, credentials env/file/secret).
  • Docs and help updated; e2e coverage for format/S3 YAML options.

Hub PR (operator): netobserv/netobserv-operator#2845

Custom images (required for S3 Parquet): There is no eBPF agent PR — only an FLP vendor bump. Until agent changes land separately, use the Quay tags below (agent embeds FLP with Parquet S3 encode; CLI image has this branch’s collector/format support):

Image Tag
Agent quay.io/jpinsonn/netobserv-ebpf-agent:s3-flowbuffer
CLI / collector quay.io/jpinsonn/network-observability-cli:s3-flowbuffer

Override via env (see README / scripts/functions.sh):

export NETOBSERV_AGENT_IMAGE=quay.io/jpinsonn/netobserv-ebpf-agent:s3-flowbuffer
export NETOBSERV_COLLECTOR_IMAGE=quay.io/jpinsonn/network-observability-cli:s3-flowbuffer

(NETOBSERV_AGENT_IMAGE replaces the DaemonSet agent image; NETOBSERV_COLLECTOR_IMAGE is the in-cluster collector pod image.)

Test plan

  • go test ./cmd/... ./e2e/...
  • Local: flows --format=json,sqlite (default) and --format=parquet
  • Kind + MinIO (below)

Kind testing — CLI

  1. Kind cluster with MinIO reachable from agent pods (e.g. http://minio.minio.svc:9000).
  2. Export custom images (required for S3 encode):
    export NETOBSERV_AGENT_IMAGE=quay.io/jpinsonn/netobserv-ebpf-agent:s3-flowbuffer
    export NETOBSERV_COLLECTOR_IMAGE=quay.io/jpinsonn/network-observability-cli:s3-flowbuffer
  3. Credentials (do not pass secrets as CLI flags):
    export NETOBSERV_S3_ACCESS_KEY=...
    export NETOBSERV_S3_SECRET_KEY=...   # or AWS_* / credentials file / --s3-secret as documented
  4. Capture:
    ./build/oc-netobserv flows \
      --s3-endpoint=http://minio.minio.svc:9000 \
      --s3-bucket=... \
      --s3-account=cli-test \
      --max-time=1m
  5. Verify with MinIO client, e.g. mc ls under cluster_id=cli-test/ (Hive layout year=/month=/day=/hour=/part-….parquet); optional duckdb read_parquet('.../**/*.parquet').
  6. Local defaults: --format=json,sqlite; include parquet in --format only when local Parquet parts are needed. S3 export is independent of local --format.

Notes

  • S3 is wired on the agent via FLP_CONFIG (encode.s3), not collector --options. Missing credentials fail before deploy.
  • Default S3 flush interval is 15s (capped by --max-time); agents flush pending Parquet parts on SIGTERM.

jpinsonneau and others added 2 commits July 20, 2026 14:29
Add parquet-go and related transitive deps needed by Hive Parquet
encode and the flowBuffer write stage.

Co-authored-by: Cursor <cursoragent@cursor.com>
Default local capture to json,sqlite (parquet opt-in via --format) and
add optional Hive-partitioned Parquet export to S3-compatible storage
via the embedded FLP encode.s3 stage, aligned with operator/console.

Co-authored-by: Cursor <cursoragent@cursor.com>
@openshift-ci

openshift-ci Bot commented Jul 20, 2026

Copy link
Copy Markdown

Skipping CI for Draft Pull Request.
If you want CI signal for your change, please convert it to an actual PR.
You can still manually trigger a test run with /test all

@openshift-ci

openshift-ci Bot commented Jul 20, 2026

Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please assign jotak for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant