..

如何构建家庭监控大盘

周末突然想起许久前与朋友聊天,谈到他的家庭网络虽然是电信接入,但是质量堪忧总是时不时的“抽风”,最终却也不知是路由器还是宽带在捣鬼。

作为一名 SRE 每日在解决线上业务可观测的问题,突发奇想有没有可能针对自家的状况,也配置一个监控大盘?🤔

花了一天时间踩坑后初版如下,包含局域网设备负载、网络流量、湿温度趋势等信息。本篇文章将分享家庭大盘搭建的思路,希望读者可以少踩几个坑 XD

TOC

一、名词解释

名词解释
HAHome Assistant 系统,基于树莓派硬件搭建。负责家庭智能设备的管理。
HA IntegrationHome Assistant 系统集成,本篇文章主要用于收集数据
HA AddonsHome Assistant 系统加载项,简单理解为由 HA OS 动态新增&管理的容器
R2S 软路由OpenWrt 系统,基于 R2S 硬件设备搭建。负责二级网络的路由
LinksysLinksys 路由器,家庭网路中的主路由。

整体家庭网络拓扑以及关键设备如下(详情参考上一篇文章): network_status

二、监控需求

基于下图家庭网络拓扑(参考上一篇文章),期望最终绘制的大盘满足以下几个需求:

  1. 设备负载情况树莓派(Home Assistant)R2S 软路由 等局域网设备的系统指标,例如 load、内存等..
  2. 宽带流量使用趋势:Linksys 主路由、子网二级路由,对应的上传下载实时速率,以及历史趋势。
  3. 智能家居传感器:室内室外湿温度、设备开关状态等..

三、整体方案

最终将整体系统分为三部分:

  1. 数据收集 & 数据存储
    1. 树莓派 相关数据(智能家居信息+系统指标),直接保存至本地 InfluxDB
    2. R2S 软路由 系统指标,通过 expert 的形式暴露,并保存至 Prometheus 中
  2. 数据展示:通过主流的 grafana 可视化平台,配置大盘展示数据

home_monitoring_system_design

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

⚠️注意

  1. 关闭配置中 ssl 选项后启动
  2. 创建用户
  3. 创建数据库

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 两个数据源,自由配置大盘即可。

如下为我初步配置的大盘,设备负载情况,室内室外温差湿度,以及关心的网络可用性,历史趋势等信息一目了然 ✨

参考: