A Nagios/Icinga plugin for monitoring JSON files with Jq filters
Project description
check_json
Check_json is a Nagios/Icinga2 plugin for monitoring JSON files with Jq filters.
Requires Python 3.6+
Installation
You can install with pip:
python3 -m pip install check-json
Or install from source:
git clone https://gitlab.com/cspeterson/check_json.git check_json.git
pip install check_json.git
Usage
Pass the plugin any number of Jq filters and a JSON file. The plugin will report OK so long as no filters evaluate to false
or null
.
Outputs Nagios standard perfdata for each filter reported with 1
for success and 0
for failure.
If a given filter is concluded by a comment string of the format # some-descriptive-string
, it will be used as the perfdata label for that filter.
For all of the things you can do in a filter, refer to the JQ Manual for for your version of libjq.
# A minimal example: report OK if a single filter evaluates to other
# than false/null.
check_json --filter '.select(somekey)' /path/to/jsonfile
# As above, but label that filter "myfilter" in the reporting
check_json --filter '.select(somekey) # myfilter' /path/to/jsonfile
# Multiple, separate filters
check_json --filter '.somekey != "somevalue"' --filter '.otherkey != "othervalue"' /path/to/jsonfile
# Source a filter from a jsonfile
check_json --filter-file /path/to/filterfile /path/to/jsonfile
Icinga2
Here is an Icinga2 CheckCommand
object for this plugin:
object CheckCommand "check_json" {
command = [ PluginDir + "/check_json", ]
arguments = { "--fail-status" = {
description = "Specify the status to report when a filter comes back false/null. Defaults to warning."
set_if = "$check_json_fail_status$"
value = "$check_json_fail_status$"
}
"--filter" = {
description = "A JQ filter to run on the given JSON file."
set_if = "$check_json_filter$"
value = "$check_json_filter$"
}
"--filter-file" = {
description = "A file containing a JQ filter to run on the given JSON file."
set_if = "$check_json_filter_file$"
value = "$check_json_filter_file$"
}
jsonfile = {
description = "The path to the file to inspect"
value = "$check_json_jsonfile$"
}
}
}
NOTE on the command path: the above Icinga2 configuration object points to the check_json
command in Icinga2's configured PluginDir
, but this can be configured however you like. For instance:
- point it to wherever it is installed by its full path
- symlink from the specified path to the actual script.
- or take the kludge route, leave it as-is, and copy
check_json/__main__.py
from this repo intoPluginDir + "/check_json"
Up to you!
Limitations
What this plugin is not for:
- Huge JSON files. This plugin processes and filters the entire JSON file given every time it runs.
- Keeping place in a log file over time. For that (though with admittedly simpler pattern matching), see check_logfiles.
Contributing
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
To run the test suite:
# Up to you to create virtual environments etc
# make dependencies
make
Please make sure to update tests as appropriate.
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for check_json-0.1.4-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 837d36799717115adc942aec5cef56f1bd6b80f25c5d471c9c6b8a589c53c6f7 |
|
MD5 | c6cf269b31ba56b3dafa5dad874547e7 |
|
BLAKE2b-256 | d6c4c250e7409bc377d0941f64f56268b928899031271db2c2f0584d0697f5ae |