Skip to content

Enrich with OpenStack

OpenStack is the primary enrichment provider. With it configured, Northwatch resolves OVN UUIDs and external_ids to human-readable OpenStack names — networks, ports, instances, routers and floating IPs — so a port reads as web-server-01 on project production instead of a bare UUID.

Enrichment is always additive: the core works without it, and turning it on only adds context.

Configure with flags

Setting --os-auth-url enables the OpenStack provider for the default cluster. The standard OS_* environment variables are read as defaults, so an existing OpenStack RC file mostly works as-is:

bash
./bin/northwatch \
  --ovn-nb-addr tcp:10.0.0.1:6641 \
  --ovn-sb-addr tcp:10.0.0.1:6642 \
  --os-auth-url https://keystone.example.com:5000/v3 \
  --os-username northwatch \
  --os-password secret \
  --os-project-name admin \
  --os-domain-name Default \
  --os-region-name RegionOne
FlagEnv var
--os-auth-urlOS_AUTH_URL
--os-usernameOS_USERNAME
--os-passwordOS_PASSWORD
--os-project-nameOS_PROJECT_NAME
--os-domain-nameOS_USER_DOMAIN_NAME
--os-region-nameOS_REGION_NAME

Configure per cluster

In a multi-cluster setup, put the credentials in the cluster's enrichment block instead (see Monitor multiple clusters):

json
{
  "name": "production",
  "ovn_nb_addr": "tcp:10.0.0.1:6641",
  "ovn_sb_addr": "tcp:10.0.0.1:6642",
  "enrichment": {
    "type": "openstack",
    "os_auth_url": "https://keystone.example.com:5000/v3",
    "os_username": "northwatch",
    "os_password": "secret",
    "os_project_name": "admin",
    "os_domain_name": "Default",
    "os_region_name": "RegionOne"
  }
}

What gets resolved

Enrichment keys off the neutron:* external_ids Neutron writes onto the NB objects. Names already present in external_ids are surfaced directly; a device_id and project_id trigger a Nova / Keystone lookup.

OVN entityexternal_ids / keyResolved to
Logical_Switchneutron:network_name, neutron:project_idNetwork name; project name (Keystone)
Logical_Switch_Portneutron:port_name, neutron:device_id, neutron:project_idPort name; Nova instance name (when device_owner is compute:nova); project name (Keystone)
Logical_Routerneutron:router_name, neutron:project_idRouter name; project name (Keystone)
NAT (floating IP)neutron:fip_id, neutron:fip_external_macFloating-IP id and external MAC (surfaced as extra, no API call)

Tune the cache

Enrichment results are cached. Control the refresh interval with --enrichment-cache-ttl (default 5m):

bash
./bin/northwatch ... --enrichment-cache-ttl 10m

Confirm it is on

When enrichment is configured, the server advertises an enrich capability:

bash
curl -s http://localhost:8080/api/v1/capabilities

The correlated/* endpoints then include the resolved names inline. For the design, see Enrichment.