如何构建家庭监控大盘
周末突然想起许久前与朋友聊天,谈到他的家庭网络虽然是电信接入,但是质量堪忧总是时不时的“抽风”,最终却也不知是路由器还是宽带在捣鬼。
作为一名 SRE 每日在解决线上业务可观测的问题,突发奇想有没有可能针对自家的状况,也配置一个监控大盘?🤔
花了一天时间踩坑后初版如下,包含局域网设备负载、网络流量、湿温度趋势等信息。本篇文章将分享家庭大盘搭建的思路,希望读者可以少踩几个坑 XD
TOC
一、名词解释
名词 | 解释 |
---|---|
HA | Home Assistant 系统,基于树莓派硬件搭建。负责家庭智能设备的管理。 |
HA Integration | Home Assistant 系统集成,本篇文章主要用于收集数据 |
HA Addons | Home Assistant 系统加载项,简单理解为由 HA OS 动态新增&管理的容器 |
R2S 软路由 | OpenWrt 系统,基于 R2S 硬件设备搭建。负责二级网络的路由 |
Linksys | Linksys 路由器,家庭网路中的主路由。 |
整体家庭网络拓扑以及关键设备如下(详情参考上一篇文章):
二、监控需求
基于下图家庭网络拓扑(参考上一篇文章),期望最终绘制的大盘满足以下几个需求:
- 设备负载情况:
树莓派(Home Assistant)
、R2S 软路由
等局域网设备的系统指标,例如 load、内存等.. - 宽带流量使用趋势:Linksys 主路由、子网二级路由,对应的上传下载实时速率,以及历史趋势。
- 智能家居传感器:室内室外湿温度、设备开关状态等..
- …
三、整体方案
最终将整体系统分为三部分:
- 数据收集 & 数据存储:
树莓派
相关数据(智能家居信息+系统指标),直接保存至本地 InfluxDBR2S 软路由
系统指标,通过 expert 的形式暴露,并保存至 Prometheus 中
- 数据展示:通过主流的 grafana 可视化平台,配置大盘展示数据
p.s. 针对数据存储多说两句,因为博主的 HA 直接以 Home Assistant Operating System 的形式安装在树莓派中,所以可访问 Add-ons(例如直接安装 grafana 等)。如果读者是以 container 的形式安装,针对下文提到的 Add-ons 应用,在宿主机中直接用 docker 一键快速拉起即可。
四、技术细节
这一小章简单说下我踩过的那些坑~
4.1 数据收集
4.1.1 Openwrt 软路由系统指标
安装 prometheus node exporter 后,Openwrt 的实时系统数据就会通过 http 接口透出,方便下一章 prometheus 进行采集与持久化:
具体脚本如下:
# openwrt prometheus exporter
opkg install prometheus-node-exporter-lua \
prometheus-node-exporter-lua-nat_traffic \
prometheus-node-exporter-lua-netstat \
prometheus-node-exporter-lua-openwrt \
prometheus-node-exporter-lua-wifi \
prometheus-node-exporter-lua-wifi_stations
# 启动:
/etc/init.d/prometheus-node-exporter-lua restart
# 打开开机启动
/etc/init.d/prometheus-node-exporter-lua enable
4.1.2 HA 树莓派系统指标
安装 System Monitor 集成:修改 /config/configuration.yaml
后重启。
配置参考:
sensor:
- platform: systemmonitor
resources:
- type: disk_use_percent
- type: memory_free
- type: memory_use
- type: memory_use_percent
- type: load_1m
- type: load_5m
- type: load_15m
- type: processor_temperature
- type: processor_use
4.1.3 智能家居设备数据
HA 安装 InfluxDB 集成,配置参考(注意 host地址/数据库名称/用户名密码等信息,需根据实际情况更新):
influxdb:
host: 10.200.1.*
port: 8086
database: homeassistant
username: grafana
password: ***
ssl: false
verify_ssl: false
max_retries: 3
default_measurement: state
4.1.4 家庭外网/内网可用性数据
HA 安装 Binary Sensor 集成,配置需要的网络探测(后续用于判定家庭网络的可用性):
binary_sensor:
- platform: ping
host: 192.168.2.170
name: "Sony TV"
count: 2
scan_interval: 10
- platform: ping
host: 47.52.*.*
name: "HK SS"
count: 2
scan_interval: 10
- platform: ping
host: 223.5.5.5
name: "ALIBABA DNS"
count: 2
scan_interval: 10
4.2 数据存储
4.2.1 安装 InfluxDB Add-on
HA Add-ons 中找到 InfluxDB 安装即可:https://github.com/hassio-addons/addon-influxdb
⚠️注意
- 关闭配置中 ssl 选项后启动
- 创建用户
- 创建数据库
4.2.2 安装 Prometheus Add-on
这一步坑较多,有条件的朋友推荐 docker 一键拉起。
步骤: 1)因为该 prometheus addon 为测试版本(未正式发行),需更新repo后才能在ha中找到:https://github.com/hassio-addons/repository-beta
2)安装并启动
3)参考文档配置 targets 时,文件一定要以 yaml
后缀:
[core-ssh targets]$ cat /share/prometheus/targets/openwrt.yaml
---
job_name: "openwrt"
scrape_interval: 15s
metrics_path: "/metrics"
static_configs:
- targets: ["10.200.1.94:9100"]
[core-ssh targets]$
4)web 界面查看 target 是否生效
4.3 数据展示
4.3.1 安装 Grafana
安装 grafana 后,根据上一步 InfluxDB + Prometheus 两个数据源,自由配置大盘即可。
如下为我初步配置的大盘,设备负载情况,室内室外温差湿度,以及关心的网络可用性,历史趋势等信息一目了然 ✨