adampetrovic / unifi-poller

Collect your Unifi clients' & devices' data; send it to InfluxDB / Grafana

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

UniFi Poller

Collect your UniFi controller data and send it to an InfluxDB instance. Grafana Dashboards included. Updated 2019.

Description

Ubiquiti makes networking devices like switches, gateways (routers) and wireless access points. They have a line of equipment named UniFi that uses a controller to keep stats and simplify network device configuration. This controller can be installed on Windows, macOS and Linux. Ubiquiti also provides a dedicated hardware device called a CloudKey that runs the controller software.

UniFi Poller is a small Golang application that runs on Windows, macOS, Linux or Docker. It polls a UniFi controller every 30 seconds for measurements and stores the data in an Influx database. A small setup with 2 access points, 1 switch, 1 gateway and 40 clients produces over 3000 fields (metrics).

This application requires your controller to be running all the time. If you run a UniFi controller, there's no excuse not to install Influx, Grafana and this app. You'll have a plethora of data at your fingertips and the ability to craft custom graphs to slice the data any way you choose. Good luck!

Installation

See the Wiki! We have a special place for Docker Users.

Backstory

Okay, so here's the deal. I found a simple piece of code on GitHub that sorta did what I needed; we all know that story. I wanted more data, so I added more data collection. I believe I've completely rewritten every piece of original code, except the copyright/license file and that's fine with me. I probably wouldn't have made it this far if Garrett hadn't written the original code I started with. Many props my man.

The original code pulled only the client data. This app now pulls data for clients, access points, security gateways and switches. I currently own two UAP-AC-PROs, one USG-3 and one US-24-250W. If your devices differ this app may miss some data. I'm willing to help and make it better. Open an Issue and we'll figure out how to get things working for you.

What's this data good for?

I've been trying to get my UAP data into Grafana. Sure, google search that. You'll find this. And that's all you'll find. What if you don't want to deal with SNMP? Well, here you go. I've replicated 90% of what you see on those SNMP-powered dashboards with this Go app running on the same mac as my UniFi controller. All without enabling SNMP nor trying to understand those OIDs. Mad props to waterside for making this dashboard; it gave me a fantastic start to making my own.

I've also created another forum post you may use to get additional help.

Development

The "What now..." section below used to be a lot larger. I've received a lot of support, feedback and assistance from the community. Many thanks! This app is extremely stable with a tiny memory and cpu footprint. I imagine one day we'll figure out how to make it run on a CloudKey device directly; once I have one personally that will be my goal. In addition to stability, this app provides an intuitive installation and configuration process. Maintenance is a breeze too.

I'm not a software engineer, I'm a a firm believer in operational excellence above all else. To that end, this app shall remain easy, intuitive and highly adaptable. I'm totally open to add more configuration options if someone raises a need or concern.

You can control this app with puppet, chef, saltstack, homebrew or a simple bash script if you needed to. It's available for macOS, Linux and Docker. It comes with a systemd service unit that allows you automatically start it up on most Linux hosts. It works just fine on Windows too.

The unifi data extraction is provided as an external library, and you can import that code directly without futzing with this application. That means, if you wanted to do something like make telegraf collect your data instead of UniFi Poller you can achieve that with a little bit of Go code. You could write a small app that acts as a telegraf input plugin using the unifi library to grab the data from your controller. As a bonus, all of the code in UniFi Poller is also a library and can be used in other projects.

What now...

Are there other devices that need to be included?

I have: switch, router, access point. Three total, and the type structs are likely missing data for variants of these devices. e.g. Some UAPs have more radios, I probably didn't properly account for that. Some gateways have more ports, some switches have 10Gb, etc. These are things I do not have data on to write code for. If you have these devices, and want them graphed, open an Issue and lets discuss.

Radios, Frequencies, Interfaces, vAPs

My access points only seem to have two radios, one interface and vAP per radio. I'm not sure if the graphs, as-is, provide enough insight into APs with other configurations. Help me figure that out?

What's it look like?

Here's a picture of the Client dashboard. UniFi Clients Dashboard Image

Here's a picture of the USG dashboard. USG Dashboard Image

Here's a picture of the UAP dashboard. This only shows one device, but you can select multiple to put specific stats side-by-side. UAP Dashboard Image

The USW / Switch Dashboard is pretty big with one data-filled section per selected port. You can drill down into specific sites, switches, and ports. Compare ports in different sites side-by-side. So easy! This screenshot barely does it justice. USW Dashboard Image

Copyright & License

  • Copyright © 2016 Garrett Bjerkhoel.
  • Copyright © 2018-2019 David Newhall II.
  • See LICENSE for license information.

About

Collect your Unifi clients' & devices' data; send it to InfluxDB / Grafana

License:MIT License


Languages

Language:Go 56.8%Language:Makefile 35.3%Language:Shell 4.2%Language:Dockerfile 3.7%