---
description: Configure the KumoMTA NodeId, a per-instance UUID that identifies nodes in a cluster, aids reporting, and persists or falls back to a generated ID.
---

# Node ID

Each KumoMTA (`kumod`) instance can have its own `NodeId`, which is a UUID
intended to identify that specific instance within your own local cluster, help
with disambiguation during reporting, and also for future configuration
management/provisioning related functionality.

The `NodeId` is reported as the `nodeid` field in the [Log
Record](../../reference/log_record.md).

In the default configuration, KumoMTA will use the file
`/opt/kumomta/etc/.nodeid` to persist the `NodeId`.  If that file doesn't
exist, a new ID will be generated and stored in that location.

If persisting the `NodeId` isn't possible, we fall back to generating an
id as described in the section below.

## Environment Variables

The following environment variables influence the Node ID:

  * `KUMO_NODE_ID` - if this is set to a valid UUID, its value will be used as
    the `NodeId` for the instance.  You might contrive for your orchestration
    system to set this if you want total control over the relationship between
    the machine and node id.

  * `KUMO_NODE_ID_PATH` - this can be set to an alternative location into which
    the nodeid should be stored.  If this is not set, the path is assumed to be
    `/opt/kumomta/etc/.nodeid`.  If the path is not writable for some reason
    (e.g., permission denied), then a fallback nodeid will be computed.

## Fallback Node ID

If `NodeId` cannot be persisted then the following fallback procedure will be
used to compute an ID that will have a consistent value across restarts of
the kumod process:

  * First attempt to determine the MAC address of the primary network interface
    on the system

  * If we cannot determine the MAC address then use the POSIX `gethostid(3)`
    call to obtain a 32-bit stable identifier for the system, which is extended
    to 6 bytes to make it the same size and shape as a MAC address.

The MAC address bytes are then used to compute a V1 (time based) UUID with a
fixed timestamp, which produces a UUID that looks something like
`00000000-0000-1000-8000-XXXXXXXXXXXX` where the X's are the hex digits from
the MAC address.

Neither the true MAC address nor especially the `gethostid(3)` fallback are
ideal if the network interface might change across the lifetime of a logical
instance, so we recommend fixing any permission errors that might be preventing
persisting a true random UUID or alternatively, adjusting your node
provisioning to pre-define a `KUMO_NODE_ID` environment variable if you have
stronger opinions about how you want to provision and manage these things.

