31 Commits
v0.6 ... v0.94

Author SHA1 Message Date
52670df1be Removed /etc from whereis-path 2014-09-20 10:47:26 +02:00
fcb2be369d Merge pull request #3 from Elyrith/master
A lot of changes
2014-09-20 10:10:36 +02:00
Ryan Loudfoot
aa68be9a5a Add more acceptable paths to whereis command, as per further testing. 2014-09-06 17:46:11 -04:00
Ryan Loudfoot
615089a044 Now use whereis to find the sensors program instead of assuming a path. Also mention help in the readme if the program is not found. 2014-09-06 16:36:21 -04:00
Ryan Loudfoot
75b4a1c6d6 Run through shellcheck.net. Converted all printf to echo since it's easier, may convert back later if given good reason. 2013-11-02 13:18:46 -04:00
Ryan Loudfoot
32252b61ea Add utils.sh checking code. 2013-11-02 12:38:43 -04:00
Ryan Loudfoot
b2e2301067 Forgot to update version number last update. Fixed. 2013-11-02 12:30:25 -04:00
dc34595ff0 Merge pull request #2 from Elyrith/0.9
Fixed some typos, including one that created a bug
2013-10-06 00:51:56 -07:00
Elyrith
b8f3e6a283 Merge branches 'master' and '0.9' 2013-10-05 23:39:52 -04:00
Elyrith
6b1c3b0d95 Fix typo: If lm-sensors is not installed, it would exit with OK instead of UNKNOWN. 2013-10-05 23:39:34 -04:00
Elyrith
664cac6965 Typo and changed 'sensors' to 'lm-sensors' in message if it's not installed. 2013-10-05 23:37:59 -04:00
Elyrith
bf12a45ab9 README and THANKS updates. 2013-10-05 23:33:19 -04:00
a8382bf6c5 Added instructions for OpenSUSE 2013-06-08 14:23:39 +02:00
85be1e7ccd Merge pull request #1 from Elyrith/master
Added some instructions to install lm-sensors
2013-06-06 20:40:09 -07:00
Elyrith
c19869c89f Update repo link. 2013-06-04 17:30:16 -04:00
Elyrith
39313dffac Add help instructions and where to find them. 2013-06-04 17:27:50 -04:00
f2acaea98b Changed version to 0.8 and moved version history to HISTORY file 2012-12-08 07:19:28 +01:00
41d103ab22 Limit parsing to only grab the first line of output for performance data 2012-12-08 06:58:35 +01:00
c594f1768f Merged in elyrith/check_temp (pull request #5) 2012-12-08 00:15:33 +01:00
Elyrith
877d08b166 Merge remote-tracking branch 'jackbenny/check_temp/master' 2012-12-07 17:59:54 -05:00
Elyrith
0fe7e5aa90 Limit parsing to only grab the first result found for the sensor. Sometimes you get more than one result for things like CPU cores (Quad core printing as: Core0,Core0,Core1,Core1 on a Toshiba laptop with sensor k8temp-pci-00c3) 2012-12-07 17:38:10 -05:00
e9c10b3f54 Fixed tabs/spaces in THANKS file and added URL to the BitBucket project 2012-12-06 05:05:10 +01:00
Elyrith
6df8362ab0 Put the old sensor parsing back, but commented. It may help somebody. 2012-12-01 21:02:36 -05:00
95a7d33142 Merged in elyrith/check_temp (pull request #3) 2012-12-01 03:09:30 +01:00
Elyrith
92a9b70125 Fixed line numbers mentioned in comments due to my comments pushing the code down 2012-11-30 00:29:22 -05:00
Elyrith
7e33e13abc Increased version to 0.7 because of new "advanced" sensor parsing (line 191)
-Added following line edits info to comments at the top and increased version number
-Line 193, modified sensor parsing to cut after the first '+' since all positive temperatures are preceded by a + and the one we want is labeled first
-Line 211, reduced "verbosity" needed to see verbose info (was 2: -v -v)
-Line 229-232, now checks if no sensor data was found and exits with STATE_UNKNOWN
-Fixed 2 typos, one in output and other an in-line comment
-Updated line numbers in previous version info lines in comments since my comments pushed the lines down
2012-11-30 00:08:45 -05:00
3223933494 Merged in elyrith/check_temp (pull request #2) 2012-11-30 00:55:10 +01:00
Elyrith
add8a481c7 Added myself to THANKS with permission from author. 2012-11-29 18:51:03 -05:00
37b8e9db82 Merged in elyrith/check_temp (pull request #1)
A few typos and mentioning that is uses *nix 'sensors'
Added PERFDATA to put Nagios Performance Data when viewing service details
2012-11-30 00:35:45 +01:00
Elyrith
e4228c22e5 A few typos and mentioning that is uses *nix 'sensors' 2012-11-29 17:56:54 -05:00
Elyrith
3c8ab0cdc2 Added PERFDATA to put Nagios Performance Data when viewing service details. 2012-11-29 17:18:40 -05:00
4 changed files with 114 additions and 45 deletions

25
HISTORY Normal file
View File

@@ -0,0 +1,25 @@
Version 0.2:
Line 103, fixed the missing "-n" option (Thanks to Chad who pointed this out
this out for me). Also added a "shopt -s extglob". (Thx to Chad)
Version 0.5:
Line 168, fixed a typo (EXIT_UNKNOWN to STATE_UNKNOWN)
Version 0.7:
Line 193, modified sensor parsing to cut after the first '+' since all
positive temperatures are preceded by a '+'
Line 211, reduced "verbosity" needed to see verbose info (was 2: -v -v)
Line 229-232, now checks to see if no sensor data was found and
exits with STATE_UNKNOWN
Version 0.8:
Line 196 and 230, added 'head -n1' to only fetch the first result from
sensors output. On some machine you get two Core0 and two Core1 temps.
Moved version history to it's own file, HISTORY
Version 0.94:
Lots of changes and bugfixes. A huge thank you to Ryan Loudfoot who
has fixed bugs and worked out a new way to detect the sensors-program.
In 0.94 I removed /etc from the whereis path as it didn't work for me
on my setup. It found the config-file for lm-sensors and tried to run
it.

33
README
View File

@@ -1,15 +1,38 @@
check_temp check_temp
A small Nagios plugin that checks the CPU (or M/B) temperature with lm-sensors. A small Nagios plugin that checks the CPU (or M/B) temperature with lm-sensors.
It's written in Bash and uses some sed & awk. It's written in Bash and uses *nix "sensors" and some sed & awk.
Default is to check the CPU temperature but this can be changed to for example Default is to check the CPU temperature but this can be changed to, for example,
the motherboard temperature with a "--sensor" argument. the motherboard temperature with a "--sensor" argument.
The plugin complies with the guidelines, for example uses -w -c -v arguments The plugin complies with the guidelines, for example uses -w -c -v arguments
etc. It also does some basic sanity checks and has a exit 3 catchall. etc. It also does some basic sanity checks and has a exit 3 catch-all.
The plugin were submitted to Nagios Exchange in 2011. The plugin was submitted to Nagios Exchange in 2011.
Known forks of check_temp: Known forks of check_temp:
There is a very good Perl fork of check_temp written by Chad Columbus. It's There is a very good Perl fork of check_temp written by Chad Columbus. It's
avalible on Nagios Exchange at available on Nagios Exchange at
http://exchange.nagios.org/directory/Plugins/Operating-Systems/Linux/check_temp-2Epl/details http://exchange.nagios.org/directory/Plugins/Operating-Systems/Linux/check_temp-2Epl/details
Required:
1) Install lm-sensors:
a) On Debian/Ubuntu... apt-get install lm-sensors
b) On OpenSUSE etc... zypper in sensors
2) Run sensors-detect:
sudo sensors-detect
Let it check for any sensors that you feel are necessary, or all. You can just
press <ENTER> to have it use the default option for each check. There is a
warning in the manpages (man sensors-detect) that there are (some rare)
hardware sensors that may lock up or even be permanently damaged, so be aware
of that.
**********
MAKE SURE YOU TYPE "YES" TO THE LAST OPTION: "Do you want to add these lines automatically to /etc/modules? (yes/NO)"
**********
3) Restart module-init-tools service (On Debian/Ubuntu)
a) /etc/init.d/module-init-tools restart
or
b) service module-init-tools restart

4
THANKS
View File

@@ -1,9 +1,9 @@
check_temp THANKS file check_temp THANKS file
check_temp was originally written by Jack-Benny Persson. check_temp was originally written by Jack-Benny Persson.
Some kind people has been contributing by reporting problems, suggesting Some kind people have been contributing by reporting problems, suggesting
improvements or submitting code. improvements or submitting code.
Here is a list of these kind people. Here is a list of these kind people.
Chad Columbus ccolumbu@hotmail.com Chad Columbus ccolumbu@hotmail.com
Ryan Loudfoot elyrith@gmail.com

View File

@@ -24,22 +24,33 @@
# # # #
# Nagios plugin to monitor CPU and M/B temperature with sensors. # # Nagios plugin to monitor CPU and M/B temperature with sensors. #
# Written in Bash (and uses sed & awk). # # Written in Bash (and uses sed & awk). #
# Version 0.2: Line 98, fixed the missing "-n" option (Thanks to Chad who # # Latest version of check_temp can be found at the below URL: #
# pointed this out for me). Also added a "shopt -s extglob". (Thx to Chad) # # https://github.com/jackbenny/check_temp #
# Version 0.5: Line 162, fixed a typo (EXIT_UNKNOWN to STATE_UNKNOWN) # # #
# If you are having problems getting it to work, check the instructions in #
# the README first. It walks you though install lm-sensors and getting it to #
# display sensor data. #
# #
############################################################################### ###############################################################################
VERSION="Version 0.6" VERSION="Version 0.94"
AUTHOR="(c) 2011 Jack-Benny Persson (jack-benny@cyberinfo.se)" AUTHOR="(c) 2011 Jack-Benny Persson (jack-benny@cyberinfo.se)"
# Sensor program # Sensor program
SENSORPROG=/usr/bin/sensors SENSORPROG=$(whereis -b -B /{bin,sbin,usr} /{bin,sbin,usr}/* -f sensors | awk '{print $2}')
# Exit codes # Ryan's note: utils.sh is installed with nagios-plugins in with the plugins
# Check if utils.sh exists. This lets you use check_domain in a testing environment
# or outside of Nagios.
if [ -e "$PROGPATH/utils.sh" ]; then
. "$PROGPATH/utils.sh"
else
STATE_OK=0 STATE_OK=0
STATE_WARNING=1 STATE_WARNING=1
STATE_CRITICAL=2 STATE_CRITICAL=2
STATE_UNKNOWN=3 STATE_UNKNOWN=3
# STATE_DEPENDENT=4 (Commented because it's unused.)
fi
shopt -s extglob shopt -s extglob
@@ -48,15 +59,15 @@ shopt -s extglob
# Print version information # Print version information
print_version() print_version()
{ {
printf "\n\n$0 - $VERSION\n" echo "$0 - $VERSION"
} }
#Print help information #Print help information
print_help() print_help()
{ {
print_version print_version
printf "$AUTHOR\n" echo "$AUTHOR"
printf "Monitor temperatur with the use of sensors\n" echo "Monitor temperature with the use of sensors"
/bin/cat <<EOT /bin/cat <<EOT
Options: Options:
@@ -71,9 +82,9 @@ Options:
Set what to monitor, for example CPU or MB (or M/B). Check sensors for the Set what to monitor, for example CPU or MB (or M/B). Check sensors for the
correct word. Default is CPU. correct word. Default is CPU.
-w INTEGER -w INTEGER
Exit with WARNING status if above INTEGER degres Exit with WARNING status if above INTEGER degrees
-c INTEGER -c INTEGER
Exit with CRITICAL status if above INTEGER degres Exit with CRITICAL status if above INTEGER degrees
EOT EOT
} }
@@ -89,8 +100,8 @@ sensor=CPU
# See if we have sensors program installed and can execute it # See if we have sensors program installed and can execute it
if [[ ! -x "$SENSORPROG" ]]; then if [[ ! -x "$SENSORPROG" ]]; then
printf "\nIt appears you don't have sensors installed in $SENSORPROG\n" echo "It appears you don't have lm-sensors installed. You may find help in the readme for this script."
exit $STATE_UNKOWN exit $STATE_UNKNOWN
fi fi
# Parse command line options # Parse command line options
@@ -115,7 +126,7 @@ while [[ -n "$1" ]]; do
-w | --warning) -w | --warning)
if [[ -z "$2" ]]; then if [[ -z "$2" ]]; then
# Threshold not provided # Threshold not provided
printf "\nOption $1 requires an argument" echo "Option $1 requires an argument"
print_help print_help
exit $STATE_UNKNOWN exit $STATE_UNKNOWN
elif [[ "$2" = +([0-9]) ]]; then elif [[ "$2" = +([0-9]) ]]; then
@@ -123,7 +134,7 @@ while [[ -n "$1" ]]; do
thresh=$2 thresh=$2
else else
# Threshold is not an integer # Threshold is not an integer
printf "\nThreshold must be an integer" echo "Threshold must be an integer"
print_help print_help
exit $STATE_UNKNOWN exit $STATE_UNKNOWN
fi fi
@@ -134,7 +145,7 @@ while [[ -n "$1" ]]; do
-c | --critical) -c | --critical)
if [[ -z "$2" ]]; then if [[ -z "$2" ]]; then
# Threshold not provided # Threshold not provided
printf "\nOption '$1' requires an argument" echo "Option '$1' requires an argument"
print_help print_help
exit $STATE_UNKNOWN exit $STATE_UNKNOWN
elif [[ "$2" = +([0-9]) ]]; then elif [[ "$2" = +([0-9]) ]]; then
@@ -142,7 +153,7 @@ while [[ -n "$1" ]]; do
thresh=$2 thresh=$2
else else
# Threshold is not an integer # Threshold is not an integer
printf "\nThreshold must be an integer" echo "Threshold must be an integer"
print_help print_help
exit $STATE_UNKNOWN exit $STATE_UNKNOWN
fi fi
@@ -157,7 +168,7 @@ while [[ -n "$1" ]]; do
--sensor) --sensor)
if [[ -z "$2" ]]; then if [[ -z "$2" ]]; then
printf "\nOption $1 requires an argument" echo "Option $1 requires an argument"
print_help print_help
exit $STATE_UNKNOWN exit $STATE_UNKNOWN
fi fi
@@ -166,7 +177,7 @@ while [[ -n "$1" ]]; do
;; ;;
*) *)
printf "\nInvalid option '$1'" echo "Invalid option '$1'"
print_help print_help
exit $STATE_UNKNOWN exit $STATE_UNKNOWN
;; ;;
@@ -177,32 +188,34 @@ done
# Check if a sensor were specified # Check if a sensor were specified
if [[ -z "$sensor" ]]; then if [[ -z "$sensor" ]]; then
# No sensor to monitor were specified # No sensor to monitor were specified
printf "\nNo sensor specified" echo "No sensor specified"
print_help print_help
exit $STATE_UNKNOWN exit $STATE_UNKNOWN
fi fi
#Get the temperature #Get the temperature
TEMP=`${SENSORPROG} | grep "$sensor Temp" | awk '{print $3}' | cut -c2-3` TEMP=`${SENSORPROG} | grep "$sensor" | cut -d+ -f2 | cut -c1-2 | head -n1`
#Old way - Get the temperature
#TEMP=`${SENSORPROG} | grep "$sensor" | awk '{print $3}' | cut -c2-3 | head -n1`
# Check if the tresholds has been set correctly # Check if the thresholds have been set correctly
if [[ -z "$thresh_warn" || -z "$thresh_crit" ]]; then if [[ -z "$thresh_warn" || -z "$thresh_crit" ]]; then
# One or both thresholds were not specified # One or both thresholds were not specified
printf "\nThreshold not set" echo "Threshold not set"
print_help print_help
exit $STATE_UNKNOWN exit $STATE_UNKNOWN
elif [[ "$thresh_crit" -lt "$thresh_warn" ]]; then elif [[ "$thresh_crit" -lt "$thresh_warn" ]]; then
# The warning threshold must be lower than the critical threshold # The warning threshold must be lower than the critical threshold
printf "\nWarning temperature should be lower than critical" echo "Warning temperature should be lower than critical"
print_help print_help
exit $STATE_UNKNOWN exit $STATE_UNKNOWN
fi fi
# Verbose output # Verbose output
if [[ "$verbosity" -ge 2 ]]; then if [[ "$verbosity" -ge 1 ]]; then
/bin/cat <<__EOT /bin/cat <<__EOT
Debugging information: Debugging information:
Warning threshold: $thresh_warn Warning threshold: $thresh_warn
@@ -210,26 +223,34 @@ Debugging information:
Verbosity level: $verbosity Verbosity level: $verbosity
Current $sensor temperature: $TEMP Current $sensor temperature: $TEMP
__EOT __EOT
printf "\n Temperature lines directly from sensors:\n" echo "Temperature lines directly from sensors:"
${SENSORPROG} | grep "Temp" ${SENSORPROG}
printf "\n\n"
fi fi
# Get performance data for Nagios "Performance Data" field
PERFDATA=`${SENSORPROG} | grep "$sensor" | head -n1`
# And finally check the temperature against our thresholds # And finally check the temperature against our thresholds
if [[ "$TEMP" -gt "$thresh_crit" ]]; then if [[ "$TEMP" != +([0-9]) ]]; then
# Temperature not found for that sensor
echo "No data found for that sensor ($sensor) | $PERFDATA"
exit $STATE_UNKNOWN
elif [[ "$TEMP" -gt "$thresh_crit" ]]; then
# Temperature is above critical threshold # Temperature is above critical threshold
echo "$sensor CRITICAL - Temperature is $TEMP" echo "$sensor CRITICAL - Temperature is $TEMP | $PERFDATA"
exit $STATE_CRITICAL exit $STATE_CRITICAL
elif [[ "$TEMP" -gt "$thresh_warn" ]]; then elif [[ "$TEMP" -gt "$thresh_warn" ]]; then
# Temperature is above warning threshold # Temperature is above warning threshold
echo "$sensor WARNING - Temperature is $TEMP" echo "$sensor WARNING - Temperature is $TEMP | $PERFDATA"
exit $STATE_WARNING exit $STATE_WARNING
else else
# Temperature is ok # Temperature is ok
echo "$sensor OK - Temperature is $TEMP" echo "$sensor OK - Temperature is $TEMP | $PERFDATA"
exit $STATE_OK exit $STATE_OK
fi fi
exit 3
exit $STATE_UNKNOWN