I’m about to undertake a project to monitoring AWS resources with LibreNMS. As there is no SNMP support into AWS, I will be making extensive use of the AWS API for discovery and polling. I am comfortable with the coding aspects of this, and I’d be looking to release the code back to the community so that it can be incorporated back into the LibreNMS code base.
However, before I go too far with this, I would like to open up for discussion the best way to represent AWS resources within LibreNMS.
In the simplest case, I can have a single device within LibreNMS which represents an AWS “account” (or perhaps one region within an account). I can map much of the networking aspects to look like a large router - VPCs (or rather RouteTables) can look like VRFs, connections are like ports, and you’ve got static and BGP routing. There’s a lot of health information that I can pull in as sensors.
Then there’s EC2 instances (i.e. virtual machines). Maybe it’s best if I just pull in basic health information into the AWS module(s) - much like I believe the VMware support does - and leave monitoring of each instance (cpu, network, etc) to be handled in the same way as a regular host device would be, by leaving the user to install an SNMP agent on the instance.
My thinking is that I’d have a device (say, “us-east-1.amazonaws.com”) where you turn off SNMP and Ping polling, but then configure some additional settings (a bit like the IPMI stuff) to hold the region, access id and secret key. My concern with this approach is that I’d end up with a massive monolithic beast of a device with hundreds or thousands of sensors and ports, and maybe it’d be better to break it up into more functional units as different devices (and perhaps enable auto-creation of those smaller functional devices like device discovery does).
Thoughts anyone? Has anyone tried doing this in the past?