Überwachung vom barman postgres backup mit Zabbix
Checkliste Voraussetzungen:
Postgres
postgres (PostgreSQL) 9.6.2
barman
2.1 Barman by 2ndQuadrant (www.2ndQuadrant.com)
Zabbix
Version: 3.0
Notwendiges Wissen:
- Installation und Betrieb von Zabbix
Administration von Postgres
Administration von barman
Allgemeines:
- Das Aufrufen von dem Perl-Skript und das versenden mit "zabbix_sender" kann auch auf andere Bereich übertagen werden und kann als "blau-Pause" verwendet werden.
Skripte
Die Script steht unterhalb dieser URL
https://github.com/NET-CRY/zabbix/tree/master/postgres%20barman
zu Verfügung
Einrichtung barman Backup für postgres Server
Die Einrichtung von dem Backup für die SIcherung wird nach der Doku von barman vorgeommen.
http://docs.pgbarman.org/release/2.1/index.html
Es wird das streaming Backup genutzt.
Template postgres barman
Das "postgres barman" Template enthält zwei "low level discovery" (lld) Rules
low level discovery |
item |
key |
postgres-server |
Disk.Base_backup.usage {#POSTGRES.SERVER} Disk.WAL.usage {#POSTGRES.SERVER} Previous.Backup {#POSTGRES.SERVER} Status {#POSTGRES.SERVER} |
Disk.Base_backup.usage.['{#POSTGRES.SERVER}'] Disk.WAL.usage.['{#POSTGRES.SERVER}'] Previous.Backup.['{#POSTGRES.SERVER}'] Status.['{#POSTGRES.SERVER}'] |
barman-server |
check {#ITEM_NAME} |
check.['{#ITEM_KEY}'] |
Das "low level discovery" wird mit den Perl Skript erzeugt und mit zabbix_sender zum zabbix Server gesendet. Wichtig dabei ist, das der json in einer Zeile ausgegeben wird:
lld Postgres Backup Server
barman list-server --minimal
Mit diesem Kommando wird ermittelt,, welche Postgres Server überwacht werden sollen. Das geschieht dynamisch. Wird ein neuer Server hinzugefügt, wird dieser automatisch aufgenommen.
Das json hat folgenden Inhalt:
post-back.net-cry.de discover.postgres.server { "data":[ { "{#POSTGRES.SERVER}":"post-01.net-cry.de" }, { "{#POSTGRES.SERVER}":"post-02.net-cry.de" },{ "{#POSTGRES.SERVER}":"post-03.net-cry.de" } ] }
Es wird das Makro "{#POSTGRES.SERVER}" übergeben, welches in den item prototypes übersetzt wird. Damit werden die item gebaut.
ldd ITEM_NAME und ITEM_KEY
barman check $postgres_server
Das "barman check" wird auf alle ermittelten Postgres Backup Server angewandt und ein komplexes json gebildet:
post-back.net-cry.de discover.check.server { "data":[ { "{#ITEM_NAME}":"post-03.net-cry.de.wal_level","{#ITEM_KEY}":"post-03.net-cry.de.wal_level" }, { "{#ITEM_NAME}":"post-03.net-cry.de.superuser","{#ITEM_KEY}":"post-03.net-cry.de.superuser" },{ "{#ITEM_NAME}":"post-03.net-cry.de.retention.policy.settings","{#ITEM_KEY}":"post-03.net-cry.de.retention.policy.settings" },{ "{#ITEM_NAME}":"post-03.net-cry.de.replication.slot","{#ITEM_KEY}":"post-03.net-cry.de.replication.slot" },{ "{#ITEM_NAME}":"post-03.net-cry.de.receive-wal.running","{#ITEM_KEY}":"post-03.net-cry.de.receive-wal.running" },{ "{#ITEM_NAME}":"post-03.net-cry.de.pg_receivexlog.compatible","{#ITEM_KEY}":"post-03.net-cry.de.pg_receivexlog.compatible" },{ "{#ITEM_NAME}":"post-03.net-cry.de.pg_receivexlog","{#ITEM_KEY}":"post-03.net-cry.de.pg_receivexlog" },{ "{#ITEM_NAME}":"post-03.net-cry.de.pg_basebackup.supports.tablespaces.mapping","{#ITEM_KEY}":"post-03.net-cry.de.pg_basebackup.supports.tablespaces.mapping" },{ "{#ITEM_NAME}":"post-03.net-cry.de.pg_basebackup.compatible","{#ITEM_KEY}":"post-03.net-cry.de.pg_basebackup.compatible" },{ "{#ITEM_NAME}":"post-03.net-cry.de.pg_basebackup","{#ITEM_KEY}":"post-03.net-cry.de.pg_basebackup" },{ "{#ITEM_NAME}":"post-03.net-cry.de.minimum.redundancy.requirements","{#ITEM_KEY}":"post-03.net-cry.de.minimum.redundancy.requirements" },{ "{#ITEM_NAME}":"post-03.net-cry.de.failed.backups","{#ITEM_KEY}":"post-03.net-cry.de.failed.backups" },{ "{#ITEM_NAME}":"post-03.net-cry.de.directories","{#ITEM_KEY}":"post-03.net-cry.de.directories" },{ "{#ITEM_NAME}":"post-03.net-cry.de.compression.settings","{#ITEM_KEY}":"post-03.net-cry.de.compression.settings" },{ "{#ITEM_NAME}":"post-03.net-cry.de.backup.maximum.age","{#ITEM_KEY}":"post-03.net-cry.de.backup.maximum.age" },{ "{#ITEM_NAME}":"post-03.net-cry.de.archiver.errors","{#ITEM_KEY}":"post-03.net-cry.de.archiver.errors" },{ "{#ITEM_NAME}":"post-03.net-cry.de.PostgreSQL.streaming","{#ITEM_KEY}":"post-03.net-cry.de.PostgreSQL.streaming" },{ "{#ITEM_NAME}":"post-03.net-cry.de.PostgreSQL","{#ITEM_KEY}":"post-03.net-cry.de.PostgreSQL" } ] }
Dieser wird ebenfalls dem item prototypes übergeben.
Template der Überwachungsmaschine zuordnen
cron Aktivierung auf dem barman Backup Server
cat /etc/cron.d/barman
*/30 * * * * barman [ -x /var/lib/barman/script/check_barman.pl ] && /var/lib/barman/script/check_barman.pl|zabbix_sender -c /etc/zabbix/zabbix_agentd.conf -i - 2>&1 >/tmp/check_barman.txt
Damit wird das Script mit den user "barman" alle 30 mini gestartet. Es wird das "lld" ausgeführt. Entsprchend der "item prototypes" werden die item erzeugt:
Trigger
barman check
barman check $postgres_server
Server post-03.net-cry.de:
PostgreSQL: OK
superuser: OK
PostgreSQL streaming: OK
wal_level: OK
replication slot: OK
directories: OK
retention policy settings: OK
backup maximum age: FAILED (interval provided: 1 day, latest backup age: 1 day, 2 hours, 33 minutes, 43 seconds)
compression settings: OK
failed backups: OK (there are 0 failed backups)
minimum redundancy requirements: OK (have 1 backups, expected at least 1)
pg_basebackup: OK
pg_basebackup compatible: OK
pg_basebackup supports tablespaces mapping: OK
pg_receivexlog: OK
pg_receivexlog compatible: OK
receive-wal running: OK
archiver errors: OK
Das Ergebnis wird auf "ok" überprüft. Sollte dieser nicht "ok" sein, wird ein entsprechender Alarm ausgeöst:
In diesem Fall war das letzte base-backup zu alt und barman schlägt alarm.
barman show-backup
barman show-backup $postgres_server latest
Es wird das letzte Base Backup überprüft:
Backup 20170411T164715:
Server Name : post-03.net-cry.de
Status : DONE
PostgreSQL Version : 90602
PGDATA directory : /var/lib/pgsql/9.6/data
Base backup information:
Disk usage : 21.9 MiB (21.9 MiB with WALs)
Incremental size : 21.9 MiB (-0.00%)
Timeline : 1
Begin WAL : 000000010000000000000007
End WAL : 000000010000000000000008
WAL number : 2
WAL compression ratio: 99.84%
Begin time : 2017-04-11 16:47:15+02:00
End time : 2017-04-11 16:47:15.354243+02:00
Begin Offset : 40
End Offset : 96
Begin XLOG : 0/7000028
End XLOG : 0/8000060
WAL information:
No of files : 0
Disk usage : 0 B
WAL rate : 341.88/hour
Last available : 000000010000000000000008
Catalog information:
Retention Policy : VALID
Previous Backup : 20170410T121807
Next Backup : - (this is the latest base backup)
Das Datum von Base backup information
wird in einem Unix-Timestamp umgewandet. Mit diesem Timestamp wird mit einen Tricker überprüft, ob das Backup zu alt ist.
Damit stehen zwei Möglichkeiten zur Backup überwachung zu Verfügung
Artikelaktionen