# BGP Monitoring Protocol

The BGP Monitoring Protocol (BMP) provides a convenient interface for obtaining route views. The integration in Meridian lets you use these route views, status updates, and statistics for monitoring and management.

BMP integration overview

## BMP TCP Parser

The BMP parser accepts BMP connections from router packets using a TCP Listener.

### Facts

 Class Name `org.opennms.netmgt.telemetry.protocols.bmp.parser.BmpParser`

### Configuration and use

Table 1. Optional parameters for the BMP Parser
Parameter Default Description

dnsLookupsEnabled

true

Enable or disable DNS resolution of router and peer hostnames.

1000

Limit the number of parallel parsing operations.

5 minutes

Limit the amount of time to wait for a saturated bulkhead (in milliseconds).

## Configure BMP listener on a Minion

`` needs to be capitalized b/c it’s our official name for this component. This is one reason I’m not a fan of NH style of sentence-case headings. :-)

To enable and configure a TCP listener for BMP on Minion, connect to the Karaf Console and set the following properties:

 The protocol must also be enabled on Meridian for the messages to be processed.
``````$ssh -p 8201 admin@localhost ... admin@minion()> config:edit --alias tcp-5000 --factory org.opennms.features.telemetry.listeners admin@minion()> config:property-set name BMP admin@minion()> config:property-set class-name org.opennms.netmgt.telemetry.listeners.TcpListener admin@minion()> config:property-set parameters.port 5000 admin@minion()> config:property-set parsers.0.name BMP admin@minion()> config:property-set parsers.0.class-name org.opennms.netmgt.telemetry.protocols.bmp.parser.BmpParser admin@minion()> config:update`````` If you do not specify the queue name, the fallback is the name of the parser. ## BMP telemetry adapter The BMP telemetry adapter handles BMP statistics received and parsed by the BMP parser. Statistics received from the router are associated as performance data with that router. The router must exist as a regular node in Meridian. Meridian uses the IP address exported in BMP messages to associate a router with the appropriate Meridian node. In addition, the node’s metadata can be used to specify a BGP ID, which will be used to associate routers. If the parameter `metaDataNodeLookup` is not empty, it will be interpreted as a `context:key` metadata name, which will be used to look up a node that has stored the queried BGP ID as a value in the specified key. ### Facts  Class Name `org.opennms.netmgt.telemetry.protocols.bmp.adapter.BmpTelemetryAdapter` ### Configuration and use Table 2. Optional parameters for the BMP telemetry adapter Parameter Default Description metaDataNodeLookup n/a Enables lookup using BGP IDs. ## BMP Peer Status Adapter The BMP peer status adapter creates events for peer status changes. It handles BMP Peer Up and Down messages that the BMP Parser receives and parses, and converts to Meridian events. Meridian associates the created events with the router sending the messages. This router must exist as regular node in Meridian. The events are called `uei.opennms.org/bmp/peerUp` and `uei.opennms.org/bmp/peerDown`. Meridian uses the IP address exporting BMP messages to associate a router with the particular Meridian node. In addition, the node’s metadata can specify a BGP ID, which will then be used to associate routers. If the parameter `metaDataNodeLookup` is not empty, it will be interpreted as a `context:key` metadata name, which will be used to lookup a node that has stored the queried BGP ID as a value in exactly this key. ### Facts  Class Name `org.opennms.netmgt.telemetry.protocols.bmp.adapter.BmpPeerStatusAdapter` ### Configuration and use Table 3. Optional parameters for the BMP telemetry adapter Parameter Default Description metaDataNodeLookup n/a Enables lookup using BGP IDs. ## OpenBMP integration adapter The OpenBMP integration adapter can integrate with an existing OpenBMP installation. It handles BMP messages the BMP Parser receives and parses, and creates OpenBMP-compatible messages, which are then passed to the OpenBMP Kafka cluster. This setup replaces the collector component of OpenBMP. ### Facts  Class Name `org.opennms.netmgt.telemetry.protocols.bmp.adapter.openbmp.BmpIntegrationAdapter` ### Configuration and use Table 4. Optional parameters for the OpenBMP Integration Adapter Parameter Default Description kafka.* n/a Uses options to create OpenBMP Kafka producer. Enables all known Kafka settings, but with `kafka.` prefixed. topicPrefix n/a Prefix used before each Kafka topic. ## BMP persisting adapter The BMP Persisting adapter persists OpenBMP messages received without the need for any additional OpenBMP components. It handles BMP messages the BMP Parser receives and parses, and creates OpenBMP-compatible messages, which are then persisted in OpenNMS Postgres DB. ### Facts  Class Name `org.opennms.netmgt.telemetry.protocols.bmp.adapter.BmpPersistingAdapter` Stats and retrieving data from external data for rpki/routeinfo/asinfo are handled only on Meridian. The `opennms-telemetry-bmp-stats` feature needs to be installed on Meridian. BMP Stats are stored as time series data in Postgres with TimescaleDB extension. TimescaleDB 2.x extension installation instructions. For `opennms` schema, TimescaleDB extension can be added with -t option on install DB script(for example, `$OPENNMS_HOME/bin/install -dist`). If the TimescaleDB extension is not installed, stat tables will not be converted to hypertables.

To load the adapter while Meridian is running, use the following command in the Karaf shell.

``admin@opennms()> feature:install opennms-telemetry-bmp-stats``

To ensure that the feature continues to be installed on subsequent restarts, add `opennms-telemetry-bmp-stats` to the `featuresBoot` property in `$OPENNMS_HOME/etc/org.apache.karaf.features.cfg`. ### Configuration BMP persistence for external sources You can configure the following parameters when connecting to external sources like RPKI or RouteInfo DB tables. Name Default Description rpkiUrl http://localhost:8080/api/export.json Rest API URL to retrieve RPKI ROAs. rpkiUsername Username for RPKI Rest API. rpkiPassword Password for RPKI Rest API. routeInfoDbPath${karaf.etc}/routeinfo

Path for RouteInfo DB tables.

Configure the above parameters as follows:

``````$ssh -p 8101 admin@localhost ... admin@opennms()> config:edit org.opennms.features.telemetry.protocols.bmp.adapter.persist admin@opennms()> config:property-set rpkiUrl http://localhost:8080/api/export.json admin@opennms()> config:update`````` #### Running BMP Adapter on Sentinel BMP Persisting Adapter can also run on Sentinel. Sentinel must start the appropriate BMP adapter. In Sentinel, adapters are configured either by placing a .cfg file in$SENTINEL_HOME/etc or via a `config:edit` statement.

The following example configures the consumption of `BMP` messages and saves the configuration in `$SENTINEL_HOME/etc/org.opennms.features.telemetry.adapters-bmp.cfg`. First, login to the Karaf Shell. ``````$ ssh -p 8301 admin@localhost
...
``````admin@opennms()> feature:install sentinel-core
 1 Needs datasource configuration setup per Sentinel Flow Processing. 2 Can alternatively be set to `sentinel-kafka` based on your selected message broker. Refer to Sentinel Kafka Configuration.
 When running Kafka as the broker, the consumer config needs to have the `auto.offset.reset=earliest` setting, otherwise the BMP Adapter may miss some of the early messages, like the PeerUp notification, which are essential for proper BMP state.