监视远程服务器非常重要,它用于确保您没有耗尽计算资源、内存或磁盘空间。在Raspberry Pi 群集中,您的资源特别有限,这一点更为重要。一个没有空间的 SD 卡可以击倒你树莓派的网络或阻止服务工作。
幸运的是,有一个能与与 Prometheus 一起使用时间序列数据库,这有一个本地可执行文件,名为:Node Exporter。 它收集有用的系统信息,并使其可用于您的时间序列数据库。
如果您想了解普 Prometheus,请参阅我的综合指南:《Monitor your applications with Prometheus》
准备
- 在你的计算机上安装 Docker
- 一个或多个 Raspberry Pi 或者 ARMv6/v7 开发板
这些步骤在 Raspbian Jessie Lite 上进行了测试,但我预期任何基于 Linux 的发行版都可以正常工作。
您也可以将本文中的技术,应用于监控云或家庭实验室服务器 – 只需选择 “64位” 下载,而不是 ARM。
搭建 NodeExporter
GitHub上 的 NodeExporter 项目有 64 位机器和 ARM 的二进制版本,这意味着我们只需要获取二进制文件,解包并启动它。
如果您使用的是 Raspberry Pi Zero,B 或 B+ 使用 “ARMv6”,其它的其他任何使用 “ARMv7”:
$ curl -SL https://github.com/prometheus/node_exporter/releases/download/v0.14.0/node_exporter-0.14.0.linux-armv7.tar.gz > node_exporter.tar.gz && \
sudo tar -xvf node_exporter.tar.gz -C /usr/local/bin/ --strip-components=1
现在启动它:
$ node_exporter &
最简单的方法是使用 crontab -e
将 @reboot /usr/local/bin/node_exporter
添加到您的 CRON 文件中。
使用 sudo systemctl enable cron
允许 cron。
如果你想以更有弹性的方式启动服务,那么你可以建立一个 systemd 单元文件。
一旦运行,您将能够浏览到的 Raspberry Pi 上的 IP 地址的 端口 9100。请记下此 URL,因为我们需要更新我们的 Prometheus 配置,并告诉它稍后再进行度量(metrics)。
浏览可用的指标:
$ curl localhost:9100/metrics | less
您可以在 NodeExporter 主页上找到有关可用指标的更多信息:NodeExporter
一旦你在你所有的树莓派上重复了这个任务,并记下他们的 IP 地址,就可以继续下一步。
配置采集配置结点
Prometheus 使用拉(pull)模型采集配置(scrape)指标,这意味着无论您运行 Prometheus 的哪个地方,您的树莓派都需要在网络上访问。
运行 Prometheus 最简单的方法是通过 Docker:
解压默认的配置文件:
$ docker create --name prom_empty prom/prometheus
$ docker cp prom_empty:/etc/prometheus/prometheus.yml ./prometheus.yml
编辑采集配置
使用一个编辑器打开 ./prometheus.yml
文件
应该看到如下的内容块:
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
然后为每个 Raspberry Pi 添加如下的内容:
scrape_configs:
- job_name: 'RPi1'
static_configs:
- targets: ['192.168.0.17:9100']
- job_name: 'RPi2'
static_configs:
- targets: ['192.168.0.18:9100']
使用你的配置构建一个 Prometheus 镜像
Dockerfile 文件:
FROM prom/prometheus
COPY ./prometheus.yml /etc/prometheus/prometheus.yml
构建:
$ docker build -t prometheus/rpi-monitor .
运行 Prometheus
你现在可以运行 Prometheus。 如果您需要调整配置,请确保在第二次移除和运行容器之间构建映像。
$ docker run -p 9090:9090 --name prometheus-rpi -d prometheus/rpi-monitor
如果您已经将 Prometheus 作为 OpenFaaS 堆栈的一部分运行,请将端口绑定更改为 9091,而不是使用 -p 9091:9090
。
当你想停止容器类型时:docker rm -f prometheus-rpi
。
探索度量
检查 Target
如果一切正常,您将在 “Status -> Targets” 菜单下看到主机。
探索度量
现在,您可以通过转到 http://localhost:9090,在启动 Prometheus 的主机上打开 UI,然后选择可用的许多指标之一。
一个度量指标可以是从磁盘读入的字节数。通常在一个空闲的系统上,这将是 0 字节左右。
输入以下表达式:
rate(node_disk_bytes_read[1m])
现在转过 Raspberry Pi,输入:
$ find /; find /; find /
它将开始读取文件系统中的每个文件和目录,并为我们的图形生成一些噪音:
您可以使用 -/+ 图标来更改时间窗口。
检出网络流量
通过输入以下内容,您可以获得有趣的网络流量读数:
$ git clone https://github.com/alexellis/faas /tmp/faas
它将从互联网上拉下几十兆字节数据。
使用查询:
rate (node_network_receive_bytes{device="eth0"}[2m] )
在图的开始处(上下文),我们看到 Kubernetes(一个容器调度器)和 Prometheus 空闲时使用的基线流量。 然后,我们在单个主机上启动了 git clone
操作,发现流量相对较高:
检查磁盘空间
您可以使用 PromQL 获得根分区上千兆字节估计的值,如下所示:
node_filesystem_free{mountpoint="/"}/1024/1024/1024
那么警告呢?
警报可以由 Prometheus 和 AlertManager 项目生成。这意味着您不必主动检查图表,并且可以向 Slack,HipChat 或支持 webhook 的类似服务发送消息。相关内容:Read up on AlertManager
OpenFaaS 使用 AlertManager 在遇到高负载的函数自动扩展。你可以在在 openfaas.com 了解更多信息
整合
现在,您可以监视所有的树莓派 – 无论它们是您的群集的哪一部分,还是只是在家中或办公室中为其他目的服务。