55 lines
1.5 KiB
Python
55 lines
1.5 KiB
Python
#!/usr/bin/env python3
|
|
|
|
# https://pimylifeup.com/raspberry-pi-temperature/
|
|
|
|
import logging
|
|
import os
|
|
import time
|
|
import subprocess
|
|
import sys
|
|
|
|
from prometheus_client import start_http_server, Gauge, REGISTRY, GC_COLLECTOR, PLATFORM_COLLECTOR, PROCESS_COLLECTOR
|
|
|
|
REGISTRY.unregister(GC_COLLECTOR)
|
|
REGISTRY.unregister(PLATFORM_COLLECTOR)
|
|
REGISTRY.unregister(PROCESS_COLLECTOR)
|
|
|
|
logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
|
|
|
|
|
|
def setup_gauge():
|
|
logging.info('Setting up Gauge')
|
|
g = Gauge(f'sys_cpu_temp_celsius_degrees', 'CPU Temperature', ['node_name'])
|
|
logging.info(f'Created Gauge: {g}')
|
|
|
|
node_name_label = _get_node_name()
|
|
logging.info(f'Retrieved node_name label {node_name_label}')
|
|
# Why call `.set()` here? Because, without it, I get "gauge metric is missing label values"
|
|
g.labels(node_name=node_name_label).set(_get_temp())
|
|
|
|
logging.info('Setting function for Gauge')
|
|
g.set_function(_get_temp)
|
|
|
|
|
|
def _get_temp():
|
|
temp = float(subprocess.run(['/usr/bin/vcgencmd', 'measure_temp'], capture_output=True).stdout.decode('utf-8')
|
|
.replace('temp=', '').replace("'C\n", ''))
|
|
logging.info(f'Got temp: {temp}')
|
|
return temp
|
|
|
|
|
|
def _get_node_name():
|
|
# https://kubernetes.io/docs/tasks/inject-data-application/environment-variable-expose-pod-information/
|
|
try:
|
|
return os.environ['NODE_NAME']
|
|
except:
|
|
return 'unknown-node'
|
|
|
|
|
|
if __name__ == '__main__':
|
|
setup_gauge()
|
|
start_http_server(8555)
|
|
while True:
|
|
# Stay alive!
|
|
time.sleep(1)
|