『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 2219|回复: 15

[基础教程] 利用HA内置的NetData集成读取Openwrt软路由的CPU、内存、磁盘...

[复制链接]

1

主题

38

帖子

328

积分

中级会员

Rank: 3Rank: 3

积分
328
金钱
290
HASS币
10
发表于 2024-6-27 21:06:30 | 显示全部楼层 |阅读模式
    刚看一个帖子有朋友用SSH来读取Openwrt网速,感觉这方法太复杂,而且还有朋友关注读取Openwrt的CPU、内存使用率等数据。本着互联网分享精神,觉得有必要给大家介绍利用HA内置的NetData集成来读取Openwrt软路由相关数据的方法,免得大家走弯路。具体方法和步骤如下:
一、 在Openwrt软路由中安装NetData软件包
1、  关于NetData
    Netdata是一个相当有名的Linux性能实时监测工具,还不清楚该软件的朋友可自行百度。在Linux机器上安装Netdata并启动运行后,通过http://< Linux机器ip>:19999可在浏览器上实时查看NetData监控界面。
2、安装NetData
    虽然可以用命令行,但在Openwrt上安装NetData最简单的方法是通过前端页面。登录Openwrt后,点击菜单“系统”-“软件包”,打开Openwrt软件包安装界面,在筛选器中输入netdata,即可安装该软件包。
1.png
3、  NetData监控页面
      安装结束后,在浏览器中输入http://<Openwrt IP>:19999可打开NetData监控页面。监控页面做得很漂亮,平时也可通过这个页面查看和监控Openwrt的运行状况。不过,监控的东西太细,不是专业人士看起头疼,所以把其中的一些关键指标(如网速、CPU、内存)引入到HA还是有必要。
2.png

