check_couchdb_replication

Last update: March 11, 2019

This is a plugin to monitor the status of CouchDB replications. Use the -d parameter to list all available replications and monitor them with -r parameter.

Download

Download check_couchdb_replication.sh

check_couchdb_replication.sh

544 downloads so far...

Download plugin and save it in your Nagios/Monitoring plugin folder (usually /usr/lib/nagios/plugins, depends on your distribution). Afterwards adjust the permissions (usually chmod 755).

Community contributions welcome on GitHub repo.

Version history / Changelog

20180105: Created plugin
20180108: Added -d detection
20180326: Input sanitation (either -d or -r are required)
20180326: Avoid confusion about wrong credentials (issue 4)
20180326: Add possibility to check all replications at once (-r ALL)
20180326: Handle authentication error "You are not a server admin"

Requirements

  • curl (SUSE: zypper in curl, Debian/Ubuntu: apt-get install curl, CentOS/RHEL: yum install curl)
  • jshon command (SUSE: search for jshon, Debian/Ubuntu: apt-get install jshon
  • Bash internal commands/functions (plugin checks for its existance)

Definition of the parameters

Parameter Description
-H* Hostname or ip address of CouchDB Host (or Cluster IP)
-P Port (defaults to 5984)
-S Use secure http (https)
-u Username if authentication is required
-p Password if authentication is required
-r+ Replication ID to monitor (doc_id) or "ALL" to check all replications
-d+ Dynamically detect and list all available replications
-h Help!

* mandatory parameter

+ Either -d for detection or -r is mandatory to check replication status (doc_id)

Usage / running the plugin on the command line

Usage:

./check_couchdb_replication.sh -H hostname [-P port] [-S] [-u user] [-p password] (-d|-r doc_id)

Example: Check the status of replication "rep_db1":

# ./check_couchdb_replication.sh -H mycouchdb.example.com -u admin -p mysecretpass -r rep_db1
COUCHDB REPLICATION OK - Replication rep_db1 is "running"

If there is no such replication with this doc_id (rep_db1), the plugin will return:

# ./check_couchdb_replication.sh -H mycouchdb.example.com -u admin -p mysecretpass -r rep_db3
COUCHDB REPLICATION CRITICAL - Replication for rep_db3 not found

If you're not sure or you forgot the name (doc_id) of a replication, run the plugin with the -d (detect) parameter:

# ./check_couchdb_replication.sh -H mycouchdb.example.com -d
COUCHDB AVAILABLE REPLICATIONS: "rep_db1" "rep_db2"

In the background, the plugin uses "/_active_tasks" the find the available replications.

Since version 20180326 it is also possible to check all replications (discovered with -d) at once using "-r ALL":

# ./check_couchdb_replication.sh -H mycouchdb.example.com -u admin -p mysecretpass -r ALL
COUCHDB REPLICATION CRITICAL - 2 replications not running ("doc_id":"claudioreptest" "state":"crashing" "info":"unauthorized: unauthorized to access or create database http://admin:*****@localhost:5984/db99/","doc_id":"claudioreptest333 " "error_count":1 "info":"Replication `c7d010d31ab268968f22f4d71c5766bf+continuous+create_target` specified by document `claudioreptest333` already started,)

Command definition

Command definition in Nagios, Icinga 1.x, Shinken, Naemon

# 'check_couchdb_replication' command definition
define command{
command_name check_couchdb_replication
command_line $USER1$/check_couchdb_replication.sh -H $ARG1$ -u $ARG2$ -p $ARG3$ -r $ARG4$
}

Command definition in Icinga 2.x

object CheckCommand "check_couchdb_replication" {
  import "plugin-check-command"
  command = [ PluginContribDir + "/check_couchdb_replication.sh" ]

   arguments = {
      "-H" = {
        value = "$couchdb_address$"
        description = "Hostname or IP Address of CouchDB host or cluster"
      }

      "-P" = {
        value = "$couchdb_port$"
        description = "Port number (default: 5984)"
      }

      "-S" = {
        set_if = "$couchdb_ssl$"
        description = "Use https"
      }

      "-u" = {
        value = "$couchdb_user$"
        description = "Username if authentication is required"
      }

      "-p" = {
        value = "$couchdb_password$"
        description = "Password if authentication is required"
      }

      "-d" = {
        set_if = "$couchdb_detect_replications$"
        description = "Detect and list available replications to monitor (should not be used in Icinga2, only on command line)"
      }

      "-r" = {
        value = "$couchdb_replication$"
        description = "Replication ID to monitor (doc_id)"
      }
  }

  vars.couchdb_address = "$address$"
  vars.couchdb_port = "5984"
}

Service definition

Service definition in Nagios, Icinga 1.x, Shinken, Naemon

In this example, the plugin checks for the current status of all replications found on the given CouchDB host. If the status is not "running", the script will exit with a CRITICAL status and returns the current status and some additional information about the failed replications.

# Check CouchDB Replications
define service{
  use generic-service
  host_name mycouchdb
  service_description CouchDB Replications
  check_command check_couchdb_replication!mycouchdb!admin!password!ALL
}

Service object definition Icinga 2.x

In this example, the plugin checks for the current status of the replication with the "doc_id" of "rep_db1". If the status is not "running", the script will exit with a CRITICAL status and returns the current status of the replication.

# Check CouchDB Replication db1
object Service "CouchDB Replication DB1" {
  import "generic-service"
  host_name = "mycouchdb"
  check_command = "check_chouchdb_replication"
  vars.couchdb_user = "admin"
  vars.couchdb_password = "password"
  vars.couchdb_replication = "rep_db1"
}

The next example shows how the plugin checks for the current status of all replications found on the given CouchDB host. If the status is not "running", the script will exit with a CRITICAL status and returns the current status and some additional information about the failed replications.

# Check CouchDB Replication ALL
object Service "CouchDB Replications" {
  import "generic-service"
  host_name = "mycouchdb"
  check_command = "check_chouchdb_replication"
  vars.couchdb_user = "admin"
  vars.couchdb_password = "password"
  vars.couchdb_replication = "ALL"
}

Screenshots

check_couchdb_replication ok