Nagios plugin to check PostgreSql Streaming Replication
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Benjamin Renard d33476ce8d Update comment and README.md file 2 years ago
.gitignore Initial commit 10 years ago
README.md Update comment and README.md file 2 years ago
check_pg_streaming_replication Update comment and README.md file 2 years ago

README.md

Nagios plugin to check Postgres Streaming replication

This script could be used as Nagios check plugin to verify Postgres Streaming replication state.

This script :

  • check if Postgres is running (CRITICAL raise if not)
  • check if Postgres is in recovery mode :
    • if Postgres is in recovery mode :
      • retreive from Postgres the last xlog file receive and the xlog file replay
      • check if Postgres recovery configuration file is NOT present (CRITICAL raise if present)
      • retreive master connection informations from Postgres recovery configuration file (UNKNOWN raise on error). Default Postgres master TCP port will be used if port is not specify.
      • retreive the current state and sync state of the host from Postgres master server by making a connection on master server (UNKNOWN raise on error).
      • check if the current state of the host is "streaming" (CRITICAL raise if not)
      • check if the current sync state of the host is "sync" (CRITICAL raise if not)
      • if the check of the current XLOG file of the master host is enabled :
        • retreive current xlog file from Postgres master server by making a connection on master server (UNKNOWN raise on error).
        • check if the current master xlog file is the last received xlog file (CRITICAL raise if not)
      • check if the last received xlog file is the last replay xlog file : if not, check the current delay with the last replayed transaction against replay_warn_delay and replay_crit_delay thresholds and raise corresponding error if they are exceeded
      • Return OK state
    • if Postgres is not in recovery mode :
      • check if Postgres recovery configuration file is present (CRITICAL raise if present)
      • check if stand-by client(s) is connected (WARNING raise if not)
      • Return OK state with list and count of stand-by client(s)

Note : This script was originally write for PostgreSQL 9.1 and test on 9.1, 9.5 and 9.6 but it could be compatible with other versions of PostgreSQL. Some adjustments have been made for PostgreSQL >= 10 (without testing it). Do not hesitate to tell me how this script work with other versions and share some fix. All contributions are welcome !

Requirements

  • Some CLI tools: sudo, awk, sed, bc, psql and pg_lscluster

  • On master node: Slaves must be able to connect with user from recovery.conf (or user specify using -U) to database with the same name (or another specified with -D) as trust (or via md5 using password specified in ~/.pgpass). This user must have SUPERUSER privilege (need to get replication details).

  • On standby node: PG_USER must be able to connect localy on the database with the same name (or another specified with -D) as trust (or via md5 using password specified in ~/.pgpass).

Usage

Usage: check_pg_streaming_replication [-d] [-h] [options]
	-u pg_user		Specify local Postgres user (Default: try to auto-detect or use postgres)
	-b psql_bin		Specify psql binary path (Default: /usr/bin/psql)
	-B pg_lsclusters_bin	Specify pg_lsclusters binary path (Default: /usr/bin/pg_lsclusters)
	-V pg_version		Specify Postgres version (Default: try to auto-detect or use 9.1)
	-m pg_main		Specify Postgres main directory path (Default: try to auto-detect or use
                                /var/lib/postgresql//main)
	-r recovery_conf	Specify Postgres recovery configuration file path
				(Default: [PG_MAIN]/recovery.conf)
	-U pg_master_user	Specify Postgres user to use on master (Default: user from recovery.conf file)
	-p pg_port		Specify default Postgres master TCP port (Default: same as local PostgreSQL
	                        port if detected or use 5432)
	-D dbname		Specify DB name on Postgres master/slave to connect on (Default: PG_USER, must
	                        match with .pgpass one is used)
	-C 1/0			Enable or disable check if the current LSN of the master host is the same
				of the last received LSN (Default: 1)
	-w replay_warn_delay	Specify the replay warning delay in second (Default: 3)
	-c replay_crit_delay	Specify the replay critical delay in second (Default: 5)
	-d			Debug mode
	-h 			Show this message

Copyright (c) 2014-2020 Benjamin Renard

License

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.