# Export NGINX instance metrics Type of document: How-to guide Product: NGINX Agent --- ## Overview The F5 NGINX Agent now includes an embedded [OpenTelemetry](https://opentelemetry.io) collector, streamlining observability and metric collection for NGINX instances. By default, the NGINX Agent sends key metrics to the [NGINX One Console](/nginx-one-console/nginx-configs/metrics/review-metrics), providing quick visibility into server performance through pre-configured dashboards. With this feature, you can collect: - Metrics from NGINX Plus and NGINX Open Source - Host metrics such as CPU, memory, disk, and network activity from virtual machines (VMs) or containers For users requiring deeper integration with third-party observability tools, the NGINX Agent supports exporting additional metrics through the embedded OpenTelemetry collector. Tools such as Prometheus, Splunk, and other OpenTelemetry-compatible platforms can be configured to ingest these metrics, as detailed in the rest of this document. **Note:** The OpenTelemetry exporter is enabled by default. Once a valid connection to the management plane is established, the NGINX Agent will automatically begin exporting metrics to the NGINX One Console. ### 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 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** - When an instance has connected to NGINX One Console [See: Connect to NGINX One Console](/nginx-one-console/connect-instances/add-instance.md), you should see metrics showing on the NGINX One Console 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: ```text Everything is ready. Begin running and processing data. ``` ### Custom OTel Configuration NGINX Agent generates a default OpenTelemetry config (located at `/etc/nginx-agent/opentelemetry-collector-agent.yaml`) to send metrics to your management plane. An option is provided to bring your own [OpenTelemetry configs](https://opentelemetry.io/docs/collector/configuration/) which will be merged with the NGINX Agent default 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. #### VM 1. Edit the configuration file as root `vim /etc/nginx-agent/nginx-agent.conf` 1. Add the collector property 1. Save and restart the NGINX agent service `sudo systemctl restart nginx-agent` ```yaml collector: additional_config_paths: - "/etc/nginx-agent/my_config.yaml" ``` #### Container 1. Run the Docker container: Use the following command to run the NGINX Agent docker container. Replace the placeholder values (`YOUR_JWT_HERE`, `DPK`, `/path/to/my_config.yaml`, and ``) with the appropriate values for your environment: ```bash sudo docker run \ --env=NGINX_LICENSE_JWT= \ --env=NGINX_AGENT_COMMAND_SERVER_PORT=443 \ --env=NGINX_AGENT_COMMAND_SERVER_HOST=agent.connect.nginx.com \ --env=NGINX_AGENT_COMMAND_AUTH_TOKEN= \ --env=NGINX_AGENT_COMMAND_TLS_SKIP_VERIFY=false \ --env=NGINX_AGENT_COLLECTOR_ADDITIONAL_CONFIG_PATHS="/etc/nginx-agent/my_config.yaml" \ --volume=/path/to/my_config.yaml:/etc/nginx-agent/my_config.yaml:ro \ --restart=always \ --runtime=runc \ -d private-registry.nginx.com/nginx-plus/agentv3: ``` #### Example usage **Note:** 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 Configuration ```yaml exporters: prometheus: endpoint: "127.0.0.1:5643" resource_to_telemetry_conversion: enabled: true namespace: test-space service: pipelines: metrics/prometheus-example-pipeline: receivers: - # Use nginxplus for NGINX Plus or nginx for OSS processors: - resource/default exporters: - prometheus ``` #### Third-party OTel Collector ```yaml exporters: otlp_grpc/local-collector: endpoint: "my-local-collector.com:443" service: pipelines: metrics/otlp-example-pipeline: receivers: - nginxplus/nginx # Use nginxplus for NGINX Plus or nginx for OSS processors: - resource/default exporters: - otlp_grpc/local-collector ``` #### Add Debug Exporter ```yaml exporters: debug: verbosity: detailed sampling_initial: 5 sampling_thereafter: 200 service: pipelines: metrics/debug-example-pipeline: receivers: - nginxplus/nginx # Use nginxplus for NGINX Plus or nginx for OSS processors: - resource/default exporters: - debug ``` ### Troubleshooting To view the merged OpenTelemetry configuration, change the NGINX Agent log level to "debug" in `/etc/nginx-agent/nginx-agent.conf`: ```yaml log: level: debug