UniFi AP Dashboard

Dashboard

Ubiquiti Networks UniFi AP Templated Dashboard
Last updated: 4 months ago

Downloads: 2383

Reviews: 1

  • Snap4.png
    Snap4.png
  • Snap3.png
    Snap3.png
  • Snap2.png
    Snap2.png
  • Screen Shot 2020-02-06 at 22.51.30.png
    Screen Shot 2020-02-06 at 22.51.30.png

Overview

Detailed dashboard for monitoring of Ubiquiti UniFi Access Points.

Please Note that the collector configuration has been updated to support the current dashboard. If you are updating a previous revision of the dashboard please check the collector configuration as well to ensure it is current. The configuration is now dated for comparison.

This dashboard works with Gen2 and later APs. Gen1 APs do support monitoring via SNMP, however they provide very little instrumentation due to the lack of support for the IF-MIB and UBNT-UniFi-MIB mibs.

The Telegraf collector configuration is MIB-based so all of the required MIBs will need to be available for the collector to perform the needed translations. Most SNMP distributions available on most platforms already provide these with one exception (see below). This configuration uses the "new" SNMP plugin for Telegraf, so SNMP monitoring must be enabled in the UniFi controller. The 'agents' list in the configuration is of the actual APs themselves, however, and not the controller.

This dashboard does display the SNMP contact and location detail, but there is currently no method to configure these via the UniFi controller. Instead, these may be set (optionally, as desired) using the method described in UniFi - How to make persistent changes to UAP(s) system.cfg. Two simple additions to the config.properties file apply this to all APs in a given site (adjust the item number and values as appropriate):

config.system_cfg.1=snmp.contact=admin@mydomain.com
config.system_cfg.2=snmp.location=somewhere

Notes

The Unifi MIB locations may be found in the UniFi Updates Blog announcements for UniFi releases. These should be downloaded and placed in the default SNMP MIBs location on the server where the Telegraf instance is running.

Change history

6 February 2020: Removed CCQ as it is no longer supported for UniFi APs. It never actually worked anyway; Added radio band to to legends as appropriate; Refactored channel and power level; Cleaned up many queries. Note this update requires an updated telegraf inputs configuration as well.

11 April 2017 (v4): Added selector for radio; Updated channel/power panels to properly reflect both radios when multiple SSIDs are configured. This change requires an updated Telegraf collector configuration dated no earlier than this same date.

References

This dashboard and dependent configurations may also be found at https://github.com/WaterByWind/grafana-dashboards

License

This dashboard is distributed under The MIT License (MIT)

Collector Configuration Details

Telegraf SNMP plugin configuration (Place in telegraf.d or add to telegraf.conf).

Note: You will need to change/set these in the configuration below:

  • SNMP community string for input plugin
  • URL to your InfluxDB instance for output plugin
  • InfluxDB username & password for output plugin
