Page 1 of 1
Maintenance mode on specific services
Posted: Tue Jun 04, 2019 1:35 pm
by bsivavani
Hi,
I am able to place the host/services in scheduled downtime using below command, this will place all related services on a host into scheduled downtime.
curl --silent --show-error --data cmd_typ=86 --data cmd_mod=2 --data host="XXXXX" --data com_data="Placing server in scheduled downtime from command line" --data trigger=0 --data start_time="06-04-2019 17:20:00" --data end_time="06-04-2019 17:30:00" --data fixed=1 --data hours=2 --data minutes=0 --data btnSubmit=Commit --insecure
https://localhost/nagios/cgi-bin/cmd.cgi -u username:passwd
Can you advice if it is possible to place only specific services (not all the services) on a host into scheduled downtime ?
Re: Maintenance mode on specific services
Posted: Tue Jun 04, 2019 4:22 pm
by lmiltchev
You could use the REST API in Nagios XI to schedule downtime. Unfortunately, you would need to use separate commands for each service as it is not possible at the moment to pass all services as an array. For example, you may use a bash script as the one below:
Code: Select all
#!/bin/bash
curl -XPOST "http://x.x.x.x/nagiosxi/api/v1/system/scheduleddowntime?apikey=xxx&pretty=1" -d "comment=Test downtime creation&start=1559681206&end=1559688406&services[localhost]=PING"
curl -XPOST "http://x.x.x.x/nagiosxi/api/v1/system/scheduleddowntime?apikey=xxx&pretty=1" -d "comment=Test downtime creation&start=1559681206&end=1559688406&services[localhost]=HTTP"
curl -XPOST "http://x.x.x.x/nagiosxi/api/v1/system/scheduleddowntime?apikey=xxx&pretty=1" -d "comment=Test downtime creation&start=1559681206&end=1559688406&services[localhost]=Total Processes"
make it executable:
and run it:
Code: Select all
[root@main-nagios-xi tmp]# ./schedule_downtime.sh
{
"success": "Schedule downtime command(s) sent successfully.",
"scheduled": {
"services": {
"localhost": [
"PING"
]
}
}
}
{
"success": "Schedule downtime command(s) sent successfully.",
"scheduled": {
"services": {
"localhost": [
"HTTP"
]
}
}
}
{
"success": "Schedule downtime command(s) sent successfully.",
"scheduled": {
"services": {
"localhost": [
"Total Processes"
]
}
}
}
This example shows scheduling downtime on three services on localhost - PING, HTTP, and Total Processes. You can review the REST API documentation under the Help menu from the web UI in Nagios XI.
Hope this helps.
Re: Maintenance mode on specific services
Posted: Tue Jun 11, 2019 12:13 pm
by bsivavani
We didn't see scheduled downtime under Help tab and getting below error
[root@XXXX ~]# curl -XPOST "
http://XXXX/nagiosxi/api/v1/system/sche ... X&pretty=1" -d "comment=Test downtime creation&start=1560275926&end=1560276100&services[localhost]=PING"
{
"error": "Unknown API endpoint."
}
[root@XXXX ~]#
Kindly advice ?
Re: Maintenance mode on specific services
Posted: Tue Jun 11, 2019 12:36 pm
by lmiltchev
I would recommend that you upgrade to the latest version of Nagios XI. There are numerous bug fixes, and new features added to the newer versions, including the REST API.
FYI, Nagios XI 5.6.3 just went out this morning. Here's our documentation on upgrading XI:
https://assets.nagios.com/downloads/nag ... ctions.pdf
Re: Maintenance mode on specific services
Posted: Tue Jun 11, 2019 1:18 pm
by bsivavani
We have a plan of setting up new environment in new domain with latest version in next 4 months.
As a interim solution in the current environment, we have to implement the requirement to place specific service into blackout.
Kindly advice if we can use functionality of below API ?
[root@XXXX ~]# curl -XPOST "
http://XXXX/nagiosxi/api/v1/system/sche ... X&pretty=1" -d "comment=Test downtime creation&start=1560275926&end=1560276100&services[localhost]=PING"
{
"error": "Unknown API endpoint."
}
[root@XXXX ~]#
Re: Maintenance mode on specific services
Posted: Tue Jun 11, 2019 2:49 pm
by lmiltchev
Unfortunately, scheduling downtime via the REST API won't be possible in Nagios XI 5.2.9 as it's not been added yet. You could however use external nagios commands to achieve your goal.
https://assets.nagios.com/downloads/nag ... and_id=119
For example, I added the following script to the /tmp directory on a Nagios XI 5.2.9 server:
Code: Select all
#!/bin/sh
# This is a sample shell script showing how you can submit the SCHEDULE_SVC_DOWNTIME command
# to Nagios. Adjust variables to fit your environment as necessary.
now=`date +%s`
commandfile='/usr/local/nagios/var/rw/nagios.cmd'
/usr/bin/printf "[%lu] SCHEDULE_SVC_DOWNTIME;localhost;PING;1560282312;1560289512;1;0;7200;nagiosadmin;Testing The SCHEDULE_SVC_DOWNTIME External Command\n" $now > $commandfile
I made it executable:
Code: Select all
[root@TEST_XI_CentOS_6 tmp]# chmod +x test.sh
and ran it:
Code: Select all
[root@TEST_XI_CentOS_6 tmp]# ./test.sh
[root@TEST_XI_CentOS_6 tmp]#
I went to the GUI to verify that a downtime has been scheduled for PING service on localhost.
example01.PNG
Re: Maintenance mode on specific services
Posted: Mon Jun 24, 2019 12:37 pm
by bsivavani
Hi,
We would need to run the below command from remote server to place specific service in maintenance mode.
/usr/bin/printf "[%lu] SCHEDULE_SVC_DOWNTIME;localhost;PING;1560282312;1560289512;1;0;7200;nagiosadmin;Testing The SCHEDULE_SVC_DOWNTIME External Command\n" $now > $commandfile
Kindly advice if we can achieve this ?
Re: Maintenance mode on specific services
Posted: Mon Jun 24, 2019 2:02 pm
by lmiltchev
If you wanted to run the command from a remote server, you could use "sshpass" in order to log in as nagios user, and run the command.
Example:
Code: Select all
sshpass -p mypassword ssh [email protected] '/usr/bin/printf "[%lu] SCHEDULE_SVC_DOWNTIME;localhost;PING;1561406400;1561413600;1;0;7200;nagiosadmin;Testing The SCHEDULE_SVC_DOWNTIME External Command\n" $now > /usr/local/nagios/var/rw/nagios.cmd'
example01.PNG