Skip to content

Proxy

The ByteFreezer Proxy is a lightweight data collection agent that receives data from various sources (syslog, sFlow, IPFIX, eBPF, HTTP webhooks) and forwards it to the ByteFreezer Receiver.

Key Features

  • Multi-protocol support: UDP, TCP, HTTP, message queues
  • Dynamic configuration: Polls Control for dataset configurations
  • Automatic plugin management: Starts/stops listeners based on assigned datasets
  • Local spooling: Buffers data during network outages
  • Compression: Batches and compresses data before forwarding

Deployment Options

Method Best For Port Management
Kubernetes Production, scalability HostNetwork or LoadBalancer
Docker Development, single host Port mapping
Systemd Bare metal, VMs Direct binding

Configuration Modes

Proxy polls Control for configuration. Datasets assigned to the proxy automatically create listeners.

config_mode: "control-only"
account_id: "your-account-id"
bearer_token: "your-api-key"
control_url: "https://api.bytefreezer.com"

Local-Only Mode

Configuration defined in local YAML file. No Control connectivity required.

config_mode: "local-only"
inputs:
  - type: syslog
    name: local-syslog
    config:
      port: 514
      host: "0.0.0.0"

Hybrid Mode

Local inputs merged with Control configuration. Local takes precedence on port conflicts.

config_mode: "hybrid"
account_id: "your-account-id"
bearer_token: "your-api-key"
control_url: "https://api.bytefreezer.com"
inputs:
  - type: syslog
    name: local-override
    config:
      port: 514

Dataset Assignment

Each dataset can be assigned to a specific proxy. When the proxy polls for configuration, it only receives datasets assigned to it.

  1. Create dataset in UI with source type and port
  2. Assign dataset to proxy via UI or API
  3. Proxy automatically starts listener on configured port

This allows multiple proxies to handle different data types without port conflicts.

Spooling & Dead Letter Queue

The proxy spools data locally when the receiver is unreachable, then retries delivery automatically.

Data Flow

Incoming Data → Queue → Upload to Receiver
                          ├─ Success → file removed
                          ├─ Transient error (5xx, 429) → Retry (up to retry_attempts)
                          └─ Permanent error (4xx) or retries exhausted → DLQ

DLQ Hard Limit

The Dead Letter Queue (DLQ) preserves batches that could not be delivered. To prevent unbounded disk growth, a configurable hard limit enforces FIFO eviction — when total DLQ size exceeds the limit, the oldest files are removed first.

Setting Default Description
spooling.enabled true Enable local spooling
spooling.directory /var/spool/bytefreezer-proxy Spool root directory
spooling.max_size_bytes 1073741824 (1 GB) Queue/retry size limit
spooling.dlq_max_size_bytes 10737418240 (10 GB) DLQ hard limit. Oldest files removed FIFO when exceeded. Set to 0 for unlimited.
spooling.retry_attempts 5 Retries before moving to DLQ
spooling.retry_interval_seconds 60 Seconds between retry cycles
spooling.cleanup_interval_seconds 300 Cleanup/eviction cycle frequency
spooling.max_age_days 0 (unlimited) Auto-move to DLQ after N days

DLQ API

Endpoint Method Description
/api/v1/dlq/stats GET DLQ and queue statistics (file counts, sizes, per-tenant breakdown)
/api/v1/dlq/files GET List DLQ files (filterable by tenant/dataset)
/api/v1/dlq/retry POST Move DLQ files back to retry queue for reprocessing