Skip to main content

Custom MMDB Database

Plugin: netflow-plugin Module: custom-mmdb

Overview

Enrich network flows with ASN, geographic, or internal network context from operator-built MMDB databases. Use Custom MMDB Database when you want the netflow plugin to read a MaxMind-format binary database (.mmdb) that your own tooling produces -- typical use cases are joining the upstream DB-IP / GeoLite2 data with internal AS labels, or producing a CIDR-tagged custom file directly from an internal IPAM. The plugin only requires the file to conform to the MaxMind DB binary format; whatever fields it exposes are picked up by the same decoder path used for DB-IP and MaxMind.

The decoder reads autonomous_system_number, autonomous_system_organization, and (optionally) a string asn field from the ASN database, and country.iso_code, subdivisions[].iso_code, city.names.en, location.latitude, location.longitude, plus the Netdata-specific netdata.ip_class flag from the geo database. Any other vendor-specific keys are ignored.

Note that *_GEO_CITY, *_GEO_LATITUDE, and *_GEO_LONGITUDE are written to the raw journal tier only -- the rollup tiers drop these high-cardinality fields. State and country survive into all four tiers.

For the full IP-intelligence concept (composition rule, ASN provider chain, auto-detect path order, dual-stack handling, hot reload semantics), see IP Intelligence.

You build (or download) the MMDB file with your own tooling, place it on the agent host, and point enrichment.geoip.asn_database and / or enrichment.geoip.geo_database at it in netflow.yaml. The plugin reloads on file change automatically (mechanism documented on the IP Intelligence page).

This integration is only supported on the following platforms:

  • Linux

This integration runs as a single instance per Netdata Agent.

Default Behavior

Auto-Detection

Not auto-detected. You must configure paths explicitly.

Limits

Coverage, schema quality, and freshness are entirely controlled by the custom MMDB build you provide. Invalid or missing files fail startup unless marked optional.

Performance Impact

Lookups are local MMDB reads with no per-flow network call. Memory use depends on the size and number of custom databases you configure.

Setup

Prerequisites

Build or obtain a standards-compliant MMDB file

The file must conform to the MaxMind DB binary format spec -- a binary search tree over IP prefixes plus a data section of type-length-value records. Validate with mmdblookup from the libmaxminddb-tools package before deploying:

mmdblookup --file your-custom.mmdb --ip 8.8.8.8

Common ways to produce a file:

Whatever fields you encode are read by the plugin only if they match the standard schema names listed in the metrics description above.

Configuration

Options

Point enrichment.geoip.asn_database and / or enrichment.geoip.geo_database at your custom MMDB file paths. Set optional: true while you iterate so a missing or malformed file does not block plugin startup.

Config options
OptionDescriptionDefaultRequired
enrichment.geoip.asn_databaseList of MMDB paths providing AS data. Multiple files compose -- per field, the last database returning a non-empty value wins.[]no
enrichment.geoip.geo_databaseList of MMDB paths providing geographic data. Same composition rule as the ASN list.[]no
enrichment.geoip.optionalWhen true, missing or unreadable files at startup are tolerated (the resolver starts with no databases). Recommended while testing a custom file.falseno

via File

The configuration file name for this integration is netflow.yaml.

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 netflow.yaml
Examples
Internal MMDB built with mmdbwriter

A custom build that combines public BGP data with internal CIDR labels, written atomically into the plugin's lookup directory by the operator's own pipeline.

enrichment:
geoip:
asn_database:
- /etc/netdata/internal-asn.mmdb
geo_database:
- /etc/netdata/internal-geo.mmdb
optional: false

Overlay a custom ASN file on top of the bundled DB-IP geo

Keep DB-IP for geographic data and use a custom MMDB only for AS labels (your IPAM-derived prefixes win because they appear last in the list -- the resolver merges per field, last non-empty wins).

Config
enrichment:
geoip:
asn_database:
- /var/cache/netdata/topology-ip-intel/topology-ip-asn.mmdb
- /etc/netdata/internal-asn.mmdb
geo_database:
- /var/cache/netdata/topology-ip-intel/topology-ip-geo.mmdb
optional: true

Iterating on a new custom MMDB

While you tune the build pipeline, mark the database optional so an absent or malformed file becomes a startup warning instead of a fatal error.

Config
enrichment:
geoip:
asn_database:
- /etc/netdata/wip-asn.mmdb
geo_database: []
optional: true

Lookups silently return empty

The custom file's schema is non-standard (for example, the ASN is encoded as a string instead of autonomous_system_number: uint32, or the country is at a non-standard path). The plugin only reads the standard MaxMind field names listed in the data-collection description. Validate with mmdblookup --file your-custom.mmdb --ip <known-public-ip> and confirm the standard fields are present at the expected paths.

Plugin fails to start with optional=false

File missing, unreadable, or not a valid MMDB at the configured path. Check permissions (the netdata user must be able to read the file) and re-validate with mmdblookup. Set optional: true while iterating.

Custom file refresh did not take effect

The plugin reloads custom databases the same way it reloads stock ones (signature-driven, in place). If the file was rewritten in place the plugin will pick it up; if it was edited byte-by-byte (rare with MMDB builders) verify size or mtime actually changed. The reload mechanism and its 30-second cadence are documented in IP Intelligence. Operational practice: have your build pipeline write the new MMDB to a temp file in the same directory and rename(2) it over the live path so the swap is atomic.


Do you have any feedback for this page? If so, you can open a new issue on our netdata/learn repository.