Prerequisites
- A Bronto account and API key (how to create one)
- Nginx running and writing logs (default paths:
/var/log/nginx/access.logand/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 thenginx-module-otelpackage)
Logs, metrics, and traces
Nginx emits request traces over OTLP/gRPC throughngx_otel_module and exposes connection/request metrics through stub_status.
The example uses the standard same-host OTLP/gRPC endpoint, localhost:4317. Change the host, port, and TLS settings when the Collector is not local or its receiver configuration differs.
1. Enable tracing in Nginx. Add load_module to the top of nginx.conf and the otel_* directives inside the http block:
nginx.conf
/etc/otel/config.yaml
<REGION> to eu or us. The service.name / service.namespace attributes (and otel_service_name) route data to the Bronto dataset and collection.
You can remove any signal pipeline you do not need.
For receiver options and available measurements, see the Collector Contrib NGINX receiver.
What you will see in Bronto
Open Search and filter byservice.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/. Runsudo chmod +r /var/log/nginx/*.logor add the user to theadmgroup, then restart the Collector. - No traces? Confirm
ngx_otel_moduleis loaded (nginx -V),otel_traceison, and theotel_exporterendpoint matches the Collector’s configured OTLP/gRPC receiver address. - 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 itstail input and HTTP output. Fluent Bit handles logs only — for traces, use the OpenTelemetry Collector above.
fluent-bit.conf
json_lines, not json — json sends a single array and breaks ingestion. See Connect Fluent Bit to Bronto for installation and the full output reference.
