Skip to content

Instantly share code, notes, and snippets.

@exzz
Last active June 18, 2017 14:53
Show Gist options
  • Save exzz/11033725 to your computer and use it in GitHub Desktop.
Save exzz/11033725 to your computer and use it in GitHub Desktop.
Dashing nagios reporting via thruk web front end

Description

Simple way to display nagios status via thruk web frontend

alt text

Dependencies

Add this to your Gemfile

gem 'rest-client'

And run

bundle install

Usage

Copy thruk.rb to your jobs/ folder

Edit root_url into thruk.rb to match both your credentials and thruk web path

Add the following code to your dashboard

<!-- Nagios -->
<div class="gridster">
  <ul>
   <li data-row="1" data-col="1" data-sizex="1" data-sizey="1">
     <div data-id="nagios_hosts_up" data-view="Number" data-title="Hosts Up" style="background-color:#96bf48;"></div>
     <i class="icon-heart icon-background"></i>
   </li>
   <li data-row="1" data-col="2" data-sizex="1" data-sizey="1">
     <div data-id="nagios_hosts_down" data-view="Number" data-title="Hosts Down" style="background-color:#ec663c;"></div>
     <i class="icon-heart icon-background"></i>
   </li>
   <li data-row="1" data-col="3" data-sizex="1" data-sizey="1">
     <div data-id="nagios_hosts_unreachable" data-view="Number" data-title="Hosts Unreachable" style="background-color:#ec663c;"></div>
     <i class="icon-heart icon-background"></i>
   </li>
   <li data-row="1" data-col="4" data-sizex="1" data-sizey="1">
     <div data-id="nagios_hosts_pending" data-view="Number" data-title="Hosts Pending" style="background-color:#ccc;"></div>
     <i class="icon-heart icon-background"></i>
   </li>
   
   <li data-row="2" data-col="1" data-sizex="1" data-sizey="1">
     <div data-id="nagios_services_ok" data-view="Number" data-title="Services OK" style="background-color:#96bf48;"></div>
     <i class="icon-heart icon-background"></i>
   </li>
   <li data-row="2" data-col="2" data-sizex="1" data-sizey="1">
     <div data-id="nagios_services_warning" data-view="Number" data-title="Services Warning" style="background-color:#ff9618;"></div>
     <i class="icon-heart icon-background"></i>
   </li>
   <li data-row="2" data-col="3" data-sizex="1" data-sizey="1">
     <div data-id="nagios_services_critical" data-view="Number" data-title="Services Critical" style="background-color:#ec663c;"></div>
     <i class="icon-heart icon-background"></i>
   </li>
   <li data-row="2" data-col="4" data-sizex="1" data-sizey="1">
     <div data-id="nagios_services_unknown" data-view="Number" data-title="Services Unknown" style="background-color:#ec663c;"></div>
     <i class="icon-heart icon-background"></i>
   </li>
   <li data-row="2" data-col="5" data-sizex="1" data-sizey="1">
     <div data-id="nagios_services_pending" data-view="Number" data-title="Services Pending" style="background-color:#ccc;"></div>
     <i class="icon-heart icon-background"></i>
   </li>
  </ul>
</div>
require "rest-client"
root_url = 'http://THRUK_LOGIN:THRUK_PASSWORD@THRUK_URL/thruk/cgi-bin/status.cgi?view_mode=json'
nagios_host_status = {
:up => 2,
:down => 4,
:unreachable => 8,
:pending => 1
}
nagios_service_status = {
:ok => 2,
:warning => 4,
:unknown => 8,
:critical => 16,
:pending => 1
}
SCHEDULER.every '60s', :first_in => 0 do
hosts= {}
services= {}
nagios_host_status.each do |state, code|
response = RestClient.get root_url + '&style=hostdetail&hoststatustypes=' + code.to_s + '&hostgroup=all'
json_data = JSON.parse(response.body, :symbolize_names => true)
send_event('nagios_hosts_' + state.to_s, { current: json_data.length } )
end
nagios_service_status.each do |state, code|
response = RestClient.get root_url + '&style=detail&servicestatustypes=' + code.to_s + '&hostgroup=all'
json_data = JSON.parse(response.body, :symbolize_names => true)
send_event('nagios_services_' + state.to_s, { current: json_data.length } )
end
end
@GustavoFabianVergara
Copy link

GustavoFabianVergara commented Jun 18, 2017

Hello, I am trying to raise this widget but I get an error I could support with this please as I am studying and I am doing practices as a linux server administrator thanks in advance support then describe the error

scheduler caught exception:

784: unexpected token at '

<title>Thruk Monitoring Webinterface</title> <script type="text/javascript" src="/thruk/javascript/all_in_one-2.14-2.js"></script> <script type="text/javascript"> </script>



Thruk Monitoring Webinterface
Username
Password
 


Version 2.14-2
May 05, 2017
Copyright © 2009-present Thruk Developer Team.
Copyright © 2009 Nagios Core Development Team and Community Contributors.
Copyright © 1999-2009 Ethan Galstad.
Thruk Monitoring Webinterface is licensed under the GNU General Public License and is provided AS IS with NO WARRANTY OF ANY
KIND, INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE.

Thruk Github.com Logo
<script type="text/javascript"> </script> ' /var/lib/gems/1.9.1/gems/json-1.8.6/lib/json/common.rb:155:in `parse' /var/lib/gems/1.9.1/gems/json-1.8.6/lib/json/common.rb:155:in `parse' /root/dashboard/jobs/thruk.rb:36:in `block (2 levels) in ' /root/dashboard/jobs/thruk.rb:26:in `each' /root/dashboard/jobs/thruk.rb:26:in `block in ' /var/lib/gems/1.9.1/gems/rufus-scheduler-2.0.24/lib/rufus/sc/jobs.rb:230:in `call' /var/lib/gems/1.9.1/gems/rufus-scheduler-2.0.24/lib/rufus/sc/jobs.rb:230:in `trigger_block' /var/lib/gems/1.9.1/gems/rufus-scheduler-2.0.24/lib/rufus/sc/jobs.rb:204:in `block in trigger' /var/lib/gems/1.9.1/gems/rufus-scheduler-2.0.24/lib/rufus/sc/scheduler.rb:430:in `call' /var/lib/gems/1.9.1/gems/rufus-scheduler-2.0.24/lib/rufus/sc/scheduler.rb:430:in `block in trigger_job'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment