使用树莓派进行温度和湿度测量,再通过Prometheus进行图形化展示
首先
我使用树莓派进行温度和湿度测量,并使用Munin将其图形化。但由于想要使用现代的工具来查看图表,所以我迁移到了Prometheus。
环境
-
- Raspbian 9.1 (stretch)
- 温度・湿度の計測はUSBRHを使用
设定方法
安装Prometheus
Debian系列可以使用apt-get命令轻松安装Prometheus和Node exporter,从而实现自动获取度量指标并可见化成图表。
$ sudo apt-get install prometheus
$ systemctl status prometheus
$ systemctl status prometheus-node-exporter
另外,由于存储库中的Prometheus版本过旧(1.x),如果想要使用新版本(2.x),也可以从Debian sid(不稳定版)的页面上下载软件包。
$ wget http://ftp.jp.debian.org/debian/pool/main/p/prometheus/prometheus_2.2.1+ds-2_armhf.deb
$ sudo dpkg -i prometheus_2.2.1+ds-2_armhf.deb
取得状况可以通过访问http://IP地址:9090或使用curl进行确认。
$ curl localhost:9100/metrics
顺便提一下,Prometheus的配置文件位于 /etc/prometheus/prometheus.yml。
我自己制作了Node exporter。
为了将通过USBRH测得的温度和湿度数据导入到Prometheus中,
我们需要自己制作一个Node exporter的Textfile collector。
node-exporter的选项在/etc/default/prometheus-node-exporter中被设置如下。
Textfile收集器的目录通过-collector.textfile.directory选项设置为/var/lib/prometheus/node-exporter。
ARGS="-collector.diskstats.ignored-devices=^(ram|loop|fd)\d+$ \
-collector.filesystem.ignored-mount-points=^/(sys|proc|dev|run)($|/) \
-collector.textfile.directory=/var/lib/prometheus/node-exporter"
查看目录的权限时,所有者是prometheus,模式为755,但为了让其他用户也能够写入,更改模式为777更方便。
$ ls -l /var/lib/prometheus
drwxr-xr-x 262 prometheus prometheus 4.0K yy月 dd hh:mm metrics/
drwxr-xr-x 2 prometheus prometheus 4.0K yy月 dd hh:mm node-exporter/
$ sudo chmod 777 /var/lib/prometheus/node-exporter
構築一个自定义的Textfile collector,使用适用于Prometheus的库。
有Go、Java、Python、Ruby等语言可用,而我选择了Python。
$ pip install prometheus_client
根据公式页面等参考,我自己制作了如下所示的内容。
#!/usr/bin/env python
from prometheus_client import CollectorRegistry, Gauge, write_to_textfile
import subprocess
bin = '/usr/local/bin'
lib = '/var/lib/prometheus/node-exporter'
registry = CollectorRegistry()
g = Gauge('usbrh', 'USBRH', ['kind'], registry=registry)
usbrh = subprocess.check_output(bin + '/usbrh').split()
g.labels('temperature').set(usbrh[0])
g.labels('humidity').set(usbrh[1])
write_to_textfile(lib + '/usbrh.prom', registry)
我們試著去確認一下動作。
$ ./usbrh.py
$ cat /var/lib/prometheus/node-exporter/usbrh.prom
# HELP usbrh USBRH
# TYPE usbrh gauge
usbrh{kind="humidity"} 46.42
usbrh{kind="temperature"} 26.07
$ curl localhost:9100/metrics
如果没有问题的话,可以将脚本设置在cron等中以定期获取。
使用Prometheus检查温度和湿度
过一段时间,我们会在 Prometheus 上能够通过图形来查看温度和湿度。
借助 Grafana,我们可以使图形更易于阅读,并且能够轻松自定义。