博客/工程

我如何监视我的OpenWrt路由器与Grafana云和普罗米修斯

2021年2月9日6分钟

多年来,我一直是开源的粉丝和用户,这可以追溯到我们定义这个术语之前。开源我们称之为"自由软件“无论何时何地,我更希望能够控制我在设备上运行的软件。

举个例子:我的网络路由器运行正常OpenWrt,这是一个免费/开源的Linux操作系统,旨在取代路由器制造商提供的软件。您可以安装OpenWrt在广泛的支持设备.当您这样做时,您经常会得到增强的稳定性,以及现有软件中无法提供的额外配置选项。

在这篇文章中,我将描述如何使用OpenWrt来监控我的Linksys WRT1900AC路由器的功能Grafana云

先决条件

为了将我的参数发送到Grafana Cloud,我首先必须注册一个Grafana云建立账户。有一个免费的计划对于这样的项目来说是完美的。我以前就这样做过,所以今天我真正要做的就是准备创建一个Prometheus配置YAML文件,记下我的Grafana Cloud用户名,并在密码的地方设置一个API密钥。

您还必须有一个正确设置并运行OpenWrt的互联网路由器,以及在您的局域网内能够运行Prometheus的系统,以便从您的路由器中抓取指标并将其转发到Grafana Cloud。

与OpenWrt交互

除了基础操作系统,OpenWrt项目还提供了一套大型软件您可以通过安装来自定义使用硬件的方式和软件的功能。这些包中的大多数都允许重要的配置选项。这就是我们实现今天目标的方法。

有两种方法可以与OpenWrt交互来安装包。你可以直接使用ssh登录到路由器,如果你已经安装了它,你可以使用一个叫做Luci的web UI。ssh连接为您提供一个Busyboxshell,其中包含标准UNIX实用程序的有用子集。

如果您更喜欢使用GUI,设计师小金提供了一个类似于库存固件的界面,易于导航。

从OpenWrt路由器公开指标

首先要弄清楚的是如何从路由器导出有用的指标。我想让他们普罗米修斯格式,使可视化在Grafana云简单。幸运的是,OpenWrt包管理器中有Prometheus节点导出器包可用。

我们将使用命令行界面。我们需要安装几个包,包括一个Prometheus节点导出器和一组特定的度量导出器。套餐为:

  • 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

为了安装包,我们使用Opkg包管理器这是OpenWrt附带的。首先,更新包列表:

opkg更新

然后安装我们想要的软件包:

Opkg安装普罗米修斯-node-export -lua \普罗米修斯-node-export -lua-nat_traffic \普罗米修斯-node-export -lua-netstat \普罗米修斯-node-export -lua-openwrt \普罗米修斯-node-export -lua-wifi \普罗米修斯-node-export -lua-wifi - stations

还有其他的Prometheus导出包可用,甚至一个Prometheus本身的包,如果你有一个存储和内存足够大的路由器运行完整版本(在这种情况下,你实际上可以直接从路由器远程写入到Grafana Cloud !)我选择这些是因为我发现这个贡献的仪表盘它被预先配置为使用来自这组导出器的指标。

默认情况下,我们安装的节点导出器将把数据导出到端口9100的本地主机/metrics。让我们测试节点导出器是否按要求导出数据。在此命令生效之前,您可能需要安装curl实用程序。如果是这样,您将看到几个结构化指标屏幕滚动过去。

旋度localhost: 9100 /指标

这很好,但我们不能从外部获取,而且对于我们大多数人来说,路由器上没有足够的空间来运行Prometheus实例。因此,我们需要通过lan可访问的IP地址使这些指标可用。

为此,我们将编辑/etc/config/prometheus-node-export -lua。附注:与OpenWrt一起安装的编辑器是vi的BusyBox版本,所以如果你不记得如何使用它,请温习一下(尽管所有好的sre至少应该知道基本知识,对吗?)

编辑文件,使其内容如下:

配置prometheus-node-export -lua 'main'选项listen_ipv6 '0'选项listen_port '9100'选项listen_interface 'lan'

尝试在listen_interface中放入IP地址是很诱人的,但这行不通。接口必须是OpenWrt接口名称。您可以在/etc/config/network文件中找到可用的命名接口列表。

在编辑/etc/config/prometheus-node-export -lua后,你必须重新启动服务来加载新的配置,就像这样:

/etc/init.d / prometheus-node-exporter-lua重启

我的局域网中路由器的IP地址是192.168.1.1。现在任何人都可以通过192.168.1.1:9100/ Metrics访问我的局域网。下面是在我的浏览器中看到的摘录:

使用Prometheus抓取OpenWrt指标

最终,我们需要将指标发送到Grafana Cloud。为此,我们必须首先从内部lan可用URL中获取指标。正如我提到的在我的个人博客上,我已经在我的局域网的Linux工作站上运行Prometheus,并使用它将其他指标发送到我的Grafana Cloud实例。

Prometheus可以配置为使用远程写入功能将指标推送到远程位置。为了配置远程写入以将我的指标发送到Grafana Cloud,我首先必须注册一个Grafana云建立账户。我以前做过,所以今天我真正要做的就是通过插入这个代码片段编辑Prometheus配置YAML文件。当然,我将其编辑为包含我的Grafana Cloud用户名和一个API密钥,而不是密码。

这是需要添加到普罗米修斯结尾的代码。yaml配置文件通过remote_write功能推送指标到我的Grafana云帐户:

remote_write: - url: https://prometheus-us-central1.grafana.net/api/prom/push basic_auth: username: [Your Grafana Cloud UserID] password: [Your Grafana Cloud API Key]

同时,我还添加了一个新的job_name部分:

—job_name: OpenWrt static_configs:—targets: [192.168.1.1:9100']

在Grafana Cloud中查看指标

过了一会儿,在Grafana Cloud中就可以使用指标了。我登录并进入仪表板->管理。从那里,我点击导入,输入我之前提到的OpenWrt仪表板的URL://www.tubolov.com/grafana/dashboards/11147

这是仪表盘运行的一段摘录。

附言

整个过程花了我几个小时。这本来会更快,但我必须自己弄清楚一些细节,我在这篇博客文章中记录并分享了这些细节。

写这篇文章后,我了解到Grafana实验室自己的bob电竞频道汤姆·威尔基创建了一个init。d脚本为OpenWrt使它容易运行完整普罗米修斯node_exporter而不是上面使用的Lua版本。此外,他还创造了一个类似的脚本dnsmasq_exporter,因为OpenWrt已经有了Dnsmasq已安装并运行。

威尔基方法的一个问题是,大多数商品/消费级设备,比如我六岁的孩子v1 Linksys WRT-1900ac,没有足够的存储空间或内存来运行普罗米修斯导出程序的完整版本。然而,对于那些在拥有大量可用存储和内存的设备上运行OpenWrt的人来说,这当然更强大,值得探索。