Direkt zum Inhalt | Direkt zur Navigation

Benutzerspezifische Werkzeuge

This is SunRain Plone Theme

Sektionen

Sie sind hier: Startseite / DB / postgres / Überwachung vom barman postgres backup mit Zabbix

Überwachung vom barman postgres backup mit Zabbix

Überwachung vom postgres backup mit barman und versenden der Daten mit zabbix_sender

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

    abgelegt unter: , , ,