docs/learn/node-identities.md
:::tip
What You'll Learn
How Netdata identifies nodes across Agents, Parents, and Cloud - and why each identity type matters for your infrastructure.
:::
Netdata uses several identity mechanisms to uniquely identify nodes, authenticate connections, and track metrics across your infrastructure. Understanding these identities is essential when:
Every Netdata Agent has a Machine GUID - a UUID that uniquely identifies this specific node.
| Property | Value |
|---|---|
| File (Linux) | /var/lib/netdata/registry/netdata.public.unique.id |
| File (Windows) | C:\Program Files\Netdata\var\lib\netdata\registry\netdata.public.unique.id |
| Format | UUID (e.g., a1b2c3d4-e5f6-7890-abcd-ef1234567890) |
| Generated | On first start, if missing |
| Persistence | Permanent - never changes once created |
On startup, Netdata determines the Machine GUID:
netdata.public.unique.id)The Machine GUID is also stored in status files for crash recovery:
| Location | Purpose |
|---|---|
/var/lib/netdata/status-netdata.json | Primary backup |
/var/cache/netdata/status-netdata.json | Fallback 1 |
/tmp/status-netdata.json | Fallback 2 |
/run/status-netdata.json | Fallback 3 |
/var/run/status-netdata.json | Fallback 4 |
:::note
Windows status file paths
On Windows, the status file lives under the install directory (C:\Program Files\Netdata):
C:\Program Files\Netdata\var\lib\netdata\status-netdata.jsonC:\Program Files\Netdata\var\cache\netdata\status-netdata.jsonThe same additional fallback locations used on Linux (/tmp, /run, /var/run) also apply on Windows builds, but they resolve through the runtime's own path translation rather than a fixed path under the install directory. If duplicate identities persist after cleaning the two locations above, check those locations too.
:::
:::note
Redundant Storage
The Machine GUID is stored redundantly across multiple locations. If the primary file is missing or corrupted, Netdata automatically recovers the GUID from backup locations. This ensures identity persistence across crashes and unexpected shutdowns.
:::
:::warning
GUID Must Be Unique
If two Agents have the same Machine GUID:
See VM Templates for how to avoid this when cloning VMs.
:::
Virtual Nodes allow Go collectors to report metrics as if they came from separate logical nodes. This is useful for monitoring remote systems, containers, or logical entities that don't run their own Netdata Agent (SNMP devices, cloud provider db instances, etc.).
| Property | Value |
|---|---|
| Directory | vnodes/ in your Netdata config directory |
| Format | YAML files (.yaml, .yml, .conf) |
| Identity | User-defined GUID in config file |
Each virtual node is defined in a YAML file:
- name: my-remote-server
hostname: remote-server.example.com
guid: a1b2c3d4-e5f6-7890-abcd-ef1234567890
labels:
environment: production
datacenter: us-east
| Field | Required | Description |
|---|---|---|
hostname | Yes | Display name shown in dashboards and Cloud |
guid | Yes | UUID that uniquely identifies this virtual node |
name | No | Internal reference name |
labels | No | Key-value pairs for filtering and organization |
:::warning
GUID Uniqueness
Each virtual node GUID must be unique across your entire infrastructure. Using the same GUID as another node (real or virtual) causes identity conflicts - the same problems as duplicate Machine GUIDs.
:::
In addition to the YAML file method, you can create, edit, test, and remove virtual nodes directly from the Netdata UI using dynamic configuration (dyncfg). Both methods produce a working vnode that collectors can attach metrics to, though field requirements differ — see the table below. The Vnodes GUI path is available under the go.d plugin's dynamic configuration view.
:::note
Where to find it in the GUI
In the Netdata UI, open the node's dynamic configuration view and look for the Vnodes entry under the go.d plugin (/collectors/go.d/Vnodes).
:::
The GUI form exposes hostname, guid, and labels — the same fields as YAML, minus name which the Agent ignores:
| Field | Required in the GUI | Description |
|---|---|---|
guid | Yes | UUID that uniquely identifies this virtual node. Must be a valid UUID. |
hostname | No | Display name shown in dashboards and Cloud. If left blank, the job name you assign when creating the vnode is used as the hostname. |
labels | No | Key-value pairs for filtering and organization. |
Generate a guid with uuidgen on Linux/macOS, or [guid]::NewGuid() in PowerShell. Each guid must be unique across your infrastructure, as described in the GUID Uniqueness warning above. Each hostname must also be unique across all vnodes — the Agent rejects a new vnode whose hostname matches an existing one. See Does renaming a virtual node change its identity? for how each field affects the vnode.
:::info
Changes apply without an Agent restart
Vnode changes applied via the GUI propagate immediately to all running collector jobs that reference the vnode — no restart or reload is needed.
:::
:::warning
Removing vnodes depends on how they were created
Virtual nodes you create through the GUI are stored with the dyncfg source type and can be removed from the GUI.
A vnode that is currently referenced by one or more collector jobs cannot be removed until those references are cleared; the remove action is blocked in that case.
Virtual nodes defined in YAML files in the vnodes/ directory of your Netdata config directory have a stock or user source type — attempting to remove them returns an error: only dyncfg vnodes can be removed.
To remove a file-based vnode, delete or edit its YAML file and restart the Netdata Agent.
:::
Defining a vnode is step 1. The vnode becomes active when a collector job references it by setting vnode in the job's configuration to the vnode's hostname:
jobs:
- name: win_server1
vnode: win_server1
url: http://203.0.113.10:9182/metrics
The vnode value must exactly match the hostname of the vnode definition. The Agent resolves the vnode at job startup — if the referenced hostname is not registered, the job fails to start.
:::note
SNMP collectors behave differently: their create_vnode: true option auto-creates the vnode from the job configuration, so no separate vnode definition step is needed.
:::
hostname and guidvnode: <hostname> to attach itVirtual nodes appear in Netdata Cloud as independent nodes, with their own dashboards and alert states.
By default, Netdata auto-detects the system hostname. When the system hostname is configured as an IP address (common on some cloud VMs or home servers), nodes appear in Dashboards and Netdata Cloud with that raw IP instead of a readable name.
:::info
This setting changes the display name only — it does not affect the node's identity (Machine GUID, Node ID, or Claimed ID).
:::
To configure a custom hostname, see Customizing Your Node Name.
Every node has a lifecycle determined by its ephemerality setting. By default, all nodes are permanent - they are expected to maintain connectivity, and disconnections trigger alerts.
Ephemeral nodes are designed for dynamic infrastructure:
To change a node's ephemerality, edit netdata.conf:
[global]
is ephemeral node = yes # Ephemeral - no alerts, auto-cleanup
is ephemeral node = no # Permanent (default) - alerts on disconnect
See Node Ephemerality for detailed configuration options.
When an Agent connects to Netdata Cloud, it receives a Node ID that links the Machine GUID to your Space.
| Property | Value |
|---|---|
| Assigned by | Netdata Cloud |
| Stored in | /var/cache/netdata/netdata-meta.db (node_instance table) |
| Purpose | Links Machine GUID to your Cloud Space |
Machine GUIDs and Cloud Node IDs map 1-to-1.
A single Machine GUID can have multiple Node Instances in Cloud when the same node connects through different Parents. Each Parent-node connection creates a separate node instance. Although, Node Instances are critical in metrics routing decisions and alerts deduplication, they are usually not visible to users.
The Agent-Cloud Link (ACLK) uses separate credentials for authentication:
| File | Purpose |
|---|---|
/var/lib/netdata/cloud.d/cloud.conf | Cloud configuration, contains claimed_id |
/var/lib/netdata/cloud.d/private.pem | RSA private key |
/var/lib/netdata/cloud.d/public.pem | RSA public key |
The Claimed ID is a random UUID generated during the claiming process. It's separate from the Machine GUID, as it uniquely identifies the link between the Agent and Cloud.
| Property | Description |
|---|---|
| Purpose | Authenticates the ACLK connection to Netdata Cloud |
| Generated | During the claiming process |
| Independence | Separate from Machine GUID - they can change independently |
| Regeneration | A new Claimed ID is generated each time the agent is re-claimed |
:::note
Custom Paths
If you customized [directories] in netdata.conf:
lib setting affects /var/lib/netdata/ pathscache setting affects /var/cache/netdata/ paths:::
:::note
On Windows, the ACLK credentials live under C:\Program Files\Netdata\var\lib\netdata\cloud.d\.
:::
When a Netdata Agent operates as a Parent (receiving metrics from Children), it stores metadata about all nodes it has seen.
| Property | Value |
|---|---|
| Database | /var/cache/netdata/netdata-meta.db |
| Table | node_instance |
| Contains | GUIDs of all Children ever connected |
Each metric in Netdata has a UUID. The metadata database (netdata-meta.db) links these UUIDs to nodes, charts, and dimensions. The dbengine stores metric samples indexed by these UUIDs.
| Component | Purpose |
|---|---|
Metadata (netdata-meta.db) | Links metric UUIDs to node GUIDs, charts, dimensions |
Dbengine (dbengine* directories) | Stores actual metric samples indexed by UUID |
The metadata acts as an index - without it, metric samples in dbengine cannot be associated with their source nodes or chart definitions.
The metadata database stores information about all nodes (including the Agent itself), but this data exists only to link nodes with their metrics. The Agent's identity is not determined by the database - it comes exclusively from:
When a database contains metadata for multiple nodes (from Children or Virtual Nodes), Netdata:
This is normal for Parent nodes receiving data from Children, and for Agents using Virtual Nodes. See VM Templates for implications when cloning VMs.
Read the GUID file:
Linux:
cat /var/lib/netdata/registry/netdata.public.unique.id
Windows (PowerShell):
Get-Content "C:\Program Files\Netdata\var\lib\netdata\registry\netdata.public.unique.id"
Yes, but it will appear as a new node in Netdata Cloud and Netdata Parents. Delete the GUID file and status backups, then restart Netdata. See VM Templates for the complete procedure.
</details> <details> <summary>Why does my node keep going offline/online in Cloud?</summary>Two agents likely have the same Machine GUID. This causes "flapping" as Cloud kicks the older connection when the second connects. Each agent needs a unique GUID.
</details> <details> <summary>What's the difference between Machine GUID, Node ID, and Claimed ID?</summary>Containers with ephemeral storage get unique GUIDs automatically on each start. Containers with persistent volumes at /var/lib/netdata/ retain their GUID across restarts.
No. A node can only exist in one Space. To move a node to a different Space, unclaim it first, then claim to the new Space.
</details> <details> <summary>Does ephemerality affect my node's identity?</summary>No. Identity and ephemerality are separate concepts:
A node can be permanent or ephemeral and still have a unique identity. Changing ephemerality does not change or reset identity.
</details> <details> <summary>Can I change a node's ephemerality after cloning?</summary>Yes. Edit netdata.conf in your Netdata config directory and restart Netdata:
[global]
is ephemeral node = yes # Enable ephemeral behavior
is ephemeral node = no # Revert to permanent (default)
Changes apply immediately. Ephemerality is stored as a host label and propagates to Parents and Netdata Cloud.
</details> <details> <summary>How do I rename a node?</summary>A node's display name is determined by the hostname setting in netdata.conf under the [global] section. To rename a node, edit netdata.conf and set:
[global]
hostname = my-new-node-name
Use the edit-config script to safely edit configuration files, then restart Netdata.
:::note
Changing the hostname does not change the Machine GUID, Node ID, or Claimed ID. The node remains the same entity in Netdata Cloud and on Parent nodes. Historical metrics are preserved because they are keyed by Machine GUID, not hostname.
:::
:::warning
Do not use NETDATA_HOSTNAME as an environment variable to set the hostname.
NETDATA_HOSTNAME is an output variable set by the Netdata daemon at runtime for use by plugins and scripts — it is not an input configuration. To override a node's name within Netdata, use the hostname setting in netdata.conf. If hostname is not set, Netdata falls back to the system/container hostname.
:::
The updated hostname propagates to Parent nodes and Netdata Cloud on the next connection.
For virtual nodes, see Does renaming a virtual node change its identity?.
</details><a id="does-renaming-a-virtual-node-change-its-identity"></a>
<details> <summary>Does renaming a virtual node change its identity?</summary>A virtual node's identity is determined by its guid field — not its hostname or name. The fields behave as follows:
guid — This is the vnode's identity. Changing it creates an entirely new node in Netdata Cloud. The old vnode's historical data remains under the old GUID but is no longer associated with the new one.hostname — This is used as the internal lookup key in the Agent and as the display name in dashboards. Changing hostname while keeping the same guid renames the display without creating a new node identity.name — The Agent ignores this field. When set to a value different from hostname, the Agent logs a warning and overrides it with hostname.To preserve data continuity when renaming a vnode, change only the hostname field in its YAML file in the vnodes/ directory of your Netdata config directory and keep the guid unchanged. If a true identity change is needed, accept that historical data belongs to the old identity.
The GUID for each virtual node is stored in its YAML configuration file in the vnodes/ directory of your Netdata config directory. To look it up:
# Default path — adjust if your Netdata config directory differs.
cat /etc/netdata/vnodes/*
Each file contains a guid field that uniquely identifies the vnode:
- name: my-remote-server
hostname: remote-server.example.com
guid: a1b2c3d4-e5f6-7890-abcd-ef1234567890
The guid value is the vnode's UUID. You do not need to query any internal database — the YAML configuration file is the authoritative source for the vnode GUID. See Virtual Nodes for the full configuration reference.