二、 在HA中的YAML配置
        把NetData的关键指标数据引入到HomeAssistant需要用到HA内置的NetData集成。由于是内置,所以不必在HA中安装插件,只需要在configuration.yaml中配置即可。具体的配置方法大家见HA文档(https://www.home-assistant.io/integrations/netdata),在此不作详述。下面给出一个示例并简单解释下:

1、在configuration.yaml添加:

# ---netdata配置---
sensor:
  - platform: netdata
    host: "192.168.10.1"
    port: "19999"
    name: main_router
    resources:
      internet_received:
        data_group: "net.eth1.2"  #下载流量(b/s)
        element: "received"
      internet_sent:
        data_group: "net.eth1.2"  #上传流量(b/s)
        element: "sent"  
        invert: true
      system_load1:
        data_group:"system.load"  #系统1分钟、5分钟、15分钟平均负载
        element: "load1"  
      system_load5:
        data_group: "system.load"
        element: "load5"
      system_load15:
        data_group: "system.load"
        element: "load15"     
      system_uptime: #系统上线运行时间(单位:秒)
        data_group: "system.uptime"
            element: "uptime"   

# ---单位换算---
template:
  - sensor:
    - name: "internet received rate"
      unique_id: internet_received_rate
      device_class: data_rate
      icon: mdi:download-network-outline
      unit_of_measurement:"kB/s"  
      state: "{{(states('sensor.main_router_internet_received') | float / 8 ) | round(1,default=0) }}"

    - name: "internet sent rate"
      unique_id: internet_sent_rate
      device_class: data_rate
      icon: mdi:upload-network-outline
      unit_of_measurement: "kB/s"  
      state: "{{(states('sensor.main_router_internet_sent') | float / 8 ) | round(1, default=0)}}"

    - name: "Main Router Uptime"
      unique_id: main_router_uptime
      icon: mdi:av-timer
      unit_of_measurement: "天"  

     state: "{{ (states('sensor.main_router_system_uptime') | float /3600 /24 ) | round(1, default=0) }}"


2、简单解释:
      配置分为两部分,第一部分是关键的netdata配置,第二部分是利用HA的模板功能进行单位换算,将网速从原始的kb/s换算成kB/s,将上线时间从原始的秒换算成天,用过模板功能的朋友都看得懂,这部分不作解释,下面重点谈谈netdata配置:
      netdata配置前面的几条语句是关于主机和端口的部分,其中host是Openwrt的IP,使用时根据自身情况修改。
resources后是要监测的测量数据,每个测量数据涉及一个实体名称,一个数据组(data_group),一个元素(element)。其中实体名称可自取,设定后在HA中可使用sensor.<实体名称>取得该测量数据的实体ID;关键是数据组名和元素名。
      数据组名和元素名来自netdata接口返回的json数据包。在浏览器中输入【http://<Openwrt IP>:19999/api/v1/allmetrics?format=json】将返回netdata所有测量数据的数据报文,根据自己要监测的数据从该报文中取得相应的数据组名和元素名。比如我的Openwrt网卡有VLAN,传输互联网数据的虚拟网卡是eth1.2,在netdataJSON数据报文(见下图)中查找出它的数据组名是”net.eth1.2”,下载流量的元素名是“received”,上传流量的元素名是”sent”,找出后填写分别填写在data_group:和element:后即可。另外,从报文中的“units”属性还可知晓该数据的单位,必要时根据自己需要用HA的模板功能进行换算。
上例中,除网速外,还包括系统负载和路由上线时间几个测量数据。如果需要CPU、内存、磁盘等监测数据,可从netdata返回的JSON报文中查出它们的数据组名和元素名,按上例的格式进行增添。
3.png
三、 补充:HA监控其它主机的运行数据
    Netdata是一个Linux性能实时监测工具而不仅仅是一个Openwrt监控工具,因此用此方法你可在HA中监控任意一个Linux主机,只要这个主机安装了netdata、且防火墙打开了19999端口。
    结合Promethus的Windows-Exporter和netdata,你甚至还可以监控Windows Server主机,有兴趣的朋友可从https://www.netdata.cloud/windows-monitoring/了解详情。其概念图是:
4.png

评分

参与人数 3金钱 +40 HASS币 +10 收起 理由
lyg21883 + 10 论坛有你更精彩!
Alkali + 10 高手,这是高手!
+ 20 + 10 感谢楼主分享!

查看全部评分

回复

使用道具 举报

50

主题

278

帖子

1746

积分

金牌会员

Rank: 6Rank: 6

积分
1746
金钱
1468
HASS币
0
发表于 2024-6-28 11:36:57 | 显示全部楼层
太好了,正好需要这个。
回复

使用道具 举报

0

主题

20

帖子

164

积分

注册会员

Rank: 2

积分
164
金钱
144
HASS币
0
发表于 2024-6-28 11:38:16 | 显示全部楼层
学习学习
回复

使用道具 举报

22

主题

628

帖子

4381

积分

版主

Rank: 7Rank: 7Rank: 7

积分
4381
金钱
3738
HASS币
40
发表于 2024-6-28 14:11:44 | 显示全部楼层
机智,这个方法好
回复

使用道具 举报

5

主题

92

帖子

1831

积分

论坛DIY达人

积分
1831
金钱
1739
HASS币
0
发表于 2024-6-28 17:51:26 | 显示全部楼层
这种方法能不能把路由器的CPU温度和WiFi0、WiFi1的温度也接入hass显示出来呢?
回复

使用道具 举报

1

主题

38

帖子

328

积分

中级会员

Rank: 3Rank: 3

积分
328
金钱
290
HASS币
10
 楼主| 发表于 2024-6-28 18:36:20 | 显示全部楼层
kittyme 发表于 2024-6-28 17:51
这种方法能不能把路由器的CPU温度和WiFi0、WiFi1的温度也接入hass显示出来呢? ...

应该问题不大,只要netdata能监控的数据,HA就能读取到。至于netdata如何监控CPU温度等,网上介绍有很多方法。
回复

使用道具 举报

0

主题

24

帖子

182

积分

注册会员

Rank: 2

积分
182
金钱
158
HASS币
0
发表于 2024-6-29 16:16:15 来自手机 | 显示全部楼层
关注一下,,,
回复

使用道具 举报

1

主题

13

帖子

100

积分

注册会员

Rank: 2

积分
100
金钱
87
HASS币
0
发表于 2024-6-30 16:37:15 | 显示全部楼层
windows支持看起来需要修改vnode.conf, 但是我在页面中没有看到,有大佬知道netdata怎么添加其他的vnode吗?
回复

使用道具 举报

1

主题

38

帖子

328

积分

中级会员

Rank: 3Rank: 3

积分
328
金钱
290
HASS币
10
 楼主| 发表于 2024-6-30 21:36:08 | 显示全部楼层
kalenty 发表于 2024-6-30 16:37
windows支持看起来需要修改vnode.conf, 但是我在页面中没有看到,有大佬知道netdata怎么添加其他的vnode吗 ...

1、在Windows Sever上安装 Promethus的Windows-Exporter
2、ubuntu上安装 NetData
3、新增netdata配置winserver的文件:/etc/netdata/go.d/windows.conf,加入:
    jobs:
      - name: win_server
        url: http://[winserverIP]:9182/metrics
4、注意,ubuntu安装netdata使默认没有安装go.d.plugin插件,需要手动安装
      插件下载地址:https://github.com/netdata/go.d.plugin/releases
      拷贝go.d.plugin到 /usr/lib/netdata/plugins.d文件夹
回复

使用道具 举报

1

主题

38

帖子

328

积分

中级会员

Rank: 3Rank: 3

积分
328
金钱
290
HASS币
10
 楼主| 发表于 2024-6-30 21:39:06 | 显示全部楼层
1.png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-9-8 08:58 , Processed in 0.060182 second(s), 36 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表