From 71ab4c5434d6fd47ab6b4f5a940e561ca24c296f Mon Sep 17 00:00:00 2001 From: William <3502082+wtip@users.noreply.github.com> Date: Fri, 25 Oct 2019 09:52:17 -0400 Subject: [PATCH] added script for ipmitool chassis status metrics --- ipmitool_chassis.sh | 61 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 ipmitool_chassis.sh diff --git a/ipmitool_chassis.sh b/ipmitool_chassis.sh new file mode 100644 index 0000000..aa8ee58 --- /dev/null +++ b/ipmitool_chassis.sh @@ -0,0 +1,61 @@ +#!/usr/bin/awk -nf + +# +# Converts output of `ipmitool chassis status` to prometheus format. +# +# With GNU awk: +# ipmitool chassis status | ./ipmitool_chassis.sh > ipmitool_chassis.prom +# +# With BSD awk: +# ipmitool chassis status | awk -f ./ipmitool_chassis.sh > ipmitool_chassis.prom +# + +function export(values, name) { + if (values["metric_count"] < 1) { + return + } + delete values["metric_count"] + + printf("# HELP %s%s %s sensor reading from ipmitool\n", namespace, name, help[name]); + printf("# TYPE %s%s gauge\n", namespace, name); + for (sensor in values) { + printf("%s%s{sensor=\"%s\"} %f\n", namespace, name, sensor, values[sensor]); + } +} + +# Fields are colon separated, with space padding. +BEGIN { + FS = "[ ]*[:][ ]*"; + namespace = "node_ipmi_chassis_"; + + # Friendly description of the type of sensor for HELP. + help["fault"] = "Chassis Fault"; + + fault["metric_count"] = 0; +} + +# Not a valid line. +{ + if (NF < 2) { + next + } +} + +# $2 is value field. +$2 ~ /na/ { + next +} + +# $1 is type field. +$1 ~ /Fault/ { + if ($2 == "true") { + fault[$1] = 1 + } else { + fault[$1] = 0 + } + fault["metric_count"]++; +} + +END { + export(fault, "fault"); +}