Custom Node Monitoring Integration Methods

I’m pretty new to OpenNMS and have setup a test environment as it looks quite promising for some of the things I’d like to accomplish.

In addition to traditional network monitoring (Ping and SNMP), I’m looking to monitor custom services on “virtual nodes” - where I have metrics and statuses I pull out of 3rd party APIs and databases for devices I can’t really poll directly. I think I can code up any necessary middleware, but what are the best ways to get this data into OpenNMS? My goal is to threshold on certain metrics (these are things like latency and packet loss) as well as have service up/down monitoring.

Do I have to use both a monitor (status) and a data collector (metrics), and both “polling” at the per-“node” and service level, or is there something where I can fetch and insert a poll cycle bulk set of statuses and metrics for many nodes and their interfaces / services at once?

I started playing around with the BSFMonitor as I saw it could store not only status but arbitrary (response) “times” as gauges in the results, but I wonder about (ab)using that and more so the scalability of doing that for a large number of nodes and services even if the script is kept simple (say fetching data out of a CSV on disk) every 5 minutes.

Anyway, I think I have the ability to pull together all this data, so it seems like I should look for an optimal way to insert it into OpenNMS rather than having it make thousands or more lookups / API calls (perhaps something like the XML collector to my own middleware or some on-disk data dumps) each poll cycle.

Worst case scenario, I know I can just send in my ultimately desired events in constructed myself, but I’d love to have OpenNMS tracking time series data, triggering threshold and service outage alarms, and building me graphs rather than only handling events.

Things I’ve been looking at:

  • Provision virtual nodes with made-up IPs and a custom service
  • BSFMonitor
  • Passive Status Keeper monitor in combination with possibly the XmlCollector

Any feedback or ideas are welcome!

If you are comfortable with writing Java code, I suggest you take a look the OpenNMS Integration API (OIA).

You can write your own logic to gather what you need, and then push both metrics and events to be associated with your nodes.

We have an example of this in action in the OpenDaylight plugin: https://github.com/OpenNMS/opennms-opendaylight-plugin/blob/1847ad5e474e05d0462fe2d789872667c75efc27/plugin/src/main/java/org/opennms/plugins/odl/metrics/MetricPusher.java#L87

1 Like