A Nagios (and compatible) plugin to check the impending expiration of a domain name. It relies on RDAP exclusively (no whois) and works with every top-level domain with RDAP (which includes all the ICANN ones).
Go to file
Seb35 0b10e8d563 Allow a specific cache directory or no cache
If the env var XDG_CACHE_HOME is set, the cache directory is
"$XDG_CACHE_HOME/ianardap", else if HOME is set, it is
"$HOME/.ianardapcaches", else no cache is used but a loud
warning is displayed at the end of the result to encourage
users to set a cache directory.

Adapted pytest tests, no change needed on test_exe_matrix. They are
obviously slower with no cache. NB: two tests now fail independently
of this change.

Issue: #4
2022-12-18 19:09:49 +01:00
.gitignore Allow a specific cache directory or no cache 2022-12-18 19:09:49 +01:00
check_expire Allow a specific cache directory or no cache 2022-12-18 19:09:49 +01:00
ianardap.py Allow a specific cache directory or no cache 2022-12-18 19:09:49 +01:00
LICENSE Initial commit 2021-07-05 19:56:43 +02:00
README.md Allow a specific cache directory or no cache 2022-12-18 19:09:49 +01:00
test_ianardap.py Allow a specific cache directory or no cache 2022-12-18 19:09:49 +01:00
tests.yaml Small cleanups 2021-07-07 12:08:37 +02:00

check_expire

A Nagios (and compatible) plugin to check the impending expiration of a domain name. It relies on RDAP exclusively (no whois) and works with every top-level domain with RDAP (which includes all the ICANN ones).

Usage

check_expire follows the usual Nagios rules. The options are:

  • -H: domain name to monitor
  • -c: critical threshold in days
  • -w: warning threshold in days
  • -v: verbose details in output
  • -u: unixtime output
  • -t: timeout for RDAP requetss (in seconds)

Installation

You need Python 3 and Requests. You can install Requests, for instance, with pip pip3 install requests.

Then, copy the script check_expire and the file ianardap.pyto the directory of local plugins.

The use of a cache directory is not mandatory, but highly recommended. It can be either $XDG_CACHE_HOME/ianardap or $HOME/.ianardapcaches depending on the environment variables set.

Icinga configuration

If you use Icinga, here is a possible definition of the command:

object CheckCommand "expiration" {
  command = [ PluginContribDir + "/check_expire" ]

  arguments = {
      "-H" = "$address$",
      "-c" = "$expiration_critical$",
      "-w" = "$expiration_warning$",
      "-t" = "$expiration_timeout$",
      "-v" = { set_if = "$expiration_verbose$" }
  }

  env.XDG_CACHE_HOME = "/var/cache/nagios"
}

apply Service "expiration" {
  import "generic-service"

  check_command = "expiration"

  assign where host.address && host.vars.monitor_expiration
}

And a possible use:

object Host "bortzmeyer-org" {
  ...

  address = "bortzmeyer.org"

  vars.monitor_expiration = true
  vars.expiration_verbose = true

}

If needed, create the cache directory accordingly:

mkdir /var/cache/nagios
chown nagios: /var/cache/nagios

Zabbix configuration

For monitoring systems that do not rely on exit codes but on calculation mechanism based on the metric they receive you can use the -u option that will only return the expiration date in unixtime format.

For instance, you can use the following in zabbix 5.4:

  • item: check_expire["-H","{HOST.CONN}","-u"]
  • trigger (30 days before expiration): last(/check_expire["-H","{HOST.CONN}","-u"])-now()<2592000

Where 2592000 is the number of seconds in 30 days.

License

GPL. See LICENSE.

Authors

Stéphane Bortzmeyer stephane+chapril@bortzmeyer.org.

Reference site

https://forge.chapril.org/bortzmeyer/check_expire Use the Gitea issue tracker to report bugs or wishes.