From 01fe568acbaab1a33ba3071c9416a1cb68e3570a Mon Sep 17 00:00:00 2001 From: Lajos Koszti Date: Tue, 19 Sep 2017 08:12:15 +0200 Subject: [PATCH 1/7] Use labels instead different keys --- raspberry_exporter | 51 +++++++++++++++++++++++++--------------------- 1 file changed, 28 insertions(+), 23 deletions(-) diff --git a/raspberry_exporter b/raspberry_exporter index dd098ec..6c7b4f4 100755 --- a/raspberry_exporter +++ b/raspberry_exporter @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/sh set -eu @@ -8,25 +8,30 @@ TEMPFILE=$TEXTFILE.$$ mkdir -p /var/lib/node_exporter/textfile_collector/ -TEMP=$(awk '{printf "%.2f", $1/1000}' /sys/class/thermal/thermal_zone0/temp) - -if [ -z "$TEMP" ]; -then - echo "$NOW - Error: Value variable empty" -else - echo "CPU_Temperature ${TEMP}" > $TEMPFILE - - for id in arm core h264 isp v3d uart pwm emmc pixel vec hdmi dpi; do - echo "Freq_$id $($VCGEN measure_clock $id | awk '{split($0,a,"="); print a[2]}')" >> $TEMPFILE - done - - for id in core sdram_c sdram_i sdram_p; do - echo "Volt_$id $($VCGEN measure_volts $id | awk '{split($0,a,"="); print a[2]}' | sed 's/V$//')" >> $TEMPFILE - done - - for id in arm gpu; do - echo "Mem_$id $($VCGEN get_mem $id | awk '{split($0,a,"="); print a[2]}' | sed 's/M$//')" >> $TEMPFILE - done - - mv $TEMPFILE $TEXTFILE -fi +cat /dev/null > $TEMPFILE + +for sensor in `ls /sys/class/thermal/`; +do + TEMP=$(awk '{printf "%.2f", $1/1000}' /sys/class/thermal/$sensor/temp) + CHIP=$(cat /sys/class/thermal/$sensor/type) + + if [ -z "$TEMP" ]; + then + echo "ERROR: Temperature variable empty for $sensor" >&2 + else + echo "rpi_temperature{chip=\"$CHIP\",sensor=\"$sensor\"} ${TEMP}" >> $TEMPFILE + fi +done + +for id in arm core h264 isp v3d uart pwm emmc pixel vec hdmi dpi; do + echo "rpi_freq{device=\"$id\"} $($VCGEN measure_clock $id | awk '{split($0,a,"="); print a[2]}')" >> $TEMPFILE +done + +for id in core sdram_c sdram_i sdram_p; do + echo "rpi_volt{device=\"$id\"} $($VCGEN measure_volts $id | awk '{split($0,a,"="); print a[2]}' | sed 's/V$//')" >> $TEMPFILE +done + +for id in arm gpu; do + echo "rpi_mem{device=\"$id\"} $($VCGEN get_mem $id | awk '{split($0,a,"="); print a[2]}' | sed 's/M$//')" >> $TEMPFILE +done +mv $TEMPFILE $TEXTFILE From 5f8a0450d91845465a0018e78d8c65d245e0295e Mon Sep 17 00:00:00 2001 From: Lajos Koszti Date: Tue, 19 Sep 2017 08:13:10 +0200 Subject: [PATCH 2/7] Use cut command instead of awk --- raspberry_exporter | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/raspberry_exporter b/raspberry_exporter index 6c7b4f4..7d078a0 100755 --- a/raspberry_exporter +++ b/raspberry_exporter @@ -24,14 +24,14 @@ do done for id in arm core h264 isp v3d uart pwm emmc pixel vec hdmi dpi; do - echo "rpi_freq{device=\"$id\"} $($VCGEN measure_clock $id | awk '{split($0,a,"="); print a[2]}')" >> $TEMPFILE + echo "rpi_freq{device=\"$id\"} $($VCGEN measure_clock $id | cut -d '=' -f 2)" >> $TEMPFILE done for id in core sdram_c sdram_i sdram_p; do - echo "rpi_volt{device=\"$id\"} $($VCGEN measure_volts $id | awk '{split($0,a,"="); print a[2]}' | sed 's/V$//')" >> $TEMPFILE + echo "rpi_volt{device=\"$id\"} $($VCGEN measure_volts $id | cut -d '=' -f 2 | sed 's/V$//')" >> $TEMPFILE done for id in arm gpu; do - echo "rpi_mem{device=\"$id\"} $($VCGEN get_mem $id | awk '{split($0,a,"="); print a[2]}' | sed 's/M$//')" >> $TEMPFILE + echo "rpi_mem{device=\"$id\"} $($VCGEN get_mem $id | cut -d '=' -f 2 | sed 's/M$//')" >> $TEMPFILE done mv $TEMPFILE $TEXTFILE From f5e5e96b7e0756bed2ca9e495c6cd64165d38dd6 Mon Sep 17 00:00:00 2001 From: Lajos Koszti Date: Tue, 19 Sep 2017 08:15:41 +0200 Subject: [PATCH 3/7] Use 3 decimal for temperature --- raspberry_exporter | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/raspberry_exporter b/raspberry_exporter index 7d078a0..0b3f129 100755 --- a/raspberry_exporter +++ b/raspberry_exporter @@ -12,7 +12,7 @@ cat /dev/null > $TEMPFILE for sensor in `ls /sys/class/thermal/`; do - TEMP=$(awk '{printf "%.2f", $1/1000}' /sys/class/thermal/$sensor/temp) + TEMP=$(awk '{printf "%.3f", $1/1000}' /sys/class/thermal/$sensor/temp) CHIP=$(cat /sys/class/thermal/$sensor/type) if [ -z "$TEMP" ]; From a6a93824ee702d687d8b591f9a764cb9e859697c Mon Sep 17 00:00:00 2001 From: Lajos Koszti Date: Tue, 19 Sep 2017 09:43:59 +0200 Subject: [PATCH 4/7] Update readme --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index c3a829b..d3d3ab7 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,8 @@ Make sure your node exporter uses `textfile` in `--collectors.enabled` and add t ## Example queries ``` -CPU_Temperature{job="node"} -Freq_arm{job="node"} -Volt_core{job="node"} +rpi_temperature{job="node"} +rpi_freq{job="node",device="arm"} +rpi_volt{job="node",device="core"} +rpi_mem{job="node",device="arm"} ``` From d50be8cc2775354db888c146d7a2a77f58eb235e Mon Sep 17 00:00:00 2001 From: Lajos Koszti Date: Mon, 10 Jun 2019 10:39:39 +0200 Subject: [PATCH 5/7] Make output prom file path configurable --- raspberry_exporter | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/raspberry_exporter b/raspberry_exporter index 0b3f129..0a272fc 100755 --- a/raspberry_exporter +++ b/raspberry_exporter @@ -2,11 +2,11 @@ set -eu -VCGEN=/opt/vc/bin/vcgencmd -TEXTFILE=/var/lib/node_exporter/textfile_collector/raspberry-metrics.prom +VCGEN=${VCGEN_PATH:-/opt/vc/bin/vcgencmd} +TEXTFILE=${PROM_FILE_PATH:-var/lib/node_exporter/textfile_collector/raspberry-metrics.prom} TEMPFILE=$TEXTFILE.$$ -mkdir -p /var/lib/node_exporter/textfile_collector/ +mkdir -p $(dirname $TEXTFILE) cat /dev/null > $TEMPFILE From 985d81be11eed7b29b4525e60338ebbe9373a50d Mon Sep 17 00:00:00 2001 From: Lajos Koszti Date: Mon, 10 Jun 2019 10:46:29 +0200 Subject: [PATCH 6/7] Changes for debian prometheus package --- prometheus-raspberry-exporter.service | 2 ++ 1 file changed, 2 insertions(+) diff --git a/prometheus-raspberry-exporter.service b/prometheus-raspberry-exporter.service index 128ae81..22bb9db 100644 --- a/prometheus-raspberry-exporter.service +++ b/prometheus-raspberry-exporter.service @@ -3,4 +3,6 @@ Description=Collect Raspberry Pi metrics for Prometheus [Service] Type=oneshot +User=prometheus +Environment=PROM_FILE_PATH=/var/lib/prometheus/node-exporter/raspberry_exporter.prom ExecStart=/usr/local/bin/raspberry_exporter From 080d8369291d25a47007b0c1052f7ccffa6952a2 Mon Sep 17 00:00:00 2001 From: Lajos Koszti Date: Mon, 10 Jun 2019 10:55:32 +0200 Subject: [PATCH 7/7] Change how set user permission for prom file --- prometheus-raspberry-exporter.service | 1 - raspberry_exporter | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/prometheus-raspberry-exporter.service b/prometheus-raspberry-exporter.service index 22bb9db..968a3bf 100644 --- a/prometheus-raspberry-exporter.service +++ b/prometheus-raspberry-exporter.service @@ -3,6 +3,5 @@ Description=Collect Raspberry Pi metrics for Prometheus [Service] Type=oneshot -User=prometheus Environment=PROM_FILE_PATH=/var/lib/prometheus/node-exporter/raspberry_exporter.prom ExecStart=/usr/local/bin/raspberry_exporter diff --git a/raspberry_exporter b/raspberry_exporter index 0a272fc..bbd1dcb 100755 --- a/raspberry_exporter +++ b/raspberry_exporter @@ -34,4 +34,5 @@ done for id in arm gpu; do echo "rpi_mem{device=\"$id\"} $($VCGEN get_mem $id | cut -d '=' -f 2 | sed 's/M$//')" >> $TEMPFILE done +chown prometheus:prometheus $TEMPFILE mv $TEMPFILE $TEXTFILE