Nagios: status.cgi Customisation Guide
Last updated 28 Jul 2021My most used page in Nagios is Services (Unhandled), essentially as a dashboard for any new issues. The problem is that it won't show anything for a host being down, so I've added an All Unhandled link to my side.php
with the following line of code:
<li><a href="<?php echo $cfg["cgi_base_url"];?>/status.cgi?host=all&type=detail&hoststatustypes=6&hostprops=10&serviceprops=42&servicestatustypes=60" target="<?php echo $link_target;?>">All Unhandled</a></li>
Which ends up giving you a URL looking like:
https://server.domain.com/nagios/cgi-bin/status.cgi?host=all&type=detail&hoststatustypes=6&hostprops=10&serviceprops=42&servicestatustypes=60
And the filters display as:
Display Filters: Host Status Types: Up | Down Host Properties: Not In Scheduled Downtime & Has Not Been Acknowledged Service Status Types: Unknown | Warning | Critical Service Properties: Not In Scheduled Downtime & Has Not Been Acknowledged & Active Checks Enabled
You can also use status.cgi
to build your own searchbars to add to your side.php
- I use the following code to give me searchbars for hosts, services and host groups (with inset prompts):
<div class="navbarsearch">
<form method="get" action="<?php echo $cfg["cgi_base_url"];?>/status.cgi" target="<?php echo $link_target;?>">
<fieldset>
<legend>Quick Search:</legend>
<input type='text' name='host' placeholder='Host (exact name)' size='18' class="NavBarSearchItem">
</fieldset>
</form>
<form method="get" action="<?php echo $cfg["cgi_base_url"];?>/status.cgi" target="<?php echo $link_target;?>">
<fieldset>
<input type='text' name='servicefilter' placeholder='Service (case-sensitive)' size='18' class="NavBarSearchItem">
</fieldset>
</form>
<form method="get" action="<?php echo $cfg["cgi_base_url"];?>/status.cgi" target="<?php echo $link_target;?>">
<fieldset>
<input type='text' name='hostgroup' placeholder='Host Group (short name)' size='18' class="NavBarSearchItem">
</fieldset>
</form>
</div>
This gives you something looking like this:
I think I came across that handy URL on Stack Overflow but I couldn't find any official Nagios documentation on the bitwise operators to understand how to craft or modify these URLs. Luckily, a Nagios MVP called jsmurphy on their support forums put together a blog post detailing them back in 2012. Unfortunately, their website roshamboot.org no longer exists but a snapshot of the page is available on archive.org here, and I wanted to post the contents of it here so it's available on a current website. I've left most of it intact but I think it was written for Nagios Core 3 so I checked the files in the source code (currently at version 4.4.6) and updated the hoststatustypes
with their newer names.
jsmurphy - 26 Jun 2012
Every now and then I see a question along the lines of "How do I customize the Nagios problems screen?", "How do I customize status.cgi?" or "What are the parameters or arguments for status.cgi". Well wonder no more! Hidden deep within the nagios source code and by deep I mean the "include" directory, is thecgiutils.h
andstatusdata.h
these two files have all the information you need.But lets make it a little simpler, if you were to copy the URL of the problems heading in Nagios and then paste it, it would look something like this: http://nagioswebsite/cgi-bin/status.cgi?host=all&servicestatustypes=28
Nagios uses bitwise operations to quickly calculate what to display, the
28
next toservicestatustypes
is the number used for selecting what service statuses to display on the Nagios problem page. So how do we arrive at that number of 28? Well lets have a look at the table:&servicestatustypes= #define SERVICE_PENDING 1 #define SERVICE_OK 2 #define SERVICE_WARNING 4 #define SERVICE_UNKNOWN 8 #define SERVICE_CRITICAL 16
If you add the numbers of the service states you want to see together you will arrive at the number required for that particular argument. So in the case of our example if we add
warning(4)
,Unknown(8)
andCritical(16)
together we get the number 28! That's all there is to it! Below are the tables for the other parameters you may wish to use to customize yourstatus.cgi
.&hoststatustypes= #define HOST_PENDING 1 #define SD_HOST_UP 2 #define SD_HOST_DOWN 4 #define SD_HOST_UNREACHABLE 8
&hostprops= #define HOST_SCHEDULED_DOWNTIME 1 #define HOST_NO_SCHEDULED_DOWNTIME 2 #define HOST_STATE_ACKNOWLEDGED 4 #define HOST_STATE_UNACKNOWLEDGED 8 #define HOST_CHECKS_DISABLED 16 #define HOST_CHECKS_ENABLED 32 #define HOST_EVENT_HANDLER_DISABLED 64 #define HOST_EVENT_HANDLER_ENABLED 128 #define HOST_FLAP_DETECTION_DISABLED 256 #define HOST_FLAP_DETECTION_ENABLED 512 #define HOST_IS_FLAPPING 1024 #define HOST_IS_NOT_FLAPPING 2048 #define HOST_NOTIFICATIONS_DISABLED 4096 #define HOST_NOTIFICATIONS_ENABLED 8192 #define HOST_PASSIVE_CHECKS_DISABLED 16384 #define HOST_PASSIVE_CHECKS_ENABLED 32768 #define HOST_PASSIVE_CHECK 65536 #define HOST_ACTIVE_CHECK 131072 #define HOST_HARD_STATE 262144 #define HOST_SOFT_STATE 524288
&serviceprops= #define SERVICE_SCHEDULED_DOWNTIME 1 #define SERVICE_NO_SCHEDULED_DOWNTIME 2 #define SERVICE_STATE_ACKNOWLEDGED 4 #define SERVICE_STATE_UNACKNOWLEDGED 8 #define SERVICE_CHECKS_DISABLED 16 #define SERVICE_CHECKS_ENABLED 32 #define SERVICE_EVENT_HANDLER_DISABLED 64 #define SERVICE_EVENT_HANDLER_ENABLED 128 #define SERVICE_FLAP_DETECTION_ENABLED 256 #define SERVICE_FLAP_DETECTION_DISABLED 512 #define SERVICE_IS_FLAPPING 1024 #define SERVICE_IS_NOT_FLAPPING 2048 #define SERVICE_NOTIFICATIONS_DISABLED 4096 #define SERVICE_NOTIFICATIONS_ENABLED 8192 #define SERVICE_PASSIVE_CHECKS_DISABLED 16384 #define SERVICE_PASSIVE_CHECKS_ENABLED 32768 #define SERVICE_PASSIVE_CHECK 65536 #define SERVICE_ACTIVE_CHECK 131072 #define SERVICE_HARD_STATE 262144 #define SERVICE_SOFT_STATE 524288
The sort functions only allow one option to be selected at a time so there's no bitwise operations going on here. Just type the numbers as you see them i.e.
&sortoption=1
(to sort by hostname)&sortoption= #define SORT_NOTHING 0 #define SORT_HOSTNAME 1 #define SORT_SERVICENAME 2 #define SORT_SERVICESTATUS 3 #define SORT_LASTCHECKTIME 4 #define SORT_CURRENTATTEMPT 5 #define SORT_STATEDURATION 6 #define SORT_NEXTCHECKTIME 7 #define SORT_HOSTSTATUS 8 #define SORT_HOSTURGENCY 9
&sorttypes= #define SORT_NONE 0 #define SORT_ASCENDING 1 #define SORT_DESCENDING 2
You can also use
&service=
,&servicegroup=
,&host=
and&hostgroup=
these fields all accept the phrase "all" (which will select everything) or a string string that matches a specific Nagios object; url encoded of course so you need to use%20
for spaces in service names. There is also an&servicefilter=
option that matches based on case sensitive regex.Note: As far as I know there is no way to do an "OR" so you can't do "I want it to display only the server if it's down OR the critical services if it is not"
Return to roddie.digital / top