-
Notifications
You must be signed in to change notification settings - Fork 17
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
NRPE support #32
Comments
Options that I can think of here are:
I'll take a look at this one to get an eye on how hard item 1 is above. |
Nice! I know that the NRPE protocol is fairly simple, but I haven't done any sort of a deep-dive - glad to see exploratory surgery! |
Schwing! MIT-licensed Go implementation: https://github.com/envimate/nrpe |
Hmm, seems to use OpenSSL and CGO rather than native Go SSL. Might need some work. Looks like NRPE only supports very nasty old SSL and that may be the reason. |
NRPE uses ADH (anonymous Diffie Helman) cipher suites which are not supported by Go's TLS package: https://golang.org/src/crypto/tls/cipher_suites.go . Apparently it could be implemented in a fork of the Go TLS lib (e.g. https://groups.google.com/forum/#!topic/golang-nuts/URhpLNZWgL8/discussion) . I suggest that if we decide to support NRPE for legacy integration purposes, we do it in a separate service that can do the nasty CGO and integration with the threaded/heavily locking OpenSSL stuff. We could then call between 9volt and that service with GRPC. Otherwise, we could:
Thoughts? |
Huge bummer about the copher suite not being supported. Let me ponder about this a bit longer after work. Will update soon. |
Optimally it should be the least difficult route for adoption. Requiring folks to update their existing NRPE setups across hosts would be a pain... Maybe we can build two 9volt's -- The issue that I foresee with having a separate cc: @relistan would like your opinion |
So I hacked up a little demo of my GRPC idea. https://github.com/relistan/nrpe-grpc The idea is you just run this on the box that has 9volt and you don't do much but have 9volt expect it to be there. (It's dead simple, so just manage it with S6 or something). Run it in a Docker container, whatever. It does nothing except isolate the OpenSSL libs and calls to NRPE to an external service. You can build and run the demo and then pass the client the name of the NRPE check to run. It doesn't currently pass params but you get the gist. Obviously 9volt would call the server directly, not using the CLI client. |
To sketch that out a little better, the idea would be a check in 9volt that is described as a "nrpe" check but which just makes grpc calls to the NRPE bridge. The configuration is all in 9volt and each check runs just like any other check. But instead of calling out to the remote node, it connects to the local NRPE bridge which does the actual NRPE call and replies back to 9volt. No coordination or redundancy is required for the bridge service, it relies on 9volt for everything that matters. You run one bridge per node that runs 9volt. Options for keeping it running are:
The second option wouldn't be that bad since the only thing that needs to happen is for it to actually stay running since it has no config. |
Yep @relistan - makes complete sense. I'd like to think about how it'll look from docker-side of things - do we bundle both of the bins in the same image and 9volt execs the nrpe helper (and keeps it running)? Maybe 9volt determines if it should launch the nrpe helper if an env var is set? Ie. Need to think about what it'll look like on bare-metal as well, turns out not everyone runs their infra on docker 😄 |
Looks like in mid-Summer 2016 NRPE got support for much better SSL. Not sure what 9volt should support but my guess is most people who would want to switch would be running old-school stuff. |
Not sure what all of this entails, leaving a ticket just to keep this in mind.
Would be nice if we were able to piggy back off of existing NRPE configs. Does this mean we implement a NRPE receiver? I don't recall how NRPE works exactly but I recall the protocol being pretty simple.
The text was updated successfully, but these errors were encountered: