惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
V
Visual Studio Blog
The GitHub Blog
The GitHub Blog
Apple Machine Learning Research
Apple Machine Learning Research
J
Java Code Geeks
T
Tailwind CSS Blog
大猫的无限游戏
大猫的无限游戏
Jina AI
Jina AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Hugging Face - Blog
Hugging Face - Blog
WordPress大学
WordPress大学
宝玉的分享
宝玉的分享
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
罗磊的独立博客
人人都是产品经理
人人都是产品经理
H
Heimdal Security Blog
Last Week in AI
Last Week in AI
博客园 - 【当耐特】
Cyberwarzone
Cyberwarzone
Google DeepMind News
Google DeepMind News
雷峰网
雷峰网
Hacker News: Ask HN
Hacker News: Ask HN
Webroot Blog
Webroot Blog
Microsoft Azure Blog
Microsoft Azure Blog
MyScale Blog
MyScale Blog
A
About on SuperTechFans
V2EX - 技术
V2EX - 技术
小众软件
小众软件
博客园 - Franky
博客园 - 司徒正美
P
Privacy International News Feed
爱范儿
爱范儿
U
Unit 42
博客园 - 叶小钗
The Hacker News
The Hacker News
C
Check Point Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Simon Willison's Weblog
Simon Willison's Weblog
N
News and Events Feed by Topic
D
Docker
T
Threatpost
MongoDB | Blog
MongoDB | Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
H
Help Net Security
L
LINUX DO - 最新话题
Security Latest
Security Latest
T
The Exploit Database - CXSecurity.com
S
SegmentFault 最新的问题
A
Arctic Wolf
Spread Privacy
Spread Privacy

少数派

派早报:Google 发布 Fitbit Air 等 - 少数派 「新人报到」確認需求,再開始 - 少数派 从 SOLO 独立开发者社区,我看到了越来越多开发者开始做自己的产品 - 少数派 我怎么管理那些"不常做,但总会忘"的生活事项 - 少数派 人形机器人量产元年,数据才是具身智能的“生死线” - 少数派 BuhoLaunchpad 高度还原 Mac 启动台:开发历程与思考 - 少数派 五年陪伴依然不舍,DIY 换壳后让罗技 MX Master 3 继续服役 - 少数派 新玩意 240|少数派的编辑们最近买了啥? - 少数派 一日一技|为什么你应该关闭 iOS 的键盘声音 - 少数派 我做了个插件和 Skills,一键提取任何网站的设计规范 Design.md - 少数派 住在三四线城市的你,该开始录播客了 - 少数派 甘南秘境,大白高国 - 少数派 AI的审美:谁让把我变成川内倫子 - 少数派 返工怎能不烦恼,打工人片单总有一部是你的「嘴替」 - 少数派 为了让「上厕所」更健康,我做了一个小工具 - 少数派 AI + Skill,能够让生成的文章去除 AI 味吗? - 少数派 新玩意|韶音OpenDots ONE 耳夹式耳机 - 少数派 《美满》| 在每一个春天的晚上相爱(362) - 少数派 新玩意|优篮子 PS01 MagSnap 磁吸支架 - 少数派 自我整合手记 | 我开始早睡了:用稳定规则,为自由托底 - 少数派 用龙虾(OpenClaw)两个多月,我最深的12个体会 - 少数派 听歌时间到,12 张你可能错过的 2025 华语乐坛好专辑 - 少数派 承诺能追吗 - 少数派 macOS 26启动台没了? 我做了个不一样的App启动器 - Keboard - 少数派 《四海为家的人》| INTJ对话INTJ(361) - 少数派 你发过的那些黑历史,是时候一次清干净了 - 少数派 新玩意:安安静静玩,越玩越专注:计客密码机 - 少数派 iPad 用户首次体验 Android 平板:vivo Pad6 Pro - 少数派 数据逻辑强 - 少数派 极北行+ | 一路向北,探访日本至北之地 | 001 - 少数派 万字剖析:千问App深度体验报告(2026) - 少数派 在2026年,如何真正防止别人抄袭你的作品 - 少数派 怎么用 50 块搭个 AI 语音助手?我踩了 3 天坑 - 少数派 YeeroAI:让 AI 对话真正成为知识管理的一部分 - 少数派 爬泰山 - 少数派 「旅图显影」 App 更新:这次,我们补上了一点「手感」 - 少数派 假期出门太折磨?我的 23 条经验帮你规划惬意旅行 - 少数派 工作流会变吗 - 少数派 Claude Opus 4.6 怎么用最省钱?我测了 5 种方案 - 少数派 GPT Image 2 让图文并茂不再稀罕 - 少数派 用户侧出发——什么是AI,我要不要学习? - 少数派 找片、转存、整理、播放一条龙!让你的付费网盘值回票价 - 少数派 欢迎试用!日课一问2.0插件 - 少数派 自己做的MDeditor,原本想购买 Typora 试了两次支付不成功,干脆自己做一个 - 少数派 vibe coding了一个 3MB 的小工具,让 ~/Downloads 彻底告别混乱 - 少数派 因为受不了 Mac 的风扇策略,我做了一个风扇控制工具 - 少数派 别只怪模型 - 少数派 Warp 终端的 AI 功能怎么用?我测了一周的体验 - 少数派 AI 写代码老是出 bug?这 5 个配置我后悔没早知道 - 少数派 「新玩意」苹果出相机可能就这样:Sigma BF + 45mm F2.8 DG Contemporary - 少数派 一个面向2030年的AI操作系统是什么样子的:浅谈cola这款有灵魂的Agent - 少数派 别只看写代码 - 少数派 每天解决10个问题,还是一口气攻坚解决400个? - 少数派 AI 交易机器人怎么搭?我用 Claude 跑了一周实盘 - 少数派 Maptoposter Online:把你爱的城市画成艺术海报 - 少数派 Function Calling 怎么用?我测了 3 个模型发现差距真大 - 少数派 Legend Talk:我做了个 AI 圆桌,让 160 位思想家围着你的问题转 - 少数派 如何找到自己的蓝方?在小县城寻找压力测试 - 少数派 语音输入与软件接口|2026年聊AI时,我们都聊些什么(上) - 少数派 混动已经卖爆,纯电又来补刀——钛7闪充版简直“不讲武德” - 少数派 本月玩什么|朋友收藏、识质存在、沙罗周期 - 少数派 为什么要每天坚持输出? - 少数派 Claude API 挂了好几个小时,你的项目有备用方案吗? - 少数派 Function Calling 没你想的复杂——我用它做了个有点用的工具 - 少数派 登录系统立即播放视频或者图片音乐的软件 - 少数派 我为什么创建 FlipHTML5 下载工具 - 少数派 残局没电?多品牌外设电量统一管理软件EasyBluetooth已支持RTSS游戏内显示以及AIDA64 - 少数派 前往通义路的路 - 少数派 太好看了,媲美Sun的个人导航页,NAS部署星云门户 - 少数派 乌黑嘴唇“一键检测”上线了 - 少数派 派早报:Claude AI 接入多个创意软件生态、FILCO 生产方接手品牌等 - 少数派 【更新】BearCLI、Claude 连接器与 MCP 服务器 - 少数派 记了上千条流水,还是看不懂财务?我做了一个让 AI 读懂账本的工作台 - 少数派 MINI R56 升级原厂 Sport 模式 - 少数派 新玩意 | 一棵柠檬树(仿真版) - 少数派 Momenta的“物理AI”野望,需迈过“含摩量”这道关 - 少数派 网页直接投屏控制手机!NAS一键部署PandaScrcpy,流畅丝滑可远程。 - 少数派 众测|邀你一同探索随身 AI 硬件入口 YoooClaw C·ONE - 少数派 2050大会:分享时间是真诚 参会记 - 少数派 iPad 赋能电影创作:国内首部宣纸手绘长片《燃比娃》的幕后故事 - 少数派 AI的审美:我用 8 个大模型给 100 张旅行照片打分 - 少数派 普通人如何破圈?去参加一个本地协会 - 少数派 把极空间的图标全换了,主题DIY全攻略打造你的专属NAS桌面 - 少数派 电子便签墙,帮你实现便签自由 - 少数派 我如何用三个 CLI 工具取代文档创建需求 - 少数派 原来真的有人可以玩一辈子 - 少数派 社区速递 139 | 派友热议三月买了啥、复古单反尼康 Df 体验 - 少数派 06 作品的赏析与评价 - 少数派 TDS REVIEW|索尼 WF-1000XM6 降噪真无线耳机体验 - 少数派 35.98万起售的第二代腾势D9,我看重的不是堆料,而是不凑合 - 少数派 鼠须管 Squirrel 皮肤配置指北 - 少数派 从watch ultra2换到redmi watch6 - 少数派 派早报:阿里巴巴发布视频生成模型 HappyHorse 1.0 等 - 少数派 别迷信1M - 少数派 家人们天塌了!网盘“大封杀”,多个渠道多条路,NAS部署PanHub - 少数派 AI与人勾心斗角!NAS一键部署AI狼人杀,假日休闲必备。 - 少数派 电商必备!Comfyui工作流批量生图插件,一次生成12张!支持Nano banana pro模型 - 少数派 Comfyui工作流配置Gpt-image-2模型教程,0.03/张 - 少数派 OpenClaw第三方APi怎么配置?可使用Gpt-image-2模型 - 少数派 会员社区话题精选 Ep. 103 - 少数派
【Rethinking IT】如何应用数据图表了解家里的 Unifi 网络状况? - 少数派
2024-01-09 · via 少数派

Matrix 首页推荐  

Matrix 是少数派的写作社区,我们主张分享真实的产品体验,有实用价值的经验与思考。我们会不定期挑选 Matrix 最优质的文章,展示来自用户的最真实的体验和观点。

文章代表作者个人观点,少数派仅对标题和排版略作修改。


1. 前言

自从之前写了《【让 IT 更简单】使用 Ubiquiti 全家桶对朋友家进行网络改造》 《【Rethinking IT】如何结合 Unifi 和 MikroTik 设备打造家庭网络》两篇文章后,相信给各位正在用 Unifi 或者打算使用 Unifi 的朋友应该有所帮助。

那么,今天我就换个方向,不再讨论规划和安装 Unifi 网络设备,来研究研究如何了解家里的 Unifi 设备状况

这时候有朋友就会说,不是有 Unifi 官方的 Web 控制台,还有手机 App 嘛。没错,Unifi 在 UI 设计方面确实独树一帜,而且在其 Web 控制台和 App 中,每一个 Unifi 设备和客户端设备都有相应的 概览 页面和 洞察 页面,上面提供了 Unifi 设备和客户端设备的实时数据。

但是,如果我希望研究一下某一段时间这个 Unifi 设备的历史数据,想看看这段时间该 Unifi 设备的负载情况,稳定性如何,客户端设备何时离线,是不是就无从得知了?

其实,这个需求看起来就是需要一套 监控系统 啦。那么今天,就由我来给大家 解锁 Unifi 的新玩法

由于小弟我从未在互联网大厂 SRE 岗位工作过,只是一个小小乙方的服务器、存储设备上架搬运工,所以以下内容均为自己工作之余,在家利用 Homelab 环境瞎捣腾的,自然不是什么多高大上的东西。如果有什么写得不准确的地方,或者引用了错误的资料,还请各位大佬海涵!

2. 组件介绍

2.1. Prometheus & InfluxDB

2.1.1. 时序数据库

说 Prometheus 和 InfluxDB 之前,这里需要先提到一个概念:时序数据库 (Time Series Database,TSDB)。那么什么是时序数据库呢,此处引用 WiKi 百科的定义:

A time series database is a software system that is optimized for storing and serving time series through associated pairs of time(s) and value(s). In some fields,  time series may be called profiles, curves, traces or trends. Several early time series databases are associated with industrial applications which could efficiently store measured values from sensory equipment (also referred to as data historians), but now are used in support of a much wider range of applications.

什么意思呢?就是说时序数据库,它被优化成专门将一系列相关联的「时间」和「数值」,进行存储和提供服务的一套软件系统。在某些领域,时间序列可能被称为剖面、曲线、轨迹或者趋势。一些早期的时间序列数据库与工业应用相关联,这些应用可以有效地存储来自传感设备的测量值,但现在用于支持更广泛的应用。

所以,时序数据其实就是随着时间不断产生的连续测量数值或者事件,时序数据库就是用来保存这些数据的手段之一。

以下引用 TDengine 官方文章中描述时序数据库的特点:

时序数据库的特点

  1. 时间戳: 每个数据点都带有时间戳,这个时间戳对于数据的计算和分析十分重要。
  2. 结构化: 与来自网络爬虫、微博、微信的海量数据不同,联网设备或监控系统生成的数据都是结构化的。这些数据都具有预定义的数据类型或固定长度,比如智能电表采集的电流、电压就可以用 4 字节的标准的浮点数来表示。
  3. 流式: 数据源以近似恒定速率生成数据,如音频或视频流。这些数据流彼此独立。
  4. 流量平稳可预测: 与电商平台或社交媒体网站的数据不同,时序数据的流量在一段时间内是稳定的,并且可以根据数据源的数量和采样周期来进行计算和预测。
  5. 不变性: 时序数据一般都是 append-only,类似于日志数据,一般不容许而且也没有修改的必要。很少有场景,需要对采集的原始数据进行修改。

这么听起来,这种数据库完美契合一种系统:监控系统

那么说到监控系统,相信不少 IT 同行可能或多或少听过 Cacti、Nagios、Zabbix 包括上面提到的 Prometheus。这其中,Cacti、Nagios、Zabbix 这 3 者,我相信曾经部署过的朋友应该都会部署 MariaDB (即 MySQL 的修改版本) 数据库。那么使用这种关系型数据库的监控系统有什么问题呢?答案是当数据量足够庞大规模的时候,这种关系型数据库就会成为整套监控系统的瓶颈之一。当然,连我都知道的事情,厂商不可能不知道,所以 Zabbix 从 4.2 版本之后开始也支持了时序数据库中的 Timscaledb。更多内容可以查阅 Zabbix 官方博客《Zabbix,时间序列数据和 TimescaleDB》

至于 Prometheus(普罗米修斯:你没听错,就是跟异形前传同名的那个普罗米修斯)就是一款本身就是基于时序数据库打造的监控系统。在我对 Unifi 设备和 Proxmox VE 虚拟化做监控方案之前,我其实是不知道 InfluxDB 的。因为平时工作接触较多都是 VMware vSphere,而在这种商业软件的加持下,VMware 天然有自己一套完美的监控运维平台,也就是 vRealize Operations,现在改名叫 Aria Operations。所以,我在研究 Proxmox VE 监控的时候发现,数据中心 > 指标服务器 页面下就支持 Graphite 和 InfluxDB。而这俩,也都是时序数据库。

所以我就搜索了一下时序数据库发展历程,可以看到我上述提到的 Graphite、InfluxDB、Prometheus、TimeScale 都先后应运而生。

并且我还搜索了一下相关排名,DB-Engines 网站上关于时序数据库的受欢迎程度排名中,InfluxDB 目前依然是遥遥领先。那就更让我觉得我可能是需要稍微了解了解这个 InfluxDB 了。

2.1.2. Prometheus

Prometheus 受启发于 Google 的 Brogmon 监控系统 (相似的 Kubernetes 是从 Google 的 Brog 系统演变而来),从2012年开始由前 Google 工程师在 Soundcloud 以开源软件的形式进行研发的系统监控和告警工具包,并且于 2015 年早期对外发布早期版本。自此以后,许多公司和组织都采用了 Prometheus 作为监控告警工具。Prometheus 的主要特性有:

  • 一个多维数据模型,包含由 metric 和 key/value 标识的时间序列数据
  • PromQL 是一种灵活的查询语言
  • 不依赖分布式存储,单个服务器节点是自治的
  • 基于 HTTP 协议通过 Pull 形式进行收集时间序列数据
  • Push 形式的时间序列数据是通过一个中间网关来支持的
  • Targets 可以通过服务发现或静态配置发现的
  • 多种模式的图形和仪表盘支持

Prometheus 生态系统由多个组件组成,其中许多是可选的:

  • Prometheus Server:Prometheus 主服务器,用于抓取和存储时间序列数据。
  • Client Libraries:用于检测应用程序代码的库,主要用于客户端。
  • Push Gateway:支持短期生命周期的作业。
  • Exporter:为 HAProxy、StatsD、Graphite 等服务提供数据。
  • Alert Manager:一个告警处理工具。
  • 各种支持工具。

2.1.3. InfluxDB

InfluxDB 是一套由 InfluxData 公司开发的时序数据库,它具备以下特性:

  • 基于 Go 语言开发,只需要二进制文件即可运行
  • 针对时序数据进行快速写入
  • 简单高效的 HTTP API
  • 类似 SQL 的查询语法
  • 能够实时查询,数据在写入时被索引后就能够被立即查出
  • 支持对 Tag 建索引,实现快速有效的查询
  • 数据保留策略(Retention policies)能够有效地使旧数据自动失效

InfluxDB 本身只是一套数据库,那么监控数据如何写入呢?Prometheus 会拉取各种 Exporter 暴露出来的 metrics 数据,而 InfluxData 公司则开发了一套整体的 TICK 堆栈(类似 ELK:3 个字母分别代表 Elasticsearch、Kibana、Logstash)。其中:

  • Telegraf:一个插件驱动的服务器代理,用于收集和报告指标。Telegraf 插件直接从其运行的系统获取各种指标,从第三方 API 中提取指标,甚至通过 StatsD 和 Kafka 消费者服务监听指标。
  • Chronograf:是堆栈的管理用户界面和可视化引擎,它可以轻松设置和维护基础结构的监视和警报。
  • Kapacitor:是一个数据处理引擎,它可以处理来自 InfluxDB 的流数据和批处理数据。

2.2. Grafana

Grafana 是一个开源可视化和分析软件。它允许您查询、可视化、提醒和浏览指标、日志和跟踪,无论它们存储在何处。它为您提供了将时序数据库(TSDB)数据转换为富有洞察力的图形和可视化的工具。

Grafana 目前内置支持的数据来源:

  • Alertmanager
  • AWS CloudWatch
  • Azure Monitor
  • Elasticsearch
  • Google Cloud Monitoring
  • Graphite
  • InfluxDB
  • Jaeger
  • Loki
  • Microsoft SQL Server (MSSQL)
  • MySQL
  • OpenTSDB
  • PostgreSQL
  • Prometheus
  • Tempo
  • Testdata
  • Zipkin

2.3. Unifi Poller

那么上面铺垫了那么多,跟监控 Unifi 又有什么关系呢?是这样的,由于 Prometheus 官网的 Exporters 页面并无适配 Unifi 的 Exporter,同样的 Telegraf 官网的 Input plugins 页面也无适配 Unifi 的相关 plugin。所以有国外网友开发了这个 Unifi Poller 项目来满足这个需求。

Unifi Poller 是一个开源的,支持收集 Unifi 控制器数据并导出到 InfluxDB 或者 Prometheus 的收集器。同时,提供了 12 个 Grafana 面板,6 个属于 InfluxDB,另外 6 个属于 Prometheus。

Unifi Poller 基于 Go 语言开发,可以运行在 Windows、macOS、FreeBSD、Linux 或 Docker 下。

  • 在 Influx 模式下,Unifi Poller 每 30 秒轮询一次 Unifi 控制器数据并导出到 InfluxDB 数据库。(相当于一个 Telegraf Unifi Input plugin)
  • 在 Prometheus 模式下,Unifi Poller 开放一个 Web 端口并接受 Prometheus 拉取,动态的转换 Unifi 控制器的 API 数据到 Prometheus。(相当于一个 Unifi Exporter)

3. 项目部署

介绍完以上全部组件,那么今天我就要使用 InfluxDB + Grafana + Unifi Poller 来部署一整套 Unifi 设备的监控系统了。

为什么不是用 Prometheus + Grafana + Unifi Poller 呢?当然是官网建议入门用户使用 InfluxDB,因为部署 Prometheus 又要涉及相当广的内容了,所以有兴趣的朋友还请您自行研究。

3.1. 准备工作

3.1.1. 组件版本

根据 Unifi Poller 官网 FAQs 说明:

  • 推荐使用 Grafana 7.4.0+。需要 Grafana 7.x 或更高版本。
  • 如果您选择使用 InfluxDB,则需要 InfluxDB 1.8.x。1.10 和 1.11 可能有效。
  • InfluxDB 2.x 无法作用。
  • Prometheus 2.x (如果您选择使用 Prometheus)。

所以,此次我们使用的环境如下:

名称版本类型备注
Unifi OS3.1.16Unifi 控制台Unifi Cloud Key Gen 2 Plus
Unifi Network8.0.24Unifi 网络应用Unifi Cloud Key Gen 2 Plus
CentOS7.9虚拟机系统2C,4G,100G 或更多
Docker24.07容器应用 
Docker Composev2.21.0多容器运行工具 
InfluxDB1.8.10数据库容器 
Grafana10.1.0数据展示容器 
Unifi Pollerv2.9.5数据收集容器 

3.1.2. 准备工作

如果您的控制器是在运行 Unifi OS 的 UDM、UXG 或 UDM-Pro 或 UCK 上,那么建议创建一个 受限制的用户,对 UniFi 网络应用具有 只读权限。其他权限级别可能无法正常工作。

例如,我这边创建的用户名为 unifipoller,密码设置一个自己熟悉的即可。

3.2. 安装部署

3.2.1. 安装 CentOS

安装系统这个步骤我就略过了,实在是没有必要专门凑字数水一个章节。您也可以使用您所熟悉的操作系统,像是 Ubuntu、Debian、OpenSUSE 等等。

3.2.2. 安装 Docker

https://get.docker.com 下载 Docker 安装脚本。

curl -fsSL https://get.docker.com -o get-docker.sh

使用阿里云镜像站执行 Docker 安装脚本。

sh get-docker.sh --mirror Aliyun

运行并设置 Docker 自启动。

systemctl enable --now docker

运行结果如下图。

3.2.3. 安装 Docker Compose

下载 Docker Compose 二进制文件。若无特殊上网方式,此步骤下载会非常慢,但是我实测过,确实可以下载完成,下方截图内我总共用了 35 分钟下载完。

curl -SL https://github.com/docker/compose/releases/download/v2.23.3/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose

设置 Docker Compose 为可执行权限。

chmod +x /usr/local/bin/docker-compose

为 Docker Compose 命令设置软连接。

ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

验证 Docker Compose 版本。

docker compose version

运行结果如下图。

3.2.4. 配置 Docker 加速器

创建 daemon.json 文件。

vim /etc/docker/daemon.json

粘贴以下内容。

{
  "registry-mirrors": [
    "https://hub-mirror.c.163.com",
    "https://dockerproxy.com",
    "https://docker.nju.edu.cn",
    "https://docker.m.daocloud.io"
  ]
}

重启 Docker 服务。

systemctl daemon-reload
systemctl restart docker

运行结果如下图。

当然,这里我更建议的是自己部署一套本地镜像仓库,比如使用 VMware 开源的 Harbor,我自己就在家庭内网部署了一套,这样还能避免某些镜像因为一些不可说原因删库导致无法拉取。

3.2.5. 部署 Unifi Poller 堆栈

由于这里 Grafana 需要安装 3 个插件,会涉及到权限问题,所以需要先创建 grafana 用户。

useradd -g root grafana

修改 Grafana 用户 ID。

usermod -u 472 grafana

创建 Grafana、InfluxDB、Unifi Poller 用来存储其配置文件的目录。

mkdir -p /docker/{grafana,influxdb,unifi-poller}

修改 Grafana 目录拥有者。

chown 472:root -R /docker/grafana

验证 Grafana 目录权限。

ls -l /docker

运行结果如下图。

创建 up.conf 配置文件。

vim /docker/unifi-poller/up.conf

粘贴并根据实际情况修改以下内容。

#### INPUTS
[unifi.defaults]
  url = "https://10.0.3.250"  # 修改为您的 Unifi Console IP
  user = "unifipoller"
  pass = "CHANGE_ME"  # 3.1.2. 章节您设置的密码
  save_sites = true  # 保持不变
  save_dpi = true  # 保持不变

#### OUTPUTS
[influxdb]
  url = "http://CHANGE_ME:8086"  # 本虚拟机的 IP:8086

运行结果如下图。

创建 unifi-poller 的 Compose 目录。

mkdir up && cd up

创建 docker-compose.yaml 文件。

vim docker-compose.yaml

粘贴并根据实际情况修改以下内容。

注意
此处我对官网提供的 Docker Compose 模板进行了精简和纠错:

  • 因为模板里面还部署了 Chronograf 容器,然而其实对于我们的需求而言,除了增加额外的性能开销以外,并没有什么用处。
  • 而且模板中 InfluxDB 容器的参数甚至用了 InfluxDB 2.x 版本的环境变量,我刚开始尝试部署的时候,一直部署失败。后面仔细研究了下 InfluxDB 的变量说明,才发现明明前面 FAQs 说 InfluxDB 2.x 无法使用,结果模板里面却又套用了 InfluxDB 2.x 的内容。
version: "3"
services:
  influxdb:
    restart: always
    image: influxdb:1.8.10
    ports:
      - '8086:8086'
    volumes:
      - /etc/localtime:/etc/localtime:ro  # 我自己的习惯,只读挂载本机的时区,避免时区显示问题
      - /docker/influxdb:/var/lib/influxdb
    environment:
      - INFLUXDB_DB=unifi  # 请勿修改数据库名称,默认只识别 unifi
      - INFLUXDB_ADMIN_USER=CHANGE_ME  # 数据库管理员名称,可根据自己需求修改,与 Unifi OS 中设置用户无关
      - INFLUXDB_ADMIN_PASSWORD=CHANGE_ME  # 数据库管理员密码,可根据自己需求修改,与 Unifi OS 中设置用户无关

  grafana:
    image: grafana/grafana:10.2.3
    restart: always
    user: '472:root'
    ports:
      - '3000:3000'
    volumes:
      - /etc/localtime:/etc/localtime:ro  # 我自己的习惯,只读挂载本机的时区,避免时区显示问题
      - /docker/grafana:/var/lib/grafana
    depends_on:
      - influxdb
    environment:
      - GF_SECURITY_ADMIN_USER=CHANGE_ME  # Grafana 面板管理员名称,可根据自己需求修改,与 Unifi OS 中设置用户无关
      - GF_SECURITY_ADMIN_PASSWORD=CHANGE_ME  # Grafana 面板管理员密码,可根据自己需求修改,与 Unifi OS 中设置用户无关
      - GF_INSTALL_PLUGINS=grafana-clock-panel,natel-discrete-panel,grafana-piechart-panel  # 3 个 Grafana 插件

  unifi-poller:
    restart: always
    image: golift/unifi-poller:v2.9.5
    depends_on:
      - influxdb
      - grafana
    volumes:
      - /etc/localtime:/etc/localtime:ro  # 我自己的习惯,只读挂载本机的时区,避免时区显示问题
      - /docker/unifi-poller:/etc/unpoller

运行结果如下图。

使用 Docker Compose 拉起 Unifi Poller,由于此处我使用本地镜像仓库,所以拉取镜像几乎是以秒级计算的,如果您使用的是上面的镜像加速器,可能需要耐心等待一会儿。应该庆幸的是 ,Unifi Poller 镜像在今年重新上传 Docker Hub 了,前两年作者只上传到 Github 镜像仓库,对于大部分国内用户来说,基本上是拉不下来镜像的。

docker-compose up -d

运行结果如下图。

查看 Unifi Poller 容器运行日志,当发现间隔 30 秒生成一次数据条目,就证明容器运行正常了。

docker logs -f up-unifi-poller-1

运行结果如下图。

3.3. 面板设置

浏览器访问 http://虚拟机IP:3000 ,输入上面 docker-compose.yaml 文件中设置的 Grafana 面板管理员名称及密码进行登录。

3.3.1. 设置语言

单击左侧导航栏,选择 Administration > General

单击 Default preferences,Language 选择 中文 (简体),单击 Save。

虽然汉化依然不完全,但是还是稍微能让大众看懂一些了。

3.3.2. 添加数据源

单击左侧导航栏,选择 连接 > 数据源

单击 Add data source。

选择 InfluxDB

Query language 保持默认选择 InfluxQL,URL 输入 http://虚拟机IP:8086 ,其他选项如图设置。

Database 输入 unifi,User 输入 数据库管理员名称,Password 输入 数据库管理员密码,单击 Save & Test。

显示绿色提示就是测试通过。

3.3.3. 添加面板

单击左侧导航栏,选择 仪表板

单击 导入

输入 10414,单击加载。

下方数据源选择 influxdb,单击 Import。

依次导入 10414 - 10419,总共 6 个面板,即可大功告成!

4. 效果展示

由于上述环境是我自己家的环境,并没有全套的 Unifi 全家桶,所以我下面以我几个月前帮一位朋友搭建的 Unifi 全家桶环境进行 Grafana 截图展示(隐私内容均已马赛克处理)。

4.1. USG Insights

4.2. USW Insights

4.3. UAP Insights

4.4. Client Insights

4.5. Network Site

4.6. Client DPI

5. 讨论分析

下面我就举 2 个例子来说明下数据图表对于了解家里的 Unifi 网络情况到底有什么作用。

5.1. 交换机温度

对于 2 代 Pro 系列 & Enterprise 系列的 Unifi 交换机以及 RPS 设备,都是有温度传感器的。我相信绝大多数家用 Unifi 设备的朋友,即便购买了机架式设备,应该是不会在家里专门搞个恒温机房的。所以夏天时候对于设备的散热应该是会有一定顾虑的,不过就我这一年来对几位朋友家的交换机温度情况进行观察,即便是我们南方,应该问题也是不大的。

下图就是朋友家几台设备近 1 个月的温度变化。可以发现入冬之后,整体设备的温度降幅还是比较明显的。而且,即便是之前温度较高的时候,Unifi 设备也是相当稳定的。

5.2. 客户端 Wi-Fi 信号强度

相信即使是 Wi-Fi 6 普及的现在,很多朋友依然会头疼一件事:明明有线网络下测速已经达到运营商给的网络速度上限了,为什么无线客户端信号依旧很弱,网速依然很慢?我的路由器发射功率设置是否合理?我的 Mesh 节点是否够多?我的 AP 摆放位置是否合理等等?

那么这里,我们还是要了解几个概念。

首先是 dB。日常中通常使用功率来衡量一个电器做功的快慢,如一个 10W 的电灯泡,10W 功率就是电灯泡消耗能量做功的快慢。在天线收发系统里,同样也需要消耗电能来转换为电磁波的能量进行传输。但是电磁波的能量衰减非常快,例如一个 100mW 的能量源,传输一段距离后很快就能衰减成 1mW、0.1mW、0.01mW 甚至更小。对于这种呈几何数量级的衰减,使用功率来衡量会给计数带来不便,因此引用新的概念:dB 和 dBm。

dB 是一个纯计数单位,它的计算公式为 dB = 10lg(A/B)

当 A 和 B 表示两个功率时,dB 就表示两个功率的相对值,例如 A 的功率为 20mW,B 的功率为 10mW,则 10lg(20/10) = 3dB,表示 A 比 B 大 3dB。如果 A 的功率变为 100mW,则 10lg(100/10) = 10dB。所以有句口诀是 「加 3 乘 2,加 10 乘 10;减 3 除 2,减 10 除 10」。

EIRP (Effective Isotropic Radiated Power):有效全向辐射功率,即天线端发射出去时的信号强度。它是天线在天线增益最高的方向上的最大功率输出。

EIRP 必须考虑与连接器相关的功率损耗以及传输线损耗。发射天线的确切辐射输出功率可以使用发射机功率电平、电缆长度和天线增益来计算。在大多数国家/地区,EIRP 由政府机构控制。因此,不允许系统发出高于指定 EIRP 的信号。

EIRP = Tx Power (发射功率) + Tx Antenna (发射天线增益) – Tx Cable (发射电缆损耗)

如果发射器的输入功率电平为 12 dBm,并且使用损耗为 10 dB 的电缆连接到增益为 4 dBi 的天线,则系统的 EIRP 为 18 dBm。

EIRP = 12 dBm + 10 dBi – 4 dB = 18 dBm

以上 EIRP 的计算仅仅是无线发射端的总和,如果要计算完整的路径的信号强度,还需要计算上 Free Space Loss (空气损耗),以及无线接收端的天线增益和电缆损耗之和。

Rx Signal = Tx Power (发射功率) – Tx Cable (发射电缆损耗) + Tx Antenna (发射天线增益) – Free Space (空气损耗) + Rx Antenna (接收天线增益) – Rx Cable (接收电缆损耗)

所以,Rx Signal = 18 dBm – 5 dB + 8 dBi – 25 dB + 8 dBi – 5 dB = -1 dBm

那么 Free Space Loss 有没有一个标准呢,这也是有的,其数学公式如下:

FSPL 公式准确地告诉我们遵循 平方反比定律 的程度。

平方反比定律告诉我们,随着与无线发射源的距离增加一倍,能量会分散在面积的 4 倍以上。这导致信号变成了原始幅度的 1/4。换句话说,每当与信号源的距离增加一倍时,Wi-Fi 信号就会损失 6dB (这在下图中以红色表示)。对比上述的口诀,即减 6 除 4。

正如预期的那样,墙壁会衰减信号。如下图所示。衰减量将取决于墙壁的结构。

根据以上的相关理论知识,我们可以从 Client Insights 面板中的 Wireless Signal 模块去分析家中连接到 Unifi 设备的 Wi-Fi 客户端的无线信号状况了。这里我就抛砖引玉下,大家可以结合时间节点,去分析家中各个客户端的无线信号如何,特别是一些智能家居使用较多的朋友,是否有些客户端的无线信号始终维持在较差的水平,这样可能就要根据实际的情况去调整自己家 Unifi AP 的安装位置和安装密度了。

这里再附上 2 篇 Unifi 官网的帮助文档,和 2 个视频方便大家根据 Unifi 原厂的教程对自己的 Unifi 环境进行 Wi-Fi 调优。

  1. UniFi Network - 优化无线网络速度
  2. UniFi Network - 了解和使用最小 RSSI

6. 结语

谢谢您耐心的看到这里,希望这次的文章,还能像之前的两篇文章一样,能帮助到更多使用 Unifi 设备的朋友。虽然经过这两三年的使用和折腾,我也踩了一些坑,总得来说,我看到更多的是积极的一面,不管是这一年来 Unifi Network 软件功能的完善,还是 Unifi 作为一个全球化的品牌,有着全球那么多用户开发的第三方工具可以搭配使用。我也帮好多周围亲戚朋友从官方商城下单,更新了家庭网络设备,大家都表示比起以前,在家使用有线网络和 Wi-Fi 那是稳定多了。

参考资料

> 下载少数派 客户端、关注 少数派小红书,感受精彩数字生活 🍃

> 实用、好用的正版软件,少数派为你呈现🚀