check_pg_streaming_replication/README.md

104 lines
6 KiB
Markdown
Raw Normal View History

# Nagios plugin to check Postgres Streaming replication
2019-03-15 16:35:31 +01:00
This script could be used as Nagios check plugin to verify Postgres Streaming replication state.
This script :
2019-03-15 17:21:18 +01:00
- check if Postgres is running (_CRITICAL_ raise if not)
2019-03-15 16:35:31 +01:00
- check if Postgres is in recovery mode :
- if Postgres is in recovery mode :
- retrieve from Postgres the last _xlog_ file receive and the _xlog_ file replay
2019-03-15 17:21:18 +01:00
- check if Postgres recovery configuration file is NOT present (_CRITICAL_ raise if present)
- retrieve master connection information from Postgres recovery configuration file (_UNKNOWN_ raise on error). Default Postgres master TCP port will be used if port is not specify.
- retrieve 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" (or the state specified using `-e` parameter, _CRITICAL_ raise if not)
- if the check of the current XLOG file of the master host is enabled :
- retrieve 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
2019-03-15 17:21:18 +01:00
- Return _OK_ state
2019-03-15 16:35:31 +01:00
- if Postgres is not in recovery mode :
2019-03-15 17:21:18 +01:00
- 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)
2019-03-15 16:35:31 +01:00
**Note :** This script was originally write for PostgreSQL 9.1 and test on 9.1, 9.5, 9.6, 11, 13 and 15. Do not hesitate to tell me how this script work with other versions and share some fix. All contributions are welcome !
2019-03-15 16:35:31 +01:00
## Requirements
2019-03-15 16:35:31 +01:00
- Some CLI tools: `sudo`, `awk`, `sed`, `bc`, `psql` and `pg_lscluster`
2019-03-15 16:35:31 +01:00
- **On master node:** Slaves must be able to connect with user from `recovery.conf` / `postgresql.auto.conf` (or user specify using `-U`) to database with the same name (or another specified with `-D`) as `trust` (or using password specified in `~/.pgpass`). This user must have `SUPERUSER` privilege (need to get replication details).
2019-03-15 17:21:18 +01:00
- **On standby node:** `PG_USER` must be able to connect locally on the database with the same name `(or another specified with -D)` as `trust` (or using password specified in `~/.pgpass`).
2019-03-15 16:35:31 +01:00
## Installation
2019-03-15 16:35:31 +01:00
2024-07-16 10:40:47 +02:00
### From debian packages
```
echo "deb http://debian.zionetrix.net stable main" | sudo tee /etc/apt/sources.list.d/zionetrix.list
sudo apt -o Acquire::AllowInsecureRepositories=true -o Acquire::AllowDowngradeToInsecureRepositories=true update
sudo apt -o APT::Get::AllowUnauthenticated=true install --yes zionetrix-archive-keyring
sudo apt update
sudo apt install check-pg-streaming-replication
```
### From sources
2020-11-04 19:19:22 +01:00
```
apt install sudo awk sed bc postgresql-client
git clone https://gitea.zionetrix.net/bn8/check_pg_streaming_replication.git \
/usr/local/src/check_pg_streaming_replication
mkdir -p /usr/local/lib/nagios/plugins
ln -s /usr/local/src/check_pg_streaming_replication/check_pg_streaming_replication \
/usr/local/lib/nagios/plugins/check_pg_streaming_replication
```
## 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 on PG <= 11,
[PG_MAIN]/postgresql.auto.conf on PG >= 12)
-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)
-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)
-e expected_sync_state The expected replication state ('sync' or 'async',
default: sync)
-E expected_mode The expected mode ('master', 'hot-standby' or 'auto',
default: 'auto')
-d Debug mode
-h Show this message
2020-11-04 19:19:22 +01:00
```
2019-03-15 16:35:31 +01:00
## Copyright
2019-03-15 16:35:31 +01:00
Copyright (c) 2014-2024 Benjamin Renard
2019-03-15 16:35:31 +01:00
## License
2019-03-15 16:35:31 +01:00
2020-11-04 15:37:18 +01:00
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.
2019-03-15 16:35:31 +01:00
2020-11-04 15:37:18 +01:00
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.
2019-03-15 16:35:31 +01:00
2020-11-04 15:37:18 +01:00
You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.