刚看一个帖子有朋友用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,即可安装该软件包。 3、 NetData监控页面 安装结束后,在浏览器中输入 http://<Openwrt IP>:19999可打开NetData监控页面。监控页面做得很漂亮,平时也可通过这个页面查看和监控Openwrt的运行状况。不过,监控的东西太细,不是专业人士看起头疼,所以把其中的一些关键指标(如网速、CPU、内存)引入到HA还是有必要。
二、 在HA中的YAML配置
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报文中查出它们的数据组名和元素名,按上例的格式进行增添。 三、 补充:HA监控其它主机的运行数据 Netdata是一个Linux性能实时监测工具而不仅仅是一个Openwrt监控工具,因此用此方法你可在HA中监控任意一个Linux主机,只要这个主机安装了netdata、且防火墙打开了19999端口。
|