Add Unifi Controller with integrated Unifi-Poller (#75)
* Add Unifi Controller with integrated Unifi-Poller Install & Update uses 'latest' release. Persistent data using influxdb. Unifi Poller now optional * fix global dataset refs * move unifi_poller bootscript into rc folder * Apply suggestions from code review * Update jails/unifi/includes/rc/mongod Forgot to add one suggestion from review. * Added shellcheck ignores for all RC scripts Shellcheck doesn't play nice with RC scripts, those advices are often either wrong, or very hard (not worth it) to change enough to get it to pass and work. * Last rc ignores for shellcheck * Update jails/unifi/install.sh * Shellcheck to shellcheck Making shellcheck lowercase for parsing Co-authored-by: Kjeld Schouten-Lebbing <kjeld@schouten-lebbing.nl>
This commit is contained in:
parent
616eb2a432
commit
66e997069a
@ -101,3 +101,14 @@ influxdb: influxdb
|
||||
ip4_addr: 192.168.1.250/24
|
||||
gateway: 192.168.1.1
|
||||
database: influxdb
|
||||
|
||||
unifi: unifi
|
||||
ip4_addr: 192.168.1.251/24
|
||||
gateway: 192.168.1.1
|
||||
unifi_poller: true
|
||||
db_jail: influxdb
|
||||
up_db_name: unifi
|
||||
up_db_user: unifi-poller
|
||||
up_db_password: unifi-poller
|
||||
up_user: upoller
|
||||
up_password: upoller
|
||||
|
@ -72,6 +72,7 @@ Basic means: The same setup as a FreeNAS plugin would've, DHCP on bridge0.
|
||||
- py-kms
|
||||
- nextcloud
|
||||
- bitwarden
|
||||
- unifi controller
|
||||
|
||||
#### Backend
|
||||
- mariadb
|
||||
|
2
jails/unifi/config.yml
Normal file
2
jails/unifi/config.yml
Normal file
@ -0,0 +1,2 @@
|
||||
unifi: unifi
|
||||
pkgs: jq unifi5
|
45
jails/unifi/includes/mongodb.conf
Normal file
45
jails/unifi/includes/mongodb.conf
Normal file
@ -0,0 +1,45 @@
|
||||
# mongod.conf
|
||||
|
||||
# for documentation of all options, see:
|
||||
# http://docs.mongodb.org/manual/reference/configuration-options/
|
||||
|
||||
# where to write logging data.
|
||||
systemLog:
|
||||
destination: file
|
||||
logAppend: true
|
||||
path: /var/db/mongodb/mongod.log
|
||||
|
||||
# Where and how to store data.
|
||||
storage:
|
||||
dbPath: /config/mongodb
|
||||
journal:
|
||||
enabled: true
|
||||
# engine:
|
||||
# mmapv1:
|
||||
# wiredTiger:
|
||||
|
||||
# how the process runs
|
||||
processManagement:
|
||||
fork: true # fork and run in background
|
||||
pidFilePath: /var/db/mongodb/mongod.lock # location of pidfile
|
||||
timeZoneInfo: /usr/share/zoneinfo
|
||||
|
||||
# network interfaces
|
||||
net:
|
||||
port: 27017
|
||||
bindIp: 127.0.0.1 # Listen to local interface only, comment to listen on all interfaces.
|
||||
|
||||
|
||||
#security:
|
||||
|
||||
#operationProfiling:
|
||||
|
||||
#replication:
|
||||
|
||||
#sharding:
|
||||
|
||||
## Enterprise-Only Options
|
||||
|
||||
#auditLog:
|
||||
|
||||
#snmp:
|
64
jails/unifi/includes/rc/mongod
Normal file
64
jails/unifi/includes/rc/mongod
Normal file
@ -0,0 +1,64 @@
|
||||
#!/bin/sh
|
||||
# shellcheck disable=SC1091,SC2034,SC2223,SC2154,SC1090,SC2046,SC2086,SC2155,SC2181,SC2006
|
||||
|
||||
# PROVIDE: mongod
|
||||
# REQUIRE: NETWORK ldconfig
|
||||
# KEYWORD: shutdown
|
||||
#
|
||||
# Add the following lines to /etc/rc.conf.local or /etc/rc.conf
|
||||
# to enable this service:
|
||||
#
|
||||
# mongod_enable (bool): Set to "NO" by default.
|
||||
# Set it to "YES" to enable mongod.
|
||||
# mongod_limits (bool): Set to "NO" by default.
|
||||
# Set it to yes to run `limits -e -U mongodb`
|
||||
# just before mongod starts.
|
||||
# mongod_dbpath (str): Default to "/var/db/mongodb"
|
||||
# Base database directory.
|
||||
# mongod_flags (str): Custom additional arguments to be passed to mongod.
|
||||
# Default to "--logpath ${mongod_dbpath}/mongod.log --logappend".
|
||||
# mongod_config (str): Default to "/usr/local/etc/mongodb.conf"
|
||||
# Path to config file
|
||||
#
|
||||
|
||||
. /etc/rc.subr
|
||||
|
||||
name="mongod"
|
||||
rcvar=mongod_enable
|
||||
|
||||
load_rc_config $name
|
||||
|
||||
: ${mongod_enable="NO"}
|
||||
: ${mongod_limits="NO"}
|
||||
: ${mongod_dbpath="/config/mongodb"}
|
||||
: ${mongod_flags="--logpath ${mongod_dbpath}/mongod.log --logappend --setParameter=disabledSecureAllocatorDomains=\*"}
|
||||
: ${mongod_user="mongodb"}
|
||||
: ${mongod_group="mongodb"}
|
||||
: ${mongod_config="/usr/local/etc/mongodb.conf"}
|
||||
|
||||
pidfile="${mongod_dbpath}/mongod.lock"
|
||||
command=/usr/local/bin/${name}
|
||||
command_args="--config $mongod_config --dbpath $mongod_dbpath --fork >/dev/null 2>/dev/null"
|
||||
start_precmd="${name}_prestart"
|
||||
|
||||
mongod_create_dbpath()
|
||||
{
|
||||
mkdir "${mongod_dbpath}" >/dev/null 2>/dev/null
|
||||
[ $? -eq 0 ] && chown -R "${mongod_user}":"${mongod_group}" "${mongod_dbpath}"
|
||||
}
|
||||
|
||||
mongod_prestart()
|
||||
{
|
||||
if [ ! -d "${mongod_dbpath}" ]; then
|
||||
mongod_create_dbpath || return 1
|
||||
fi
|
||||
if checkyesno mongod_limits; then
|
||||
# TODO check this and clean this up
|
||||
# Shellcheck disable=SC2046,SC2006
|
||||
eval `/usr/bin/limits -e -U ${mongod_user}` 2>/dev/null
|
||||
else
|
||||
return 0
|
||||
fi
|
||||
}
|
||||
|
||||
run_rc_command "$1"
|
87
jails/unifi/includes/rc/unifi
Normal file
87
jails/unifi/includes/rc/unifi
Normal file
@ -0,0 +1,87 @@
|
||||
#!/bin/sh
|
||||
# shellcheck disable=SC1091,SC2034,SC2223,SC2154,SC1090,SC2046,SC2086,SC2155,SC2237
|
||||
#
|
||||
# Created by: Mark Felder <feld@FreeBSD.org>
|
||||
# $FreeBSD: branches/2020Q2/net-mgmt/unifi5/files/unifi.in 512281 2019-09-18 17:37:59Z feld $
|
||||
#
|
||||
|
||||
# PROVIDE: unifi
|
||||
# REQUIRE: LOGIN
|
||||
# KEYWORD: shutdown
|
||||
|
||||
#
|
||||
# Add the following line to /etc/rc.conf to enable `unifi':
|
||||
#
|
||||
# unifi_enable="YES"
|
||||
#
|
||||
# Other configuration settings for unifi that can be set in /etc/rc.conf:
|
||||
#
|
||||
# unifi_user (str)
|
||||
# This is the user that unifi runs as
|
||||
# Set to unifi by default
|
||||
#
|
||||
# unifi_group (str)
|
||||
# This is the group that unifi runs as
|
||||
# Set to unifi by default
|
||||
#
|
||||
# unifi_chdir (str)
|
||||
# This is the directory that unifi chdirs into before starting
|
||||
# Set to /usr/local/share/java/unifi by default
|
||||
#
|
||||
# unifi_java_home (str)
|
||||
# The path to the base directory for the Java to use to run unifi
|
||||
# Defaults to /usr/local/openjdk8
|
||||
#
|
||||
# unifi_javaflags (str)
|
||||
# Flags passed to Java to run unifi
|
||||
# Set to "-Djava.awt.headless=true -Xmx1024M" by default
|
||||
#
|
||||
|
||||
. /etc/rc.subr
|
||||
name=unifi
|
||||
|
||||
rcvar=unifi_enable
|
||||
load_rc_config ${name}
|
||||
|
||||
: ${unifi_enable:=NO}
|
||||
: ${unifi_user:=unifi}
|
||||
: ${unifi_group:=unifi}
|
||||
: ${unifi_chdir=/config/controller/unifi}
|
||||
: ${unifi_java_home=/usr/local/openjdk8}
|
||||
: ${unifi_javaflags="-Djava.awt.headless=true -Xmx1024M"}
|
||||
|
||||
pidfile="/var/run/unifi/${name}.pid"
|
||||
procname=${unifi_java_home}/bin/java
|
||||
command=/usr/sbin/daemon
|
||||
command_args="-f -p ${pidfile} ${unifi_java_home}/bin/java ${unifi_javaflags} com.ubnt.ace.Launcher start"
|
||||
start_precmd=start_precmd
|
||||
stop_precmd=stop_precmd
|
||||
stop_postcmd=stop_postcmd
|
||||
|
||||
export CLASSPATH=$(echo ${unifi_chdir}/lib/*.jar | tr ' ' ':')
|
||||
|
||||
start_precmd()
|
||||
{
|
||||
if [ ! -e /var/run/unifi ] ; then
|
||||
install -d -o unifi -g unifi /var/run/unifi;
|
||||
fi
|
||||
}
|
||||
|
||||
stop_precmd()
|
||||
{
|
||||
if [ -r ${pidfile} ]; then
|
||||
_UNIFIPID=$(check_pidfile ${pidfile} ${procname})
|
||||
export _UNIFI_CHILDREN=$(pgrep -P ${_UNIFIPID})
|
||||
fi
|
||||
}
|
||||
|
||||
stop_postcmd()
|
||||
{
|
||||
if ! [ -z ${_UNIFI_CHILDREN} ]; then
|
||||
echo "Cleaning up leftover child processes."
|
||||
kill $sig_stop ${_UNIFI_CHILDREN}
|
||||
wait_for_pids ${_UNIFI_CHILDREN}
|
||||
fi
|
||||
}
|
||||
|
||||
run_rc_command "$1"
|
36
jails/unifi/includes/rc/unifi_poller
Normal file
36
jails/unifi/includes/rc/unifi_poller
Normal file
@ -0,0 +1,36 @@
|
||||
#!/bin/sh
|
||||
# shellcheck disable=SC1091,SC2034,SC2223,SC2154,SC1090,SC2046
|
||||
#
|
||||
# FreeBSD rc.d startup script for unifi-poller.
|
||||
#
|
||||
# PROVIDE: unifi-poller
|
||||
# REQUIRE: networking syslog
|
||||
# KEYWORD:
|
||||
|
||||
. /etc/rc.subr
|
||||
|
||||
name="unifi_poller"
|
||||
real_name="unifi-poller"
|
||||
rcvar="unifi_poller_enable"
|
||||
unifi_poller_command="/usr/local/bin/${real_name}"
|
||||
unifi_poller_user="nobody"
|
||||
unifi_poller_config="/config/up.conf"
|
||||
pidfile="/var/run/${real_name}/pid"
|
||||
|
||||
# This runs `daemon` as the `unifi_poller_user` user.
|
||||
command="/usr/sbin/daemon"
|
||||
command_args="-P ${pidfile} -r -t ${real_name} -T ${real_name} -l daemon ${unifi_poller_command} -c ${unifi_poller_config}"
|
||||
|
||||
load_rc_config ${name}
|
||||
: ${unifi_poller_enable:=no}
|
||||
|
||||
# Make a place for the pid file.
|
||||
mkdir -p $(dirname ${pidfile})
|
||||
chown -R $unifi_poller_user $(dirname ${pidfile})
|
||||
|
||||
# Suck in optional exported override variables.
|
||||
# ie. add something like the following to this file: export UP_POLLER_DEBUG=true
|
||||
[ -f "/usr/local/etc/defaults/${real_name}" ] && . "/usr/local/etc/defaults/${real_name}"
|
||||
|
||||
# Go!
|
||||
run_rc_command "$1"
|
106
jails/unifi/includes/up.conf
Normal file
106
jails/unifi/includes/up.conf
Normal file
@ -0,0 +1,106 @@
|
||||
# UniFi Poller v2 primary configuration file. TOML FORMAT #
|
||||
###########################################################
|
||||
|
||||
[poller]
|
||||
# Turns on line numbers, microsecond logging, and a per-device log.
|
||||
# The default is false, but I personally leave this on at home (four devices).
|
||||
# This may be noisy if you have a lot of devices. It adds one line per device.
|
||||
debug = false
|
||||
|
||||
# Turns off per-interval logs. Only startup and error logs will be emitted.
|
||||
# Recommend enabling debug with this setting for better error logging.
|
||||
quiet = true
|
||||
|
||||
# Load dynamic plugins. Advanced use; only sample mysql plugin provided by default.
|
||||
plugins = []
|
||||
|
||||
#### OUTPUTS
|
||||
|
||||
# If you don't use an output, you can disable it.
|
||||
|
||||
[prometheus]
|
||||
disable = true
|
||||
# This controls on which ip and port /metrics is exported when mode is "prometheus".
|
||||
# This has no effect in other modes. Must contain a colon and port.
|
||||
http_listen = "0.0.0.0:9130"
|
||||
report_errors = false
|
||||
|
||||
[influxdb]
|
||||
disable = false
|
||||
# InfluxDB does not require auth by default, so the user/password are probably unimportant.
|
||||
url = "dbip"
|
||||
user = "influxdbuser"
|
||||
pass = "influxdbpass"
|
||||
# Be sure to create this database.
|
||||
db = "unifidb"
|
||||
# If your InfluxDB uses a valid SSL cert, set this to true.
|
||||
verify_ssl = false
|
||||
# The UniFi Controller only updates traffic stats about every 30 seconds.
|
||||
# Setting this to something lower may lead to "zeros" in your data.
|
||||
# If you're getting zeros now, set this to "1m"
|
||||
interval = "30s"
|
||||
|
||||
#### INPUTS
|
||||
|
||||
[unifi]
|
||||
# Setting this to true and providing default credentials allows you to skip
|
||||
# configuring controllers in this config file. Instead you configure them in
|
||||
# your prometheus.yml config. Prometheus then sends the controller URL to
|
||||
# unifi-poller when it performs the scrape. This is useful if you have many,
|
||||
# or changing controllers. Most people can leave this off. See wiki for more.
|
||||
dynamic = false
|
||||
|
||||
# The following section contains the default credentials/configuration for any
|
||||
# dynamic controller (see above section), or the primary controller if you do not
|
||||
# provide one and dynamic is disabled. In other words, you can just add your
|
||||
# controller here and delete the following section.
|
||||
[unifi.defaults]
|
||||
#role = "main controller"
|
||||
url = "https://127.0.0.1:8443"
|
||||
user = "unifiuser"
|
||||
pass = "unifipassword"
|
||||
sites = ["all"]
|
||||
save_ids = false
|
||||
save_dpi = false
|
||||
save_sites = true
|
||||
verify_ssl = false
|
||||
|
||||
# The following is optional and used for configurations with multiple controllers.
|
||||
|
||||
# You may repeat the following section to poll multiple controllers.
|
||||
#[[unifi.controller]]
|
||||
# Friendly name used in dashboards. Uses URL if left empty; which is fine.
|
||||
# Avoid changing this later because it will live forever in your database.
|
||||
# Multiple controllers may share a role. This allows grouping during scrapes.
|
||||
#role = ""
|
||||
#url = "https://127.0.0.1:8443"
|
||||
|
||||
# Make a read-only user in the UniFi Admin Settings, allow it access to all sites.
|
||||
#user = "unifipoller"
|
||||
#pass = "4BB9345C-2341-48D7-99F5-E01B583FF77F"
|
||||
|
||||
# If the controller has more than one site, specify which sites to poll here.
|
||||
# Set this to ["default"] to poll only the first site on the controller.
|
||||
# A setting of ["all"] will poll all sites; this works if you only have 1 site too.
|
||||
#sites = ["all"]
|
||||
|
||||
# Enable collection of Intrusion Detection System Data (InfluxDB only).
|
||||
# Only useful if IDS or IPS are enabled on one of the sites.
|
||||
#save_ids = false
|
||||
|
||||
# Enable collection of Deep Packet Inspection data. This data breaks down traffic
|
||||
# types for each client and site, it powers a dedicated DPI dashboard.
|
||||
# Enabling this adds roughly 150 data points per client. That's 6000 metrics for
|
||||
# 40 clients. This adds a little bit of poller run time per interval and causes
|
||||
# more API requests to your controller(s). Don't let these "cons" sway you:
|
||||
# it's cool data. Please provide feedback on your experience with this feature.
|
||||
#save_dpi = false
|
||||
|
||||
# Enable collection of site data. This data powers the Network Sites dashboard.
|
||||
# It's not valuable to everyone and setting this to false will save resources.
|
||||
#save_sites = true
|
||||
|
||||
# If your UniFi controller has a valid SSL certificate (like lets encrypt),
|
||||
# you can enable this option to validate it. Otherwise, any SSL certificate is
|
||||
# valid. If you don't know if you have a valid SSL cert, then you don't have one.
|
||||
#verify_ssl = false
|
91
jails/unifi/install.sh
Normal file
91
jails/unifi/install.sh
Normal file
@ -0,0 +1,91 @@
|
||||
#!/usr/local/bin/bash
|
||||
# This file contains the install script for unifi-controller & unifi-poller
|
||||
|
||||
# Initialize variables
|
||||
JAIL_NAME="unifi"
|
||||
# shellcheck disable=SC2154
|
||||
JAIL_IP="${unifi_ip4_addr%/*}"
|
||||
# shellcheck disable=SC2154
|
||||
DB_IP="${influxdb_ip4_addr%/*}"
|
||||
# shellcheck disable=SC2154
|
||||
DB_JAIL="${unifi_db_jail}"
|
||||
# shellcheck disable=SC2154
|
||||
DB_NAME="${unifi_up_db_name:-unifi}"
|
||||
# shellcheck disable=SC2154
|
||||
DB_USER="${unifi_up_db_user}"
|
||||
# shellcheck disable=SC2154
|
||||
DB_PASS="${unifi_up_db_password}"
|
||||
# shellcheck disable=SC2154
|
||||
UP_USER="${unifi_up_user}"
|
||||
# shellcheck disable=SC2154
|
||||
UP_PASS="${unifi_up_password}"
|
||||
INCLUDES_PATH="${SCRIPT_DIR}/jails/unifi/includes"
|
||||
|
||||
# Enable persistent Unifi Controller data
|
||||
iocage exec "${JAIL_NAME}" mkdir -p /config/controller/mongodb
|
||||
iocage exec "${JAIL_NAME}" cp -Rp /usr/local/share/java/unifi /config/controller
|
||||
iocage exec "${JAIL_NAME}" chown -R mongodb:mongodb /config/controller/mongodb
|
||||
# shellcheck disable=SC2154
|
||||
cp "${INCLUDES_PATH}"/mongodb.conf /mnt/"${global_dataset_iocage}"/jails/"${JAIL_NAME}"/root/usr/local/etc
|
||||
# shellcheck disable=SC2154
|
||||
cp "${INCLUDES_PATH}"/rc/mongod /mnt/"${global_dataset_iocage}"/jails/"${JAIL_NAME}"/root/usr/local/etc/rc.d/
|
||||
# shellcheck disable=SC2154
|
||||
cp "${INCLUDES_PATH}"/rc/unifi /mnt/"${global_dataset_iocage}"/jails/"${JAIL_NAME}"/root/usr/local/etc/rc.d/
|
||||
iocage exec "${JAIL_NAME}" sysrc unifi_enable=YES
|
||||
iocage exec "${JAIL_NAME}" service unifi start
|
||||
|
||||
# shellcheck disable=SC2154
|
||||
if [[ ! "${unifi_unifi_poller}" ]]; then
|
||||
echo "Installation complete!"
|
||||
echo "Unifi Controller is accessible at https://${JAIL_IP}:8443."
|
||||
else
|
||||
# Check if influxdb container exists, create unifi database if it does, error if it is not.
|
||||
echo "Checking if the database jail and database exist..."
|
||||
if [[ -d /mnt/"${global_dataset_iocage}"/jails/"${DB_JAIL}" ]]; then
|
||||
DB_EXISTING=$(iocage exec "${DB_JAIL}" curl -G http://localhost:8086/query --data-urlencode 'q=SHOW DATABASES' | jq '.results [] | .series [] | .values []' | grep "$DB_NAME" | sed 's/"//g' | sed 's/^ *//g')
|
||||
if [[ "$DB_NAME" == "$DB_EXISTING" ]]; then
|
||||
echo "${DB_JAIL} jail with database ${DB_NAME} already exists. Skipping database creation... "
|
||||
else
|
||||
echo "${DB_JAIL} jail exists, but database ${DB_NAME} does not. Creating database ${DB_NAME}."
|
||||
if [[ -z "${DB_USER}" ]] || [[ -z "${DB_PASS}" ]]; then
|
||||
echo "Database username and password not provided. Cannot create database without credentials. Exiting..."
|
||||
exit 1
|
||||
else
|
||||
iocage exec "${DB_JAIL}" "curl -XPOST -u ${DB_USER}:${DB_PASS} http://localhost:8086/query --data-urlencode 'q=CREATE DATABASE ${DB_NAME}'"
|
||||
echo "Database ${DB_NAME} created with username ${DB_USER} with password ${DB_PASS}."
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo "Influxdb jail does not exist. Unifi-Poller requires Influxdb jail. Please install the Influxdb jail."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Download and install Unifi-Poller
|
||||
FILE_NAME=$(curl -s https://api.github.com/repos/unifi-poller/unifi-poller/releases/latest | jq -r ".assets[] | select(.name | contains(\"amd64.txz\")) | .name")
|
||||
DOWNLOAD=$(curl -s https://api.github.com/repos/unifi-poller/unifi-poller/releases/latest | jq -r ".assets[] | select(.name | contains(\"amd64.txz\")) | .browser_download_url")
|
||||
iocage exec "${JAIL_NAME}" fetch -o /config "${DOWNLOAD}"
|
||||
|
||||
# Install downloaded Unifi-Poller package, configure and enable
|
||||
iocage exec "${JAIL_NAME}" pkg install -qy /config/"${FILE_NAME}"
|
||||
# shellcheck disable=SC2154
|
||||
cp "${INCLUDES_PATH}"/up.conf /mnt/"${global_dataset_config}"/"${JAIL_NAME}"
|
||||
# shellcheck disable=SC2154
|
||||
cp "${INCLUDES_PATH}"/up.conf.example /mnt/"${global_dataset_config}"/"${JAIL_NAME}"
|
||||
# shellcheck disable=SC2154
|
||||
cp "${INCLUDES_PATH}"/rc/unifi_poller /mnt/"${global_dataset_iocage}"/jails/"${JAIL_NAME}"/root/usr/local/etc/rc.d/unifi_poller
|
||||
iocage exec "${JAIL_NAME}" sed -i '' "s|influxdbuser|${DB_USER}|" /config/up.conf
|
||||
iocage exec "${JAIL_NAME}" sed -i '' "s|influxdbpass|${DB_PASS}|" /config/up.conf
|
||||
iocage exec "${JAIL_NAME}" sed -i '' "s|unifidb|${DB_NAME}|" /config/up.conf
|
||||
iocage exec "${JAIL_NAME}" sed -i '' "s|unifiuser|${UP_USER}|" /config/up.conf
|
||||
iocage exec "${JAIL_NAME}" sed -i '' "s|unifipassword|${UP_PASS}|" /config/up.conf
|
||||
iocage exec "${JAIL_NAME}" sed -i '' "s|dbip|http://${DB_IP}:8086|" /config/up.conf
|
||||
|
||||
|
||||
iocage exec "${JAIL_NAME}" sysrc unifi_poller_enable=YES
|
||||
iocage exec "${JAIL_NAME}" service unifi_poller start
|
||||
|
||||
echo "Installation complete!"
|
||||
echo "Unifi Controller is accessible at https://${JAIL_IP}:8443."
|
||||
echo "Please login to the Unifi Controller and add ${UP_USER} as a read-only user."
|
||||
echo "In Grafana, add Unifi-Poller as a data source."
|
||||
fi
|
153
jails/unifi/readme.md
Normal file
153
jails/unifi/readme.md
Normal file
@ -0,0 +1,153 @@
|
||||
# Unifi Controller
|
||||
|
||||
### Installation:
|
||||
|
||||
- This jail requires an existing InfluxDB jail. InfluxDB may be created using the same install command, as long as influxdb is listed first.
|
||||
- Once the script runs, a user must be created in the Unifi Controller software for your Unifi-Poller user.
|
||||
- To view the data from Unifi-Poller, Grafana is required. Add the unifi InfluxDB database as a data source in Grafana.
|
||||
|
||||
### Config Description
|
||||
|
||||
- unifi_poller: boolean, true if you want to also install unifi-poller
|
||||
- db_jail: This is the name of your influxdb database jail, should be influxdb.
|
||||
- unifi_db_name: The name of the database that will be created in influxdb for Unifi Poller.
|
||||
- unifi_db_user & unifi_db_password: The created database's credentials for Unifi Poller.
|
||||
- up_user & up_password: The Unifi-Poller user credentials. This user must be created in the Unifi Controller web gui after install matching these credentials. This is for the connection between Unifi Controller & Unifi Poller
|
||||
|
||||
### Unifi-Controller Post-Install
|
||||
|
||||
After the script runs and the unifi jail is running, open the web gui of the unifi jail at port 8443 (i.e. https://192.168.2.250:8443). After completing the initial setup wizard, go to Admins --> Add New Admin. Select "Manually set and share the password", enter the username and password used for up_user & up_password. Uncheck 'Require the user to change their password'. Verify "Role" is set to 'Read Only'. Click Create.
|
||||
|
||||
|
||||
## Unifi Controller documentation can be found at https://www.ui.com/download/unifi/default/default/unifi-controller-v5-user-guide
|
||||
|
||||
|
||||
## Original README from the upstream Unifi-Poller Github.
|
||||
|
||||
https://github.com/unifi-poller/unifi-poller
|
||||
|
||||
<img width="320px" src="https://raw.githubusercontent.com/wiki/unifi-poller/unifi-poller/images/unifi-poller-logo.png">
|
||||
|
||||
[![discord](https://badgen.net/badge/icon/Discord?color=0011ff&label&icon=https://simpleicons.now.sh/discord/eee "Ubiquiti Discord")](https://discord.gg/KnyKYt2)
|
||||
[![twitter](https://badgen.net/twitter/follow/TwitchCaptain?icon=https://simpleicons.now.sh/twitter/0099ff&label=TwitchCaptain&color=0116ff "TwitchCaptain @ Twitter")](https://twitter.com/TwitchCaptain)
|
||||
[![grafana](https://badgen.net/https/golift.io/bd/grafana/dashboard-downloads/11310,10419,10414,10415,10416,10417,10418,11311,11312,11313,11314,11315?icon=https://simpleicons.now.sh/grafana/ED7F38&color=0011ff "Grafana Dashboard Downloads")](http://grafana.com/dashboards?search=unifi-poller)
|
||||
[![pulls](https://badgen.net/docker/pulls/golift/unifi-poller?icon=https://simpleicons.now.sh/docker/38B1ED&label=pulls&color=0011ff "Docker Pulls")](https://hub.docker.com/r/golift/unifi-poller)
|
||||
[![DLs](https://img.shields.io/github/downloads/unifi-poller/unifi-poller/total.svg?logo=github&color=0116ff "GitHub Downloads")](https://www.somsubhra.com/github-release-stats/?username=unifi-poller&repository=unifi-poller)
|
||||
|
||||
[![unifi](https://badgen.net/badge/UniFi/5.12.x,5.13.x,UAP,USG,USW,UDM?list=|&icon=https://docs.golift.io/svg/ubiquiti_color.svg&color=0099ee "UniFi Products Supported")](https://github.com/golift/unifi)
|
||||
[![builer](https://badgen.net/badge/go/Application%20Builder?label=&icon=https://docs.golift.io/svg/go.svg&color=0099ee "Go Application Builder")](https://github.com/golift/application-builder)
|
||||
[![stars](https://badgen.net/github/stars/unifi-poller/unifi-poller?icon=https://simpleicons.now.sh/macys/fab&label=&color=0099ee "GitHub Stars")](https://github.com/unifi-poller/unifi-poller)
|
||||
[![travis](https://badgen.net/travis/unifi-poller/unifi-poller?icon=travis&label=build "Travis Build")](https://travis-ci.org/unifi-poller/unifi-poller)
|
||||
|
||||
Collect your UniFi controller data and report it to an InfluxDB instance,
|
||||
or export it for Prometheus collection.
|
||||
[Twelve Grafana Dashboards](http://grafana.com/dashboards?search=unifi-poller)
|
||||
included; with screenshots. Six for InfluxDB and six for Prometheus.
|
||||
|
||||
## Installation
|
||||
|
||||
[See the Wiki!](https://github.com/unifi-poller/unifi-poller/wiki/Installation)
|
||||
We have a special place for [Docker Users](https://github.com/unifi-poller/unifi-poller/wiki/Docker).
|
||||
I'm willing to help if you have troubles.
|
||||
Open an [Issue](https://github.com/unifi-poller/unifi-poller/issues) and
|
||||
we'll figure out how to get things working for you. You can also get help in
|
||||
the #unifi-poller channel on the [Ubiquiti Discord server](https://discord.gg/KnyKYt2). I've also
|
||||
[provided a forum post](https://community.ui.com/questions/Unifi-Poller-Store-Unifi-Controller-Metrics-in-InfluxDB-without-SNMP/58a0ea34-d2b3-41cd-93bb-d95d3896d1a1)
|
||||
you may use to get additional help.
|
||||
|
||||
## Description
|
||||
|
||||
[Ubiquiti](https://www.ui.com) makes networking devices like switches, gateways
|
||||
(routers) and wireless access points. They have a line of equipment named
|
||||
[UniFi](https://www.ui.com/products/#unifi) that uses a
|
||||
[controller](https://www.ui.com/download/unifi/) to keep stats and simplify network
|
||||
device configuration. This controller can be installed on Windows, macOS, FreeBSD,
|
||||
Linux or Docker. Ubiquiti also provides a dedicated hardware device called a
|
||||
[CloudKey](https://www.ui.com/unifi/unifi-cloud-key/) that runs the controller software.
|
||||
More recently they've developed the Dream Machine; it's still in
|
||||
beta / early access, but UniFi Poller can collect its data!
|
||||
|
||||
UniFi Poller is a small Golang application that runs on Windows, macOS, FreeBSD,
|
||||
Linux or Docker. In Influx-mode it polls a UniFi controller every 30 seconds for
|
||||
measurements and exports the data to an Influx database. In Prometheus mode the
|
||||
poller opens a web port and accepts Prometheus polling. It converts the UniFi
|
||||
Controller API data into Prometheus exports on the fly.
|
||||
|
||||
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](https://github.com/unifi-poller/unifi-poller/wiki/InfluxDB) or
|
||||
[Prometheus](https://prometheus.io),
|
||||
[Grafana](https://github.com/unifi-poller/unifi-poller/wiki/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!
|
||||
|
||||
## Backstory
|
||||
|
||||
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 probably wouldn't have made it this far if [Garrett](https://github.com/dewski/unifi)
|
||||
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, dream machines and switches.
|
||||
|
||||
I've been trying to get my UAP data into Grafana. Sure, google search that.
|
||||
You'll find [this](https://community.ubnt.com/t5/UniFi-Wireless/Grafana-dashboard-for-UniFi-APs-now-available/td-p/1833532).
|
||||
What if you don't want to deal with SNMP?
|
||||
Well, here you go. I've replicated 400% 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](https://community.ubnt.com/t5/user/viewprofilepage/user-id/303058)
|
||||
for making this dashboard; it gave me a fantastic start to making my own dashboards.
|
||||
|
||||
## Operation
|
||||
|
||||
You can control this app with puppet, chef, saltstack, homebrew or a simple bash
|
||||
script if you needed to. Packages are available for macOS, Linux, FreeBSD and Docker.
|
||||
It works just fine on [Windows](https://github.com/unifi-poller/unifi-poller/wiki/Windows) too.
|
||||
Most people prefer Docker, and this app is right at home in that environment.
|
||||
|
||||
## What's it look like?
|
||||
|
||||
There are 12 total dashboards available; the 6 InfluxDB dashboards are very similar
|
||||
to the 6 Prometheus dashboards. Below you'll find screenshots of the first four dashboards.
|
||||
|
||||
##### Client Dashboard (InfluxDB)
|
||||
|
||||
![UniFi Clients Dashboard Image](https://grafana.com/api/dashboards/10418/images/7540/image)
|
||||
|
||||
##### USG Dashboard (InfluxDB)
|
||||
|
||||
![USG Dashboard Image](https://grafana.com/api/dashboards/10416/images/7543/image)
|
||||
|
||||
##### UAP Dashboard (InfluxDB)
|
||||
|
||||
![UAP Dashboard Image](https://grafana.com/api/dashboards/10415/images/7542/image)
|
||||
|
||||
##### USW / Switch Dashboard (InfluxDB)
|
||||
|
||||
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](https://grafana.com/api/dashboards/10417/images/7544/image)
|
||||
|
||||
## Integrations
|
||||
|
||||
The following fine folks are providing their services, completely free! These service
|
||||
integrations are used for things like storage, building, compiling, distribution and
|
||||
documentation support. This project succeeds because of them. Thank you!
|
||||
|
||||
<p style="text-align: center;">
|
||||
<a title="Jfrog Bintray" alt="Jfrog Bintray" href="https://bintray.com"><img src="https://docs.golift.io/integrations/bintray.png"/></a>
|
||||
<a title="GitHub" alt="GitHub" href="https://GitHub.com"><img src="https://docs.golift.io/integrations/octocat.png"/></a>
|
||||
<a title="Docker Cloud" alt="Docker" href="https://cloud.docker.com"><img src="https://docs.golift.io/integrations/docker.png"/></a>
|
||||
<a title="Travis-CI" alt="Travis-CI" href="https://Travis-CI.com"><img src="https://docs.golift.io/integrations/travis-ci.png"/></a>
|
||||
<a title="Homebrew" alt="Homebrew" href="https://brew.sh"><img src="https://docs.golift.io/integrations/homebrew.png"/></a>
|
||||
<a title="Go Lift" alt="Go Lift" href="https://golift.io"><img src="https://docs.golift.io/integrations/golift.png"/></a>
|
||||
<a title="Grafana" alt="Grafana" href="https://grafana.com"><img src="https://docs.golift.io/integrations/grafana.png"/></a>
|
||||
</p>
|
||||
|
||||
## Copyright & License
|
||||
|
||||
<img style="float: right;" align="right" width="200px" src="https://raw.githubusercontent.com/wiki/unifi-poller/unifi-poller/images/unifi-poller-logo.png">
|
||||
|
||||
- Copyright © 2018-2020 David Newhall II.
|
||||
- See [LICENSE](LICENSE) for license information.
|
22
jails/unifi/update.sh
Normal file
22
jails/unifi/update.sh
Normal file
@ -0,0 +1,22 @@
|
||||
#!/usr/local/bin/bash
|
||||
# This file contains the update script for unifi
|
||||
# Unifi Controller is updated through pkg, Unifi-Poller is not. This script updates Unifi-Poller
|
||||
|
||||
JAIL_NAME="unifi"
|
||||
FILE_NAME=$(curl -s https://api.github.com/repos/unifi-poller/unifi-poller/releases/latest | jq -r ".assets[] | select(.name | contains(\"amd64.txz\")) | .name")
|
||||
DOWNLOAD=$(curl -s https://api.github.com/repos/unifi-poller/unifi-poller/releases/latest | jq -r ".assets[] | select(.name | contains(\"amd64.txz\")) | .browser_download_url")
|
||||
|
||||
# Check to see if there is an update.
|
||||
# shellcheck disable=SC2154
|
||||
if [[ -f /mnt/"${global_dataset_config}"/"${JAIL_NAME}"/"${FILE_NAME}" ]]; then
|
||||
echo "Unifi-Poller is up to date."
|
||||
exit 1
|
||||
else
|
||||
# Download and install the package
|
||||
iocage exec "${JAIL_NAME}" fetch -o /config "${DOWNLOAD}"
|
||||
iocage exec "${JAIL_NAME}" pkg install -qy /config/"${FILE_NAME}"
|
||||
iocage exec "${JAIL_NAME}" service unifi restart
|
||||
iocage exec "${JAIL_NAME}" service unifi_poller restart
|
||||
fi
|
||||
|
||||
echo "Update complete!"
|
Loading…
Reference in New Issue
Block a user