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 Linux procfs socket and process data.(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.local-listeners helper is currently built for Linux. A missing or non-executable helper makes both normal discovery and the DynCfg operational test fail.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); a rule renders the wrong port or protocol; or the service has TLS but the template uses HTTP.
Want a personalised demo of Netdata for your use case?