Kind: net_listeners
Netdata can automatically discover services running on the local host by inspecting the kernel’s listening sockets. This is the discoverer that powers Netdata’s “zero-config” experience for most database, cache, web-server, and exporter monitoring — if the service is listening on a known port and runs as a recognisable process, Netdata picks it up and starts collecting metrics without you writing any configuration.
This page covers net_listeners-specific setup. For the broader Service Discovery model and the shared template-helper reference, see Service Discovery.
Each discovery cycle, the discoverer:
local-listeners helper (which reads /proc on Linux, netstat-equivalents elsewhere).(protocol, IP, port, process) tuple, exposing .Protocol, .IPAddress, .Port, .Comm (process basename), .Cmdline (full command line), and .Address (the convenience IPAddress:Port).services: rules against each target. The stock conf carries ~100 curated rules covering the bulk of go.d modules (databases, web servers, caches, message queues, exporters).http, snmp, k8s, or a custom one)./proc/<pid>/net files; the Netdata installer configures this via the local-listeners setuid helper.host networking appear as listeners and are picked up here, not by the Docker discoverer. Services in private container networks must be discovered by the Docker discoverer instead.comm/cmdline (e.g. config-file path, version, runtime URL prefix) must be inferred via service rules or known by convention.You can configure the net_listeners discoverer in two ways:
| Method | Best for | How to |
|---|---|---|
| UI | Fast setup without editing files | Go to Collectors -> go.d -> ServiceDiscovery -> net_listeners, then add a discovery pipeline. |
| File | File-based configuration or automation | Edit /etc/netdata/go.d/sd/net_listeners.conf and define the discoverer: and services: blocks. |
The stock conf at /etc/netdata/go.d/sd/net_listeners.conf ships with disabled: no and a curated set of rules. To turn discovery off, set disabled: yes at the top of the file.
The stock rule set covers most commonly-monitored services out of the box (Apache, Nginx, MySQL, PostgreSQL, Redis, RabbitMQ, MongoDB, Elasticsearch, etc.). Most users do not need to author their own rules — start by enabling the relevant collector module and let the stock rules find local instances.
The configuration file has two top-level blocks: discoverer: (the options below) and services: (rules that turn discovered listeners into collector jobs — see Service Rules).
After editing the file, restart the Netdata Agent to load the updated discovery pipeline.
| Option | Description | Default | Required |
|---|---|---|---|
| interval | How often to re-scan the listening-socket table. | 2m | no |
| timeout | Maximum time to wait for the local-listeners helper to return. | 5s | no |
Collectors -> go.d -> ServiceDiscovery -> net_listeners.Define the discovery pipeline in /etc/netdata/go.d/sd/net_listeners.conf.
The file has two top-level blocks: discoverer: (the options above) and services: (rules that turn discovered targets into collector jobs — see Service Rules).
After editing the file, restart the Netdata Agent to load the updated discovery pipeline.
Most users should not need to touch this file. The stock conf carries ~100 curated rules. Set disabled: yes if you want to disable local-listener discovery entirely.
disabled: no
discoverer:
net_listeners: { }
# services rules ship in the stock conf — the snippet below is illustrative only
services:
- id: redis
match: '{{ or (eq .Port "6379") (eq .Comm "redis-server") }}'
config_template: |
name: local
address: redis://@{{.Address}}
Bump the scan rate to once per minute. Useful for very dynamic environments where services come and go often (e.g. ephemeral test runners).
disabled: no
discoverer:
net_listeners:
interval: 1m
services: [ ]
Check, in order:
ss -tlnp | grep <name>)?/etc/netdata/go.d/sd/net_listeners.conf..Comm or .Cmdline for non-default ports..Comm is kernel-truncated; use .Cmdline instead.The stock exporter catch-all rule (last in the file) is greedy by design — anything on a known Prometheus port gets the prometheus module. Add a more specific rule above it if you want a different module to win.
The discoverer creates jobs but does not run them. Common causes: the rendered template assumes credentials the local service rejects (e.g. RabbitMQ default guest:guest); 0.0.0.0 listeners produce 0.0.0.0:port addresses that the collector cannot connect to (use 127.0.0.1 in the template if appropriate); the service has TLS but the template uses HTTP.
Want a personalised demo of Netdata for your use case?