Search Exchange

Search All Sites

Nagios Live Webinars

Let our experts show you how Nagios can help your organization.

Contact Us

Phone: 1-888-NAGIOS-1
Email: sales@nagios.com

Login

Remember Me

check_smartmon

Rating
7 votes
Favoured:
1

Help Support Ethan Galstad's New Project:

Help Support Ethan

A Message From The Founder...

As the founder of Nagios, I'm asking for your help in a cause that's dear to my heart.

I'm launching a new project to help better the world by providing the information, ideas, and inspiration that I believe can improve the lives of people everywhere.

I know you're busy managing networks, but I would appreciate it if you would consider liking my Facebook page and showing your support for the content and messages I produce by sharing them with your friends and family.

You can learn more about my project by visiting ethangalstad.me/nagios. Thank you for your time. I wish you all the best in your endeavors, whatever they may be.

- Ethan

Check disk status with smartmontools.
Use smartmontools (http://smartmontools.sourceforge.net/) to check disk health status and temperature.
Reviews (5)
I needed to run this as an unprivileged user, so I added a c wrapper that can use setuid root.

I also applied the patch below, fixed a few minor bugs and attempted to improve readability.

The result can be found here: https://github.com/nihlaeth/Nagios_check_smartmon
As disks with defective sectors are still reported as a healthy disk by Smart, i added checking the Smart IDs 5,196,197,198. An critical error will be reported if any > 0. I have not much clue about python but the patch is working:
http://pastebin.com/yB0w0Px9
bykohly, March 30, 2011
if temperature > criticalThreshold:
return (2, "CRITICAL: device temperature (%d) exceeds critical temperature threshold (%s)|temperature= %d;%s;%s;" % (temperature, criticalThreshold, temperature, warningThreshold, criticalThreshold))
elif temperature > warningThreshold:
return (1, "WARNING: device temperature (%d) exceeds warning temperature threshold (%s)|temperature= %d;%s;%s;" % (temperature, warningThreshold, temperature, warningThreshold, criticalThreshold))
else:
return (0, "OK: device is functional and stable (temperature: %d)|temperature= %d;%s;%s;" % (temperature, temperature, warningThreshold, criticalThreshold))
byatrox, March 15, 2011
1 of 1 people found this review helpful
To get rid of the deprecation warnings:

--- check_smartmon.py.orig 2011-03-15 15:28:50.000000000 +0200
+++ check_smartmon.py 2011-03-15 15:40:48.000000000 +0200
@@ -28,6 +28,7 @@

import os.path
import sys
+import warnings

from optparse import OptionParser

@@ -111,6 +112,8 @@
# get health status
cmd = "%s -H %s" % (path, device)
vprint(3, "Get device health status: %s" % cmd)
+ # filter out deprecation warnings
+ warnings.filterwarnings('ignore', category=DeprecationWarning, message=r'os\.popen3')
(child_stdin, child_stdout, child_stderr) = os.popen3(cmd)
line = child_stderr.readline()
if len(line):
bybobbydale, December 8, 2010
1 of 2 people found this review helpful
Running Ubuntu 10.10 64-bit and I receive the following Python errors:

/usr/local/nagios/libexec/check_smartmon:114: DeprecationWarning: os.popen3 is deprecated. Use the subprocess module.
(child_stdin, child_stdout, child_stderr) = os.popen3(cmd)
/usr/local/nagios/libexec/check_smartmon:127: DeprecationWarning: os.popen3 is deprecated. Use the subprocess module.
(child_stdin, child_stdout, child_stderr) = os.popen3(cmd)
OK: device is functional and stable (temperature: 40)

Probably needs to check for what version of Python is being used at top of script and apply commands accordingly later in script.