Skip to content
This repository has been archived by the owner on Jun 13, 2020. It is now read-only.

Commit

Permalink
Added the 'check_cpu' formatter.
Browse files Browse the repository at this point in the history
- Includes two example environment files as well.
- Updated the documentation 'check_memory' to reflect the updated output of te 'check_mem' plugin (no pipes).
  • Loading branch information
Ryan Frantz committed May 17, 2014
1 parent 91d6161 commit 5c95576
Show file tree
Hide file tree
Showing 4 changed files with 474 additions and 7 deletions.
69 changes: 69 additions & 0 deletions lib/nagios-herald/formatters/check_cpu.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
module NagiosHerald
class Formatter
class CheckCpu < NagiosHerald::Formatter
include NagiosHerald::Logging

# Public: Overrides Formatter::Base#additional_info.
# Colorizes the service output to highlight either the iowait or idle value.
#
# WARNING CPU iowait is > 0%: user=3.60% system=0.99% iowait=0.00% idle=95.41%
# CRITICAL CPU idle is < 100%: user=3.02% system=3.25% iowait=0.01% idle=93.72%
#
# Returns nothing. Updates the formatter content hash.
def additional_info
section = __method__
output = get_nagios_var("NAGIOS_#{@state_type}OUTPUT")
#if match = /(?<state>\w+ CPU) (?<metric>\w+) (?<threshold_and_stats>.*) (?<iowait>iowait=.*%) (?<idle>idle=.*%)/.match(output)
if match = /(?<state>\w+ CPU) (?<metric>iowait) (?<threshold_and_stats>.*) (?<iowait>iowait=.*%) (?<idle>idle=.*%)/.match(output)
iowait_info = "#{match[:state]} <b><font color='red'>#{match[:metric]}</font></b> "
iowait_info += "#{match[:threshold_and_stats]} <b><font color='red'>#{match[:iowait]}</font></b> "
iowait_info += "#{match[:idle]}"
add_html(section, iowait_info)
elsif match = /(?<state>\w+ CPU) (?<metric>idle) (?<threshold_and_stats>.*) (?<iowait>iowait=.*%) (?<idle>idle=.*%)/.match(output)
iowait_info = "#{match[:state]} <b><font color='red'>#{match[:metric]}</font></b> "
iowait_info += "#{match[:threshold_and_stats]} #{match[:iowait]} "
iowait_info += "<b><font color='red'>#{match[:idle]}</font></b>"
add_html(section, iowait_info)
else
add_html(section, output)
end
add_text(section, output) # nothing fancy to see for text
end

# Public: Overrides Formatter::Base#additional_details.
# Colorizes the `ps` output returned by the check_cpu_stats NRPE check.
# The output contains the top n processes by CPU similar to:
#
# TOP 5 PROCESSES BY CPU:
# %CPU TIME USER PID COMMAND
# 6.0 00:00:00 larry 32256 ps -eo %cpu,cputime,user,pid,args --sort -%cpu
# 0.7 06:22:09 nobody 12161 /usr/sbin/gmond
# 0.6 1-02:14:24 root 1424 [kipmi0]
# 0.5 00:49:52 10231 15079 mosh-server new -s -c 8 -l LANG=en_US.UTF-8
# 0.3 04:36:53 root 12996 /opt/extrahop/sbin/rpcapd -v -d -L -f /opt/extrahop/etc/rpcapd.ini
#
# Returns nothing. Updates the formatter content hash.
def additional_details
section = __method__
long_output = get_nagios_var("NAGIOS_LONG#{@state_type}OUTPUT")
lines = long_output.split('\n')
html = []
html << "<pre>"
html << lines[0] # TOP 5 PROCESSES BY CPU:
html << lines[1] # %CPU TIME USER PID COMMAND
html << "<font color='red'>#{lines[2]}</font>" # Color the first result red...
for i in 3..lines.length-1
html << "<font color='orange'>#{lines[i]}</font>" # ...and the remainder orange.
end
html << "</pre>"
output_string = html.join( "<br>" )
add_html(section, "<b>Additional Details</b>:")
add_html(section, output_string)
add_text(section, "Additional Details:\n#")
add_text(section, "#{unescape_text(long_output)}\n")
line_break(section)
end

end
end
end
14 changes: 7 additions & 7 deletions lib/nagios-herald/formatters/check_memory.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@ class CheckMemory < NagiosHerald::Formatter
# The output contains the top n processes by memory utilization similar to:
#
# TOP 5 PROCESSES BY MEMORY USAGE:
# %MEM| RSS| USER| PID|COMMAND
# 2.4| 1231696| larry| 6658|tmux
# 1.5| 777204| moe| 32234|tmux/tmux -CC
# 0.8| 399964| curly| 12161|/usr/sbin/gmond
# 0.7| 384772| shep| 1945|/usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/lib/mysql/mysql.example.com.err --pid-file=/var/lib/mysql/mysql.example.com.pid
# 0.7| 355148| root| 1245|SCREEN
# %MEM RSS USER PID COMMAND
# 2.4 1231696 larry 6658 tmux
# 1.5 777204 moe 32234 tmux/tmux -CC
# 0.8 399964 curly 12161 /usr/sbin/gmond
# 0.7 384772 shep 1945 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/lib/mysql/mysql.example.com.err --pid-file=/var/lib/mysql/mysql.example.com.pid
# 0.7 355148 root 1245 SCREEN
#
# Returns nothing. Updates the formatter content hash.
def additional_details
Expand All @@ -23,7 +23,7 @@ def additional_details
html = []
html << "<pre>"
html << lines[0] # TOP 5 PROCESSES BY MEMORY USAGE:
html << lines[1] # %MEM| RSS| USER| PID|COMMAND
html << lines[1] # %MEM RSS USER PID COMMAND
html << "<font color='red'>#{lines[2]}</font>" # Color the first result red...
for i in 3..lines.length-1
html << "<font color='orange'>#{lines[i]}</font>" # ...and the remainder orange.
Expand Down
199 changes: 199 additions & 0 deletions test/env_files/check_cpu_idle.CRITICAL
Original file line number Diff line number Diff line change
@@ -0,0 +1,199 @@
Sat May 17 01:34:07 UTC 2014
NAGIOS_SERVICESTATE=CRITICAL
NAGIOS_HOSTNOTIFICATIONNUMBER=0
NAGIOS_HOSTNOTIFICATIONID=24950
NAGIOS_ARG8=
NAGIOS_SERVICEACKAUTHOR=
NAGIOS_COMMANDFILE=/usr/nagios/var/rw/nagios.cmd
NAGIOS_ARG9=
NAGIOS_HOSTADDRESS=10.101.192.22
NAGIOS_LASTHOSTDOWN=1362755838
NAGIOS_LASTSERVICEWARNING=1400290175
NAGIOS_TEMPPATH=/tmp/nagios
NAGIOS_TOTALHOSTSERVICESCRITICAL=2
NAGIOS_HOSTACKAUTHOR=
NAGIOS_TEMPFILE=/usr/nagios/var/nagios.tmp
NAGIOS_NOTIFICATIONAUTHOR=
NAGIOS_ISVALIDTIME=
TERM=linux
NAGIOS_SERVICEGROUPALIAS=
NAGIOS_ARG28=
NAGIOS_HOSTEXECUTIONTIME=0.813
NAGIOS_SERVICEACKCOMMENT=
NAGIOS_NOTIFICATIONISESCALATED=0
NAGIOS_ARG29=
NAGIOS_LOGFILE=/usr/nagios/var/nagios.log
NAGIOS_TOTALHOSTSUNREACHABLEUNHANDLED=
NAGIOS_SERVICEACKAUTHORNAME=
NAGIOS_NEXTVALIDTIME=
NAGIOS_ARG26=
NAGIOS_TIMET=1400290447
NAGIOS_HOSTGROUPNAMES=test
NAGIOS_MAXSERVICEATTEMPTS=3
NAGIOS_ARG1=
NAGIOS_ARG27=
NAGIOS_HOSTSTATEID=0
NAGIOS_LASTSERVICECRITICAL=1400290433
NAGIOS_ARG2=
NAGIOS_ARG24=
NAGIOS_EVENTSTARTTIME=1400290157
NAGIOS_ARG3=
NAGIOS_ARG25=
NAGIOS_HOSTACKCOMMENT=
NAGIOS_SERVICENOTES=
NAGIOS_SERVICEGROUPNOTESURL=
NAGIOS_HOSTGROUPMEMBERS=web.example.com
NAGIOS_NOTIFICATIONCOMMENT=
NAGIOS_ARG4=
NAGIOS_ARG22=
NAGIOS_TOTALHOSTPROBLEMSUNHANDLED=
NAGIOS_HOSTEVENTID=40243
NAGIOS_ARG5=
NAGIOS_ARG23=
NAGIOS_TOTALHOSTSERVICESOK=15
NAGIOS_ARG6=
NAGIOS_ARG20=
NAGIOS_TIME=01:34:07
NAGIOS_HOSTACTIONURL=
NAGIOS_CONTACTGROUPALIAS=Non-urgent ops contacts
NAGIOS_ARG7=
NAGIOS_ARG21=
NAGIOS_SERVICEPERFDATA=user = 3.02, system = 3.25, iowait = 0.01, idle = 93.72
NAGIOS_LASTSERVICESTATE=WARNING
NAGIOS_CONTACTNAME=ops
NAGIOS_HOSTPERCENTCHANGE=0.00
NAGIOS_HOSTGROUPALIAS=No_parents
NAGIOS_RESOURCEFILE=/usr/nagios/etc/resource.cfg
NAGIOS_CONTACTGROUPMEMBERS=ops
NAGIOS_ARG19=
NAGIOS_SERVICECHECKTYPE=ACTIVE
NAGIOS_ARG18=
NAGIOS_SERVICEATTEMPT=3
NAGIOS_TOTALHOSTSDOWNUNHANDLED=
NAGIOS_HOSTDOWNTIME=0
NAGIOS_HOSTCHECKCOMMAND=check-host-alive
NAGIOS_TOTALHOSTSERVICESUNKNOWN=0
NAGIOS_SERVICEGROUPNAME=
NAGIOS_SERVICEGROUPACTIONURL=
NAGIOS_LASTSERVICESTATECHANGE=1400290433
NAGIOS_RETENTIONDATAFILE=/usr/nagios/var/retention.dat
NAGIOS_TOTALSERVICEPROBLEMSUNHANDLED=
NAGIOS_LASTSERVICEEVENTID=174145
NAGIOS_TOTALHOSTSERVICES=17
NAGIOS_CONTACTGROUPNAME=ops_nonurgent
NAGIOS_ARG13=
NAGIOS_CONTACTPAGER=
NAGIOS_NOTIFICATIONTYPE=PROBLEM
NAGIOS_LASTSERVICEPROBLEMID=84376
NAGIOS_ARG12=
NAGIOS_LASTHOSTCHECK=1400290388
NAGIOS_ADMINPAGER=ops@example.com
NAGIOS_SERVICECHECKCOMMAND=check_nrpe!check_cpu_stats
NAGIOS_TOTALSERVICESWARNING=
NAGIOS_LASTHOSTSTATEID=0
NAGIOS_ARG11=
NAGIOS_HOSTPERFDATA=rta=0.249000ms;3000.000000;5000.000000;0.000000 pl=0%;80;100;0
NAGIOS_LASTSERVICEOK=1400289813
NAGIOS_TOTALHOSTSDOWN=
NAGIOS_SERVICENOTIFICATIONNUMBER=2
NAGIOS_CONTACTGROUPNAMES=ops_nonurgent
NAGIOS_ARG10=
NAGIOS_SERVICEPERCENTCHANGE=12.24
NAGIOS_TOTALHOSTPROBLEMS=
NAGIOS_TOTALSERVICESOK=
NAGIOS_TOTALHOSTSERVICESWARNING=0
NAGIOS_ARG17=
PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin
NAGIOS_HOSTOUTPUT=PING OK - Packet loss = 0%, RTA = 0.25 ms
NAGIOS_NOTIFICATIONRECIPIENTS=ops,akachler,jallspaw,ldenness,irccat,jgoulah,dschauenberg,kmurphy,dyurkiewicz,pbellisano
NAGIOS_ARG16=
NAGIOS_MAXHOSTATTEMPTS=1
NAGIOS_ARG15=
NAGIOS_TOTALHOSTSUNREACHABLE=
NAGIOS_TOTALSERVICESWARNINGUNHANDLED=
NAGIOS_ARG14=
NAGIOS_STATUSDATAFILE=/usr/nagios/var/status.dat
NAGIOS_TOTALSERVICESUNKNOWN=
NAGIOS_LASTHOSTPROBLEMID=18776
NAGIOS_ARG31=
NAGIOS_SHORTDATETIME=05-17-2014 01:34:07
NAGIOS_HOSTSTATE=UP
NAGIOS_LASTHOSTUP=1400290392
NAGIOS_SERVICEGROUPNOTES=
NAGIOS_ARG30=
PWD=/
NAGIOS_SERVICEPERFDATAFILE=
NAGIOS_ARG32=
NAGIOS_CONTACTALIAS=Ryan Frantz
NAGIOS_HOSTNOTESURL=
NAGIOS_SERVICELATENCY=0.663
NAGIOS_TOTALSERVICESCRITICAL=
NAGIOS_SERVICEDOWNTIME=0
NAGIOS_SERVICEGROUPNAMES=
NAGIOS_DATE=05-17-2014
NAGIOS_SERVICEEVENTID=174146
NAGIOS_HOSTACKAUTHORALIAS=
NAGIOS_NOTIFICATIONAUTHORALIAS=
NAGIOS_SERVICEDURATION=0d 0h 0m 14s
NAGIOS_HOSTSTATETYPE=HARD
NAGIOS_SERVICEPROBLEMID=84814
NAGIOS_HOSTCHECKTYPE=ACTIVE
NAGIOS_HOSTGROUPNOTES=
NAGIOS_LASTSERVICECHECK=1400290433
NAGIOS_ADMINEMAIL=ops@example.com
NAGIOS_OBJECTCACHEFILE=/usr/nagios/var/objects.cache
NAGIOS_HOSTLATENCY=1.181
NAGIOS_HOSTGROUPACTIONURL=
NAGIOS_LONGDATETIME=Sat May 17 01:34:07 UTC 2014
NAGIOS_HOSTDISPLAYNAME=web.example.com
SHLVL=2
NAGIOS_SERVICESTATEID=2
NAGIOS_SERVICENOTESURL=
NAGIOS_TOTALSERVICEPROBLEMS=
NAGIOS_HOSTPROBLEMID=0
NAGIOS_CONTACTADDRESS0=
UPSTART_INSTANCE=
NAGIOS_HOSTDURATIONSEC=37534543
NAGIOS_TOTALSERVICESUNKNOWNUNHANDLED=
NAGIOS_LASTHOSTSTATE=UP
NAGIOS_CONTACTADDRESS1=
NAGIOS_SERVICEEXECUTIONTIME=5.094
NAGIOS_TOTALSERVICESCRITICALUNHANDLED=
NAGIOS_CONTACTADDRESS2=
NAGIOS_LONGHOSTOUTPUT=
NAGIOS_SERVICEGROUPMEMBERS=
NAGIOS_CONTACTADDRESS3=
NAGIOS_SERVICEDURATIONSEC=14
NAGIOS_CONTACTADDRESS4=
NAGIOS_HOSTGROUPNOTESURL=
NAGIOS_CONTACTADDRESS5=
NAGIOS_SERVICEOUTPUT=CRITICAL CPU idle is < 100%: user=3.02% system=3.25% iowait=0.01% idle=93.72%
NAGIOS_NOTIFICATIONNUMBER=2
NAGIOS_HOSTDURATION=434d 10h 15m 43s
NAGIOS_MAINCONFIGFILE=/usr/nagios/etc/nagios.cfg
NAGIOS_CONTACTEMAIL=ops@example.com
NAGIOS_SERVICESTATETYPE=HARD
NAGIOS_LASTHOSTUNREACHABLE=0
NAGIOS_LONGSERVICEOUTPUT=TOP 5 PROCESSES BY CPU:\n %CPU TIME USER PID COMMAND\n 57.6 00:00:15 root 21751 /usr/bin/ruby /usr/bin/knife search node lastrun_status:success -i\n 4.0 00:00:00 larry 22001 ps -eo %cpu,cputime,user,pid,args --sort -%cpu\n 0.7 06:19:12 nobody 12161 /usr/sbin/gmond\n 0.6 1-02:11:15 root 1424 [kipmi0]\n 0.5 00:48:01 10231 15079 mosh-server new -s -c 8 -l LANG=en_US.UTF-8\n
UPSTART_JOB=nagios
NAGIOS_HOSTATTEMPT=1
NAGIOS_HOSTNOTES=
NAGIOS_SERVICEISVOLATILE=0
NAGIOS_SERVICEACTIONURL=
NAGIOS_SERVICEDISPLAYNAME=CPU
NAGIOS_TOTALHOSTSUP=
NAGIOS_LASTHOSTSTATECHANGE=1362755904
NAGIOS_LASTSERVICEUNKNOWN=0
NAGIOS_HOSTPERFDATAFILE=
NAGIOS_LASTHOSTEVENTID=40242
NAGIOS_HOSTACKAUTHORNAME=
NAGIOS_NOTIFICATIONAUTHORNAME=
NAGIOS_HOSTALIAS=web.example.com
NAGIOS_SERVICEDESC=CPU
NAGIOS_HOSTGROUPNAME=no_parents
NAGIOS_PROCESSSTARTTIME=1400290156
NAGIOS_HOSTNAME=web.example.com
NAGIOS_SERVICENOTIFICATIONID=126728
NAGIOS_SERVICEACKAUTHORALIAS=
NAGIOS_LASTSERVICESTATEID=1
_=/usr/bin/env
Loading

0 comments on commit 5c95576

Please sign in to comment.