# Telegraf Configuration
#
###############################################################################
#                            INPUT PLUGINS                                    #
###############################################################################
##
## Retrieves details via SNMP from UniFI APs (Gen 2 and later)
##
## Extra MIBs required:
## - http://dl.ubnt-ut.com/snmp/UBNT-MIB
## - http://dl.ubnt-ut.com/snmp/UBNT-UniFi-MIB
#
[[inputs.snmp]]
  # List of agents to poll
  agents = [ "uap1", "uap2" ]
  # Polling interval
  interval = "60s"
  # Timeout for each SNMP query.
  timeout = "10s"
  # Number of retries to attempt within timeout.
  retries = 3
  # SNMP version
  version = 2
  # SNMP community string.
  community = "public"
  # Measurement name
  name = "snmp.UAP"
  ##
  ## System Details
  ##
  #  System name (hostname)
  [[inputs.snmp.field]]
    is_tag = true
    name = "sysName"
    oid = "RFC1213-MIB::sysName.0"
  #  System vendor OID
  [[inputs.snmp.field]]
    name = "sysObjectID"
    oid = "RFC1213-MIB::sysObjectID.0"
  #  System description
  [[inputs.snmp.field]]
    name = "sysDescr"
    oid = "RFC1213-MIB::sysDescr.0"
  #  System contact
  [[inputs.snmp.field]]
    name = "sysContact"
    oid = "RFC1213-MIB::sysContact.0"
  #  System location
  [[inputs.snmp.field]]
    name = "sysLocation"
    oid = "RFC1213-MIB::sysLocation.0"
  #  System uptime
  [[inputs.snmp.field]]
    name = "sysUpTime"
    oid = "RFC1213-MIB::sysUpTime.0"
  #  UAP model
  [[inputs.snmp.field]]
    name = "unifiApSystemModel"
    oid = "UBNT-UniFi-MIB::unifiApSystemModel.0"
  #  UAP firmware version
  [[inputs.snmp.field]]
    name = "unifiApSystemVersion"
    oid = "UBNT-UniFi-MIB::unifiApSystemVersion.0"
  #  Per-interface traffic, errors, drops
  [[inputs.snmp.table]]
    oid = "IF-MIB::ifTable"
    [[inputs.snmp.table.field]]
      is_tag = true
      oid = "IF-MIB::ifDescr"
  ##
  ## Interface Details & Metrics
  ##
  #  Wireless interfaces
  [[inputs.snmp.table]]
    oid = "UBNT-UniFi-MIB::unifiRadioTable"
    [[inputs.snmp.table.field]]
      is_tag = true
      oid = "UBNT-UniFi-MIB::unifiRadioName"
    [[inputs.snmp.table.field]]
      is_tag = true
      oid = "UBNT-UniFi-MIB::unifiRadioRadio"
  #  BSS instances
  [[inputs.snmp.table]]
    oid = "UBNT-UniFi-MIB::unifiVapTable"
    [[inputs.snmp.table.field]]
      is_tag = true
      oid = "UBNT-UniFi-MIB::unifiVapName"
    [[inputs.snmp.table.field]]
      is_tag = true
      oid = "UBNT-UniFi-MIB::unifiVapRadio"
    [[inputs.snmp.table.field]]
      is_tag = true
      oid = "UBNT-UniFi-MIB::unifiVapEssId"
  #  Ethernet interfaces
  [[inputs.snmp.table]]
    oid = "UBNT-UniFi-MIB::unifiIfTable"
    [[inputs.snmp.table.field]]
      is_tag = true
      oid = "UBNT-UniFi-MIB::unifiIfName"
  ##
  ## SNMP metrics
  ##
  #  Number of SNMP messages received
  [[inputs.snmp.field]]
    name = "snmpInPkts"
    oid = "SNMPv2-MIB::snmpInPkts.0"
  #  Number of SNMP Get-Request received
  [[inputs.snmp.field]]
    name = "snmpInGetRequests"
    oid = "SNMPv2-MIB::snmpInGetRequests.0"
  #  Number of SNMP Get-Next received
  [[inputs.snmp.field]]
    name = "snmpInGetNexts"
    oid = "SNMPv2-MIB::snmpInGetNexts.0"
  #  Number of SNMP objects requested
  [[inputs.snmp.field]]
    name = "snmpInTotalReqVars"
    oid = "SNMPv2-MIB::snmpInTotalReqVars.0"
  #  Number of SNMP Get-Response received
  [[inputs.snmp.field]]
    name = "snmpInGetResponses"
    oid = "SNMPv2-MIB::snmpInGetResponses.0"
  #  Number of SNMP messages sent
  [[inputs.snmp.field]]
    name = "snmpOutPkts"
    oid = "SNMPv2-MIB::snmpOutPkts.0"
  #  Number of SNMP Get-Request sent
  [[inputs.snmp.field]]
    name = "snmpOutGetRequests"
    oid = "SNMPv2-MIB::snmpOutGetRequests.0"
  #  Number of SNMP Get-Next sent
  [[inputs.snmp.field]]
    name = "snmpOutGetNexts"
    oid = "SNMPv2-MIB::snmpOutGetNexts.0"
  #  Number of SNMP Get-Response sent
  [[inputs.snmp.field]]
    name = "snmpOutGetResponses"
    oid = "SNMPv2-MIB::snmpOutGetResponses.0"
  #  Processor listing
  [[inputs.snmp.table]]
    index_as_tag = true
    oid = "HOST-RESOURCES-MIB::hrProcessorTable"
  ##
  ## Host performance metrics
  ##
  #  System Load Average
  [[inputs.snmp.table]]
    oid = "UCD-SNMP-MIB::laTable"
    [[inputs.snmp.table.field]]
      oid = "UCD-SNMP-MIB::laNames"
      is_tag = true
  ##
  ## System Memory (physical/virtual)
  ##
  #  Size of swap sapce configured
  [[inputs.snmp.field]]
    name = "memTotalSwap"
    oid = "UCD-SNMP-MIB::memTotalSwap.0"
  #  Size of swap sapce unused/avail
  [[inputs.snmp.field]]
    name = "memAvailSwap"
    oid = "UCD-SNMP-MIB::memAvailSwap.0"
  #  Size of real/phys mem installed
  [[inputs.snmp.field]]
    name = "memTotalReal"
    oid = "UCD-SNMP-MIB::memTotalReal.0"
  #  Size of real/phys mem unused/avail
  [[inputs.snmp.field]]
    name = "memAvailReal"
    oid = "UCD-SNMP-MIB::memAvailReal.0"
  #  Total amount of mem unused/avail
  [[inputs.snmp.field]]
    name = "memTotalFree"
    oid = "UCD-SNMP-MIB::memTotalFree.0"
  #  Size of mem used as shared memory
  [[inputs.snmp.field]]
    name = "memShared"
    oid = "UCD-SNMP-MIB::memShared.0"
  #  Size of mem used for buffers
  [[inputs.snmp.field]]
    name = "memBuffer"
    oid = "UCD-SNMP-MIB::memBuffer.0"
  #  Size of mem used for cache
  [[inputs.snmp.field]]
    name = "memCached"
    oid = "UCD-SNMP-MIB::memCached.0"
  #

Dependencies: