Coder Social home page Coder Social logo

nrdp's Introduction

Overview

NRDP (Nagios Remote Data Processor) is a simple, PHP-based passive result collector for use with Nagios. It is designed to be a flexible data transport mechanism and processor, with a simple and powerful architecture that allows for it to be easily extended and customized to fit individual users' needs.

By default, NRDP has the capability of allowing remote agents, applications, and Nagios instances to submit commands and host and service check results to a Nagios server. This allows Nagios administrators to use NRDP to configure distributed monitoring, passive checks, and remote control of their Nagios instance in a quick and efficient manner. The capabilities for NRDP can be extended through the development of additional NRDP plugins.

Installation

The KB article "Installing NRDP From Source" has more detailed instuctions that apply to many operating systems: https://support.nagios.com/kb/article.php?id=602

Download the latest tarball and extract to start the install::

cd /tmp
wget https://github.com/NagiosEnterprises/nrdp/archive/1.5.2.tar.gz
tar xvf 1.5.2.tar.ggz
cd nrdp-*

Create a directory and move the NRDP files into place. You don't need to install most of the files outside of server, so we omit them from the cp command::

mkdir /usr/local/nrdp
cp -r clients server LICENSE* CHANGES* /usr/local/nrdp
chown -R nagios:nagios /usr/local/nrdp

Edit the NRDP server config file and add your token to the $cfg['authorized_tokens'] variable. See example in configuration if you don't know how to create one::

vi /usr/local/nrdp/server/config.inc.php

Configure Apache depending on the current Apache version and operating system. If you're using a newer version of Apache you may need to change this file slightly. This has been tested to work with CentOS 6::

cp nrdp.conf /etc/httpd/conf.d
service httpd restart

And on Ubuntu 16.0.4::

cp nrdp.conf /etc/apache2/sites-enabled/nrdp.conf
sed -i '/Order allow,deny/c\ #' /etc/apache2/sites-enabled/nrdp.conf
sed -i '/Allow from all/c\Require all granted' /etc/apache2/sites-enabled/nrdp.conf
/etc/init.d/apache2 restart

The NRDP server has now been installed.

Testing the Installation

You can now try out the NRDP server API example by accessing::

http://<ip address>/nrdp

Usage

There are several ways to use NRDP:

  • Use the client scripts to submit check results
  • Submit check results (XML or JSON) via http post request
  • Submit a Nagios Core EXTERNAL COMMAND via http post request

Client Scripts

The client scripts that are distributed with NRDP in the clients folder are clearly documented. They are basically a wrapper script for submitting a http post request. More detailed usage examples can be found in the "send_nrdp Client" KB article: https://support.nagios.com/kb/article.php?id=599

Here is a service example with a WARNING state::

./send_nrdp.sh -u http://nagios_server/nrdp/ -t XXXXX -H somehost -s "Disk Usage" -S 1 -o "WARNING: The disk is 75% full"

Which will produce output like::

Sent 1 checks to http://nagios_server/nrdp/

Submit check results (XML or JSON) using a http post

You don't need to use the client script to submit check results, they can be submitted using a http post request using a client like curl. Both XML and JSON formats are is supported. The request data is sent using the following http post request arguments:

  • cmd=submitcheck
  • XMLDATA=XXXXX OR JSONDATA=XXXXX

XML Format

The syntax for submitting a check result as XML is as follows.

Host::

<?xml version='1.0'?>
<checkresults>
    <checkresult type='host'>
        <hostname>somehost</hostname>
        <state>0</state>
        <output>Everything looks okay! | perfdata=1;</output>
    </checkresult>
</checkresults>

Service::

<?xml version='1.0'?>
<checkresults>
    <checkresult type='service'>
        <hostname>somehost</hostname>
        <servicename>Disk Usage</servicename>
        <state>1</state>
        <output>WARNING: The disk is 75% full | disk_usage=75%;</output>
    </checkresult>
</checkresults>

Multipe check results can be posted using additional <checkresult type='host/service'>XXXXX</checkresult>.

The XML data is sent as the http post request argument XMLDATA.

Here are those two examples above submitted using a curl command.

Host::

curl -f -d "token=XXXXX&cmd=submitcheck&XMLDATA=<?xml version='1.0'?><checkresults><checkresult type='host' checktype='1'><hostname>somehost</hostname><state>0</state><output>Everything looks okay! | perfdata=1;</output></checkresult></checkresults>" http://nagios_server/nrdp/

Service::

curl -f -d "token=XXXXX&cmd=submitcheck&XMLDATA=<?xml version='1.0'?><checkresults><checkresult type='service' checktype='1'><hostname>somehost</hostname> <servicename>Disk Usage</servicename><state>1</state><output>WARNING: The disk is 75% full | disk_usage=75%;</output></checkresult></checkresults>" http://nagios_server/nrdp/

JSON Format

The syntax for submitting a check result as JSON is as follows.

Host::

{
    "checkresults": [
        {
            "checkresult": {
                "type": "host",
                "checktype": "1"
            },
            "hostname": "somehost",
            "state": "0",
            "output": "Everything looks okay! | perfdata=1;"
        }
    ]
}

Service::

{
    "checkresults": [
        {
            "checkresult": {
                "type": "service",
                "checktype": "1"
            },
            "hostname": "somehost",
            "servicename": "Disk Usage",
            "state": "1",
            "output": "WARNING: The disk is 75% full | disk_usage=75%;"
        }
    ]
}

Multipe check results can be posted using additional , { "checkresult": { XXXX } }.

The JSON data is sent as the http post request argument JSONDATA.

Here are those two examples above submitted using a curl command.

Host::

curl -f -d 'token=XXXXX&cmd=submitcheck&JSONDATA={ "checkresults": [ { "checkresult": { "type": "host", "checktype": "1" }, "hostname": "somehost", "state": "0", "output": "Everything looks okay! | perfdata=1;" } ] }' http://nagios_server/nrdp/

Service::

curl -f -d 'token=XXXXX&cmd=submitcheck&JSONDATA={ "checkresults": [ { "checkresult": { "type": "service", "checktype": "1" }, "hostname": "somehost", "servicename": "Disk Usage", "state": "1", "output": "WARNING: The disk is 75% full | disk_usage=75%;" } ] }' http://nagios_server/nrdp/

Submit a Nagios Core EXTERNAL COMMAND

NDRP can also submit any of the defined External Commands to Nagios Core.

The request data is sent using the following http post request arguments:

  • cmd=submitcmd
  • command=XXXXX ** The data in the command is identical to how it is document, for example SCHEDULE_FORCED_SVC_CHECK;somehost;someservice;1110741500

Here is an example using a curl command::

curl -f -d 'token=XXXXX&cmd=submitcmd&command=SCHEDULE_FORCED_SVC_CHECK;somehost;someservice;1110741500' http://nagios_server/nrdp/

Permissions

Tokens are used to authorise requests submitted to NRDP. By default, all authorized tokens are allowed to submit any external command (unless it's disabled).

  • Defined in config.inc.php
  • This is a deny mapping in the form of COMMAND => TOKEN or TOKENS
  • You can specify a whole command, or use * as a wildcard
  • Or you can specify 'all' to stop any token from using any external command
  • the tokens specified can either be a string with 1 token, or an array of 1 or more tokens

Examples::

$cfg['external_commands_deny_tokens'] = array(
    "ACKNOWLEDGE_HOST_PROBLEM" => array("mysecrettoken", "myothertoken"),
    "ACKNOWLEDGE_SVC_PROBLEM" => "mysecrettoken",
    "all" => array("mysecrettoken", "myothertoken"),
    "ACKNOWLEDGE_*" => "mysecrettoken",
    "*_HOST_*" => array("mysecrettoken", "myothertoken"),
);

nrdp's People

Contributors

jomann09 avatar hedenface avatar box293 avatar egalstad avatar caronc avatar jsoref avatar ericloyd avatar tmcnag avatar omadjoudj avatar djoq avatar jvandermeulen avatar tjyang avatar helmo avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.