Die meiste Software für eine Netzwerküberwachung versteht SNMP. Was liegt also näher, dieses Protokoll auch für Überwachung von PostgreSQL zu nutzen. Leider bringt PostgreSQL von Hause aus keine Unterstützung für SNMP mit. Seit geraumer Zeit gibt es jedoch pgsnmpd. Nach dem Download von der Homepage und dem Auspacken in das contrib-Verzeichnis der ausgepackten und übersetzten Quellen von PostgreSQL erfolgt die Installation mit
gmake && gmake install
Als nächstes werden auf allen Datenbanken, inklusive dem Template (so spart man sich das fehlerträchtige nachträgliche Installieren), die Unterstützungstabellen als PostgreSQL-Superuser installiert:
psql -d db -f /usr/share/postgresql/contrib/pgsnmpd.sql
Da auf meiner Maschine bereits ein SNMPd seinen Dienst tut, starte ich den pgsnmpd als Subagent. Dazu wird in der snmpd.conf der folgende Eintrag aktiviert:
master agentx
Startet danach der SNMP-Daemon nicht mehr, so muß in eventuell unter /var ein Verzeichnis agentx für den Socket angelegt werden. Danach kann man den pgsnmpd als Subagent starten:
/usr/bin/pgsnmpd -b -s -C"user=postgres host=localhost"
Bei mir fehlten allerdings noch die (aktuelle) RDBMS-MIB, APPLICATION-MIB, SYSAPPL-MIB und die NETWORK-SERVICES-MIB. Diese kann man sich aber schnell aus dem Internet besorgen.
Eine Verbindung zum RDBMS muss als PostgreSQL-Superuser erfolgen. Ist die Verbindung von Superuser auf localhost mit einem Passwort geschützt, wie sich das gehört, hilft eine .pgpass mit dem Inhalt
hostname:port:database:username:password
im Homeverzeichnis weiter. Erhält man dann vielleicht in den Logs noch ein:
registering pdu failed
sollte man in der Prozesstabelle schauen, ob der pgsnmpd bereits gestartet war. Zum Schluß binden wir den den pgsnmpd noch in die init-Skripte ein, um ein Hochfahren des Dienstes beim Reboot zu garantieren. Ich habe die /etc/init.d/local (Gentoo) dafür gewählt.