src/go/plugin/go.d/collector/docker/README.md
Plugin: go.d.plugin Module: docker
This collector monitors Docker containers state, health status and more.
It connects to the Docker instance via a TCP or UNIX socket and executes the following commands:
This collector is supported on all platforms.
This collector supports collecting metrics from multiple instances of this integration, including remote instances.
Requires netdata user to be in the docker group.
It discovers instances running on localhost by attempting to connect to a known Docker UNIX socket: /var/run/docker.sock.
The default configuration for this integration does not impose any limits on data collection.
Enabling collect_container_size may result in high CPU usage depending on the version of Docker Engine.
You can configure the docker collector in two ways:
| Method | Best for | How to |
|---|---|---|
| UI | Fast setup without editing files | Go to Nodes → Configure this node → Collectors → Jobs, search for docker, then click + to add a job. |
| File | If you prefer configuring via file, or need to automate deployments (e.g., with Ansible) | Edit go.d/docker.conf and add a job. |
:::important
UI configuration requires paid Netdata Cloud plan.
:::
No action required.
The following options can be defined globally: update_every, autodetection_retry.
<details open><summary>Config options</summary>| Group | Option | Description | Default | Required |
|---|---|---|---|---|
| Collection | update_every | Data collection interval (seconds). | 1 | no |
| autodetection_retry | Autodetection retry interval (seconds). Set 0 to disable. | 0 | no | |
| Target | address | Docker daemon address. For TCP sockets: tcp://IP:PORT. | unix:///var/run/docker.sock | yes |
| timeout | Request timeout (seconds). | 2 | no | |
| Filters | container_selector | Container selector. Defines which containers to monitor. Uses simple patterns. | * | no |
| Metrics Selection | collect_container_size | Collect container writable layer size metrics. | no | no |
| Virtual Node | vnode | Associates this data collection job with a Virtual Node. | no |
Configure the docker collector from the Netdata web interface:
The configuration file name for this integration is go.d/docker.conf.
The file format is YAML. Generally, the structure is:
update_every: 1
autodetection_retry: 0
jobs:
- name: some_name1
- name: some_name2
You can edit the configuration file using the edit-config script from the
Netdata config directory.
cd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata
sudo ./edit-config go.d/docker.conf
An example configuration.
jobs:
- name: local
address: 'unix:///var/run/docker.sock'
Note: When you define multiple jobs, their names must be unique.
Collecting metrics from local and remote instances.
<details open><summary>Config</summary>jobs:
- name: local
address: 'unix:///var/run/docker.sock'
- name: remote
address: 'tcp://203.0.113.10:2375'
The following alerts are available:
| Alert name | On metric | Description |
|---|---|---|
| docker_container_unhealthy | docker.container_health_status | ${label:container_name} docker container health status is unhealthy |
Metrics grouped by scope.
The scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.
These metrics refer to the entire monitored application.
This scope has no labels.
Metrics:
| Metric | Dimensions | Unit |
|---|---|---|
| docker.containers_state | running, paused, stopped | containers |
| docker.containers_health_status | healthy, unhealthy, not_running_unhealthy, starting, no_healthcheck | containers |
| docker.images | active, dangling | images |
| docker.images_size | size | bytes |
Metrics related to containers. Each container provides its own set of the following metrics.
Labels:
| Label | Description |
|---|---|
| container_name | The container's name |
| image | The image name the container uses |
Metrics:
| Metric | Dimensions | Unit |
|---|---|---|
| docker.container_state | running, paused, exited, created, restarting, removing, dead | state |
| docker.container_health_status | healthy, unhealthy, not_running_unhealthy, starting, no_healthcheck | status |
| docker.container_writeable_layer_size | writeable_layer | size |
This collector exposes real-time functions for interactive troubleshooting in the Live tab.
Retrieves container list data equivalent to docker ps -a.
This function calls the Docker Container List API with all=true and returns both running and non-running containers in a table similar to Docker CLI output.
Use cases:
| Aspect | Description |
|---|---|
| Name | Docker:container-ls |
| Require Cloud | yes |
| Performance | Executes a single Docker API request (ContainerList with all=true): |
| • No per-container inspect requests are issued | |
| • Response size grows with total container count | |
| • Large histories with many stopped containers may return more rows | |
| Security | Exposes container metadata that may include sensitive details: |
| • Container command text may include runtime arguments | |
| • Image names, ports, and container names are visible | |
| • Restrict access to authorized operators | |
| Availability | Available when: |
| • Docker collector is initialized and connected | |
| • Docker API list-containers request succeeds | |
| • Returns HTTP 503 while collector is initializing | |
| • Returns HTTP 500 on Docker API errors | |
| • Returns HTTP 504 on timeout |
No additional configuration is required.
This function has no parameters.
Container inventory from Docker Engine. Each row represents one container returned by docker ps -a.
| Column | Type | Unit | Visibility | Description |
|---|---|---|---|---|
| CONTAINER ID | string | Short container ID (12 characters). | ||
| IMAGE | string | Container image reference. | ||
| COMMAND | string | Container command as reported by Docker API. | ||
| CREATED | string | Human-readable container creation age (for example, '5 days ago'). | ||
| STATUS | string | Docker status string (for example, 'Up 3 weeks' or 'Exited (0) 4 weeks ago'). | ||
| State (Raw) | string | hidden | Raw Docker state value (for example, running, exited, paused, restarting, dead). | |
| PORTS | string | Published or exposed ports summary. | ||
| NAMES | string | Container name. | ||
| Container ID (Full) | string | hidden | Full 64-character container ID. | |
| Created (Unix) | integer | seconds | hidden | Container creation timestamp in Unix seconds. |
Important: Debug mode is not supported for data collection jobs created via the UI using the Dyncfg feature.
To troubleshoot issues with the docker collector, run the go.d.plugin with the debug option enabled. The output
should give you clues as to why the collector isn't working.
Navigate to the plugins.d directory, usually at /usr/libexec/netdata/plugins.d/. If that's not the case on
your system, open netdata.conf and look for the plugins setting under [directories].
cd /usr/libexec/netdata/plugins.d/
Switch to the netdata user.
sudo -u netdata -s
Run the go.d.plugin to debug the collector:
./go.d.plugin -d -m docker
To debug a specific job:
./go.d.plugin -d -m docker -j jobName
If you're encountering problems with the docker collector, follow these steps to retrieve logs and identify potential issues:
Use the following command to view logs generated since the last Netdata service restart:
journalctl _SYSTEMD_INVOCATION_ID="$(systemctl show --value --property=InvocationID netdata)" --namespace=netdata --grep docker
Locate the collector log file, typically at /var/log/netdata/collector.log, and use grep to filter for collector's name:
grep docker /var/log/netdata/collector.log
Note: This method shows logs from all restarts. Focus on the latest entries for troubleshooting current issues.
If your Netdata runs in a Docker container named "netdata" (replace if different), use this command:
docker logs netdata 2>&1 | grep docker