Nagios plugin to parse JSON from an HTTP response.
Ruby
Latest commit 5fe202e Sep 23, 2015 @phrawzty Merge pull request #29 from phrawzty/status_opt
fix #28; add --status_level option
Permalink
Failed to load latest commit information.
.gitignore Release 1.3.0 Mar 5, 2015
README.md update README with --status_level option Sep 23, 2015
check_http_json.rb fix #28; add --status_level option Jul 22, 2015

README.md

check_http_json

This is a plugin for Nagios that will parse JSON from an HTTP response. It is written in Ruby and is known to function in versions 1.8.7 and 1.9.3.

Usage

Usage: ./check_http_json.rb -u <URI> -e <element> -w <warn> -c <crit>
-h, --help                       Help info.
-v, --verbose                    Additional human output.
-u, --uri URI                    Target URI. Incompatible with -f.
    --user USERNAME              HTTP basic authentication username.
    --pass PASSWORD              HTTP basic authentication password.
    --headers HEADERS            Comma-separated list of HTTP headers to include (ex. HOST:somehost,AUTH:letmein).
-f, --file PATH                  Target file. Incompatible with -u.
-e, --element ELEMENT            Desired element (ex. foo=>bar=>ish is foo.bar.ish).
-E, --element_regex REGEX        Desired element expressed as regular expression.
-d, --delimiter CHARACTER        Element delimiter (default is period).
-w, --warn VALUE                 Warning threshold (integer).
-c, --crit VALUE                 Critical threshold (integer).
-r, --result STRING              Expected string result. No need for -w or -c.
-R, --result_regex REGEX         Expected string result expressed as regular expression. No need for -w or -c.
-W, --result_warn STRING         Warning if element is [string]. -C is required.
-C, --result_crit STRING         Critical if element is [string]. -W is required.
-U, --result_unknown STRING      Unknown if element is [string]. -C is required.
-p, --perf ELEMENT               Output additional fields (performance metrics); comma-separated.
-t, --timeout SECONDS            Wait before HTTP timeout.
    --status_level STRING        Comma-separated list of HTTP status codes and their associated Nagios alert levels (ex. 301:1,404:2).

The --warn and --crit arguments conform to the Nagios threshold format guidelines.

If a simple result of either string or regular expression (-r or -R) is specified:

  • A match is OK and anything else is CRIT.
  • The warn / crit thresholds will be ignored.

If the warn and crit results (-W and -C) are specified:

  • A match is WARN or CRIT and anything else is OK.
  • The warn / crit thresholds will be ignored.

Note that (-r or -R) and (-W and -C) are mutually exclusive.

Note also that the response must be pure JSON. Bad things happen if this isn't the case.

Implementation

How you choose to implement the plugin is, of course, up to you. Here are some suggestions:

given string element, check string result

define command {
    command_name    check_http_json-string
    command_line    /etc/nagios3/plugins/check_http_json.rb -u 'http://$HOSTNAME$:$ARG1$/$ARG2$' -e '$ARG3$' -r '$ARG4$'
}
define service {
    service_description     elasticsearch-cluster-status
    check_command           check_http_json-string!9200!_cluster/health!status!green
}

wildly generic

define command {
    command_name    check_http_json
    command_line    /etc/nagios3/plugins/check_http_json.rb -u 'http://$HOSTNAME$:$ARG1$/$ARG2$' $ARG3$
}
define service {
    service_description     elasticsearch-resident-memory
    check_command           check_http_json!9280!_cluster/nodes/_local/stats!-E resident_in_bytes -w 1024000000 -c 1536000000
}

How are you implementing it ?

I encourage you to add your implementation to the wiki - that way everybody can benefit !

Fin

The script is licensed using the Apache License, Version 2.0.

Finally, I invite you to peruse the list of contributors - thank you, all !

GitHub pull requests welcome.