Skip to main content
Forward Nginx access and error logs, and optionally request traces, to Bronto through a single OpenTelemetry Collector. See Connect OpenTelemetry Collector to Bronto for Collector basics.

Prerequisites

  • A Bronto account and API key (how to create one)
  • Nginx running and writing logs (default paths: /var/log/nginx/access.log and /var/log/nginx/error.log)
  • An OpenTelemetry Collector (recommended) or Fluent Bit installed on the same host
  • For traces: Nginx 1.25.3+ with the ngx_otel_module (install the nginx-module-otel package)

Logs and traces

Nginx emits request traces over OTLP/gRPC via ngx_otel_module. Point the module at a local Collector that forwards both signals to Bronto. 1. Enable tracing in Nginx. Add load_module to the top of nginx.conf and the otel_* directives inside the http block:
nginx.conf
2. Configure the Collector to tail the log files and accept traces, then export each signal to Bronto:
/etc/otel/config.yaml
Set <REGION> to eu or us. The service.name / service.namespace attributes (and otel_service_name) route data to the Bronto dataset and collection.

Logs only

If you only need logs, drop the otlp receiver and the traces pipeline:
/etc/otel/config.yaml

What you will see in Bronto

Open Search and filter by service.name = nginx. Access logs in the default combined format carry the client IP, request method and path, HTTP status code, response size, referrer, and user agent; error logs carry a timestamp, severity level (error, warn, crit), and the message. Bronto’s Custom Parser extracts these fields server-side — no parser operators needed in the Collector. Traces appear in Explore Traces — one span per request, with the method, route, status code, and duration. See Send Traces to Bronto for more.

Troubleshooting

  • No logs? Confirm the Collector’s user can read /var/log/nginx/. Run sudo chmod +r /var/log/nginx/*.log or add the user to the adm group, then restart the Collector.
  • No traces? Confirm ngx_otel_module is loaded (nginx -V), otel_trace is on, and the otel_exporter endpoint matches the Collector’s otlp gRPC port (4317).
  • Want structured fields at the source? Switch Nginx to a JSON log_format (see the Nginx log_format reference) for direct field extraction.
  • For general issues, see OTel Collector troubleshooting.

Alternative: Fluent Bit

If your organization already runs Fluent Bit, forward the Nginx log files with its tail input and HTTP output. Fluent Bit handles logs only — for traces, use the OpenTelemetry Collector above.
fluent-bit.conf
Set Format to json_lines, not jsonjson sends a single array and breaks ingestion. See Connect Fluent Bit to Bronto for installation and the full output reference.