Gominion, a Go implementation for the OpenNMS Minion

During DevJam 2020, I decided to work on two projects. One helping Chandra writing a client app for the OIA gRPC Server, and simultaneously work on a proof of concept for another gRPC related application.

This application, which I call “gominion”, is an implementation of a Minion purely in Go using gRPC for IPC.

There was an attempt to do the same in the past, which I checked out for educational purposes, but I decided to start over from scratch.

Features:

  • Clear interfaces for the RPC API covering and the Sink API, and the respective DTO, similar to how they are defined in OpenNMS.
  • Clear interfaces for Detectors and Poller Monitors with basic implementations.
  • Full support for SNMP (detect, monitor, data collection).
  • Registration service to discover implementations at runtime prior to starting the gRPC client.
  • SNMP Trap receiver
  • Syslog receiver

I’ll present a docker environment running the following:

  • PostgreSQL
  • Kafka
  • Zookeeper
  • OpenNMS
  • gRPC server

The reason for not using the embedded gRPC server is to show another project I worked prior DevJam, a Go implementation for the OpenNMS server: