我的家庭监控大盘

标签: 智能家居 | 发表时间:2022-03-27 17:03 | 作者:
出处:https://changchen.me/

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

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

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

TOC

一、名词解释

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

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

二、监控需求

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

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

三、整体方案

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

  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 进行采集与持久化:

具体脚本如下:

1     
2
3
4
5
6
7
8
9
10
11
12
# 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 后重启。

配置参考:

1     
2
3
4
5
6
7
8
9
10
11
12
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 地址 / 数据库名称 / 用户名密码等信息,需根据实际情况更新):

1     
2
3
4
5
6
7
8
9
10
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 集成,配置需要的网络探测(后续用于判定家庭网络的可用性):

1     
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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 后缀:

1     
2
3
4
5
6
7
8
[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 两个数据源,自由配置大盘即可。

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

参考:

相关 [家庭 监控 大盘] 推荐:

我的家庭监控大盘

- - Henry Z's blog~
周末突然想起许久前与朋友聊天,谈到他的家庭网络虽然是电信接入,但是质量堪忧总是时不时的“抽风”,最终却也不知是路由器还是宽带在捣鬼. 作为一名 SRE 每日在解决线上业务可观测的问题,突发奇想有没有可能针对自家的状况,也配置一个监控大盘. 花了一天时间踩坑后初版如下,包含局域网设备负载、网络流量、湿温度趋势等信息.

用 Google+ Hangouts 山寨一个家庭视频监控系统

- Alimoe - 谷奥——探寻谷歌的奥秘
Delerium又发现了Google+ Hangouts视频群聊功能的一个用途:山寨型家庭视频监控系统. 其实用iOS设备的Facetime也可以实现,不过Google+ Hangouts更简单. 你只需要注册两个Google+帐户,二者同时加到一个私密的Hangouts群组里,就可以互相监控了,可以一台电脑在办公室,另外一台在家里,随时监控那边的情况.

基于MQTT协议与ESP8266平台的家庭环境监控实现 | 千里

- -
在智能家居的应用场景中,传感器一直是非常重要的组成部分. 比如传感器报告的温度高了可以自动关窗开空调. 在一般的使用场景中,众多的传感器和开关会分散在房子中的不同位置,通过布线连接是不现实的,理想的情况当然是通过已有的无线网络进行连接,网络传输就需要特定的协议,MQTT协议就是一个不错的选择. 手头刚好有一些传感器和一个ESP8266芯片的单片机(WeMos D1),做了一个家庭温湿度、光照及空气质量监控器,并通过MQTT协议推送数据到Home Assistant平台.

树莓派打造的家庭环境监控 | iOS开发和七七八八

- -
最近空气质量又有下降的趋势,想想手头的RPI2B,干脆拿来改造成一个环境监控系统吧,放在客厅随时可以看到,情况不对马上开净化器😊. 传感器部分都是以前就买了的,平时拿来偶尔玩一下. 主要是三个:一个空气质量检测的激光传感器,一个温湿度的DHT22,一个凑数的带光感的数模转换. 屏幕是一块5寸的HDMI破电阻屏,用来搭建本体的是两包白色塑料小积木,所有东西均购自淘宝,包括树莓派物料成本大约500+.

一部手机加一台群晖 NAS,轻松搭建私有云盘 + 家庭监控系统

- - 少数派
照片、电影、视频、文档,这些曾经需要靠大容量硬盘来存储的时代已经悄然过去,我们已经习惯用在线服务将这些文件存储到云端:无论是电脑还是手机,只要能上网我们就能随时在线使用. 但云服务其实完全依赖于你的网速——比起家中内网千兆的传输速度,外网访问速度都无法与之媲美,加之目前逐步抬高的云服务价格——动辄几百块的年费加上不那么让人放心的服务稳定性,如果遇到服务故障丢失数据文件,绝对让人欲哭无泪.

ZooKeeper监控

- - 淘宝网通用产品团队博客
        在公司内部,有不少应用已经强依赖zookeeper,比如meta和精卫系统,zookeeper的工作状态直接影响它们的正常工作. 目前开源世界中暂没有一个比较成熟的zk-monitor,公司内部的各个zookeeper运行也都是无监控,无报表状态. 目前zookeeper-monitor能做哪些事情,讲到这个,首先来看看哪些因素对zookeeper正常工作比较大的影响:.

性能监控

- - 互联网 - ITeye博客
一旦你的服务器是在控制台模式下运行,你就可以开始我们接下来的内容. iostat  iostat 命令用来显示存储子系统的详细信息,通常用它来监控磁盘 I/O 的情况. 要特别注意 iostat 统计结果中的 %iowait 值,太大了表明你的系统存储子系统性能低下. meminfo 和 free  Meminfo 可让你获取内存的详细信息,你可以使用 cat 和 grep 命令来显示 meminfo 信息: 1 cat /proc/meminfo  另外你可以使用 free 命令来显示动态的内存使用信息,free 只是给你大概的内存信息,而 meminfo 提供的信息更加详细.

DB2监控

- - CSDN博客数据库推荐文章
     收集的一些DB2监控方法.. -- 是到数据库快照,并存入文件.  -- 查找并重新绑定无效包 .  -- 查出 myuser 模式下的所有无效包.  -- 利用查出的 pkgname ,使用 Rebind 重新绑定. -- 查看所有用户定义(tabschema not like 'SYS%' )表的状态.

nagios 监控redis

- - C1G军火库
下载check_redis.pl. OK: REDIS 2.6.12 on 192.168.0.130:6379 has 1 databases (db0) with 49801 keys, up 3 days 14 hours - connected_clients is 1, blocked_clients is 0 | connected_clients=1 blocked_clients=0.

监控进程

- - 火丁笔记
有时候,进程突然终止服务,可能是没有资源了,也可能是意外,比如说:因为 OOM 被杀;或者由于 BUG 导致崩溃;亦或者误操作等等,此时,我们需要重新启动进程. 实际上,Linux 本身的初始化系统能实现简单的功能,无论是老牌的 SysVinit,还是新潮的  Upstart 或者  Systemd 均可,但它们并不适合处理一些复杂的情况,比如说:CPU 占用超过多少就重启;或者同时管理 100 个 PHP 实现的 Worker 进程等等,如果你有类似的需求,那么可以考虑试试 Monit 和 Supervisor,相信会有不一样的感受.