Export NGINX instance metrics

Overview

F5 NGINX Agent now includes an embedded OpenTelemetry collector, streamlining observability and metric collection for NGINX instances. With this feature, you can collect:

  • Metrics from NGINX Plus and NGINX Open Source
  • Host metrics (CPU, memory, disk, and network activity) from VMs or Containers
The OpenTelemetry exporter is enabled by default. Once a valid connection to the management plane is established, the Agent will automatically begin exporting metrics.

Key benefits

  • Seamless Integration: No need to deploy an external OpenTelemetry Collector. All components are embedded within the Agent for streamlined observability.
  • Standardized Protocol: Support for OpenTelemetry standards ensures interoperability with a wide range of observability backends, including Jaeger, Prometheus, Splunk, and more.

Verify that metrics are exported

You can validate that metrics are successfully exported by using the methods below:

  • NGINX One dashboard

  • Agent logs

    Check the OpenTelemetry Collector logs for confirmation of successful metric processing:

    1. Open the file: /var/log/nginx-agent/opentelemetry-collector-agent.log

    2. Look for the following logs:

      Everything is ready. Begin running and processing data.

Custom OTel Configuration

NGINX Agent generates a default OpenTelemetry config to send metrics to your management plane located at /etc/nginx-agent/opentelemetry-collector-agent.yaml. An option is provided to bring your own OpenTelemetry configs which will be merged with the NGINX Agent default config.

OpenTelemetry will merge your OpenTelemetry Config. The order of the OpenTelemetry config files matters, the last config in the list will take priority over others listed if they have the same value configured.

To have NGINX Agent use your own OpenTelemetry config:

  1. Edit the configuration file sudo vim /etc/nginx-agent/nginx-agent.conf
  2. Add the collector property
yaml
collector:
  additional_config_paths:
    - "/my_config.yaml"

Example usage:

NGINX Agent uses /default for naming its default processors, exporters and pipelines using the same naming in your own config might cause issues with sending metrics to your management plane
  • Add Prometheus Exporter
yaml
exporters:
  prometheus:
    endpoint: "127.0.0.1:5643"
    resource_to_telemetry_conversion:
      enabled: true

service:
  pipelines:
    metrics/prometheus-example-pipeline:
      receivers:
        - nginxplus
      processors:
        - resource/default
      exporters:
        - prometheus
yaml
exporters:
  prometheus:
    endpoint: "127.0.0.1:5643"
    resource_to_telemetry_conversion:
      enabled: true

service:
  pipelines:
    metrics/prometheus-example-pipeline:
      receivers:
        - nginx
      processors:
        - resource/default
      exporters:
        - prometheus
  • Third-party OTel Collector
yaml
exporters:
  otlp/local-collector:
    endpoint: "my-local-collector.com:443"
    timeout: 10s
    retry_on_failure:
      enabled: true
      initial_interval: 10s
      max_interval: 60s
      max_elapsed_time: 10m
    tls:
      insecure: true

service:
  pipelines:
    metrics/otlp-example-pipeline:
      receivers:
        - nginxplus
      processors:
        - resource/default
      exporters:
        - otpl/local-collector
yaml
exporters:
  otlp/local-collector:
    endpoint: "my-local-collector.com:443"
    timeout: 10s
    retry_on_failure:
      enabled: true
      initial_interval: 10s
      max_interval: 60s
      max_elapsed_time: 10m
    tls:
      insecure: true

service:
  pipelines:
    metrics/otlp-example-pipeline:
      receivers:
        - nginx
      processors:
        - resource/default
      exporters:
        - otpl/local-collector
  • Add Debug Exporter
yaml
exporters:
  debug:
    verbosity: detailed
    sampling_initial: 5
    sampling_thereafter: 200

service:
  pipelines:
    metrics/debug-example-pipeline:
      receivers:
        - nginxplus
      processors:
        - resource/default
      exporters:
        - debug
yaml
exporters:
  debug:
    verbosity: detailed
    sampling_initial: 5
    sampling_thereafter: 200

service:
  pipelines:
    metrics/debug-example-pipeline:
      receivers:
        - nginx
      processors:
        - resource/default
      exporters:
        - debug

Troubleshooting

To view the merged OpenTelemetry configuration set the Agent log level to debug in /etc/nginx-agent/nginx-agent.conf and restart NGINX Agent

  1. Edit the configuration file sudo vim /etc/nginx-agent/nginx-agent.conf
  2. Change the log property
yaml
log:
  level: debug 
  1. Restart NGINX Agent
  2. View merged OpenTelemetry configuration cat /var/lib/nginx-agent/opentelemetry-collector-agent-debug.yaml