FutureOfOpenSourceSurvey.jpg
Eine aktuelle Umfrage beschäftigt sich mit der Entwicklung und Zukunft von Open Source Software im Jahr 2012. Machen Sie mit und unterstützen auch Sie die aktuelle Open Source Studie 2012.

Die Open Source Studie 2012 evaluiert die Entwicklung und die erwartete Zukunft von Open Source im Unternehmenseinsatz in diesem Jahr. Die Ergebnisse dieser Studie werden sicher auch für Ihr Unternehmen einen wichtigen Beitrag für die zukünftige Open Source Strategie liefern.

Gerne sind Sie dazu eingeladen, die Umfrage auch anderen Interessierten mitzuteilen, oder sich mit dem Hash-Tag #FutureOSS darüber auszutauschen. Die Ergebnisse werden Ihnen kostenfrei zur Verfügung gestellt. Alle Angaben können anonym erfolgen.

Alle Blog-Artikel zu aktuellen Themen werden auch als Kategorie News samt eigenem Feed angeboten. Wir bieten zu nahezu allen angesprochenen Open-Source-Themen auch unseren gewohnten Open Source Support.

debianlogo.pngDebian Entwickler arbeiten mit vereinten Kräften an Debian GNU/Linux „Wheezy“.

Auch in diesem Jahr bietet das deutsche Open Source Support Centers der credativ GmbH in seinem Räumen in Mönchengladbach dem Debian-Projekt die Möglichkeit, im Rahmen einer "Bug Squashing Party" an der nächsten Debian-Version "Wheezy" zu arbeiten. Die Debian-Entwickler der credativ GmbH und zahlreiche Gäste aus dem In- und Ausland werden sich am Wochenende vom 2. bis 4. März treffen, um konzentriert an offenen Problemen zu arbeiten. Aus Italien werden in diesem Jahr auch Enrico Zini und Francesca Ciceri vom Debian Press Team erwartet.

Auf der Bug Squashing Party wird auch an Piuparts gearbeitet werden, einem Tool das automatische Upgrade-Tests für die nächste Debian-Version Wheezy durchführt. Fehler können so rechtzeitig vor dem Release erkannt und beseitigt werden.

Ein weiteres Ziel ist verbesserte Ipv6-Unterstützung. Debian-Entwickler Alexander Wirt: "Die Umstellung auf das neue Internet-Protokoll ist sehr wichtig, zu viele Programme in Debian unterstützen bisher nur das alte IPv4-Protokoll."

Außerdem soll der Mailinglisten-Server des Debian-Projekts auf neue und schnellere Hardware umgezogen werden, damit der ansteigende Mailverkehr bewältigt werden kann. Parallel zur Bug Squashing Party trifft sich das Debian New Member Team, um an der Infrastruktur zu arbeiten, mit der das Debian-Projekt seine Benutzerkonten verwaltet und neue Mitglieder aufnimmt. Debian Account Manager Christoph Berg: "Wir arbeiten seit zwei Jahren an der Umstellung der alten PHP-Webseite auf ein modernes Web-Framework in Python, wir wollen das Wochenende nutzen, um die neue Version endlich fertig zu stellen."

Weitere Informationen über die Bug Squashing Party bei credativ stehen auf den Seiten von debian.org zur Verfügung.

Alle Blog-Artikel zu unserer Firma werden auch als Kategorie credativ samt eigenem Feed angeboten - und falls ihr nach Support und Services für Debian sucht, seit ihr bei uns ebenfalls richtig.

Deutsche PostgreSQL Konferenz

postgreslogo.png


Im Rahmen der alljährlichen OpenRheinRuhr, einer jährlichen Konferenz rund um Freie Software, wird die deutschsprachige PGConf.DE am 11. November 2011 in Oberhausen das Rheinland besuchen.

Als Fortsetzung des sehr erfolgreichen PGDay.EU im letzten Jahr, werden auch in diesem Jahr interessante und informative Vorträge rund um PostgreSQL angeboten. Entwickler und Anwender, aber auch Interessierte anderer Bereiche, treffen auf PostgreSQL-Entwickler, -Spezialisten oder erfahrene Anwender zum Erfahrungsaustausch und um die neuesten Entwicklungen rund um das freie Datenbanksystem zu erfahren.

Das Vortragsprogramm ist online verfügbar, ebenso wie die Registrierung der Konferenz bereits möglich ist. Besucher, die sich vorab registrieren erhalten einen Kostenvorteil von 10 € gegenüber dem Eintrittspreis an der Tageskasse. Der Eintrittspreis berechtigt gleichzeitig auch zum Besuch der OpenRheinRuhr für das ganze Wochenende.

Mitarbeiter der credativ GmbH, die die PGConf.DE als Goldsponsor unterstützt, werden selbstverständlich ebenfalls anwesend sein und in ihren Vorträgen von ihren Erfahrungen berichten.

Alle Blog-Artikel zum Thema PostgreSQL werden auch als Kategorie PostgreSQL samt eigenem Feed angeboten. Wir helfen auch gerne mit Support und Services für PostgreSQL.

VACUUM FULL - Viel hilft viel?

postgreslogo.png


VACUUM in PostgreSQL ist seit jeher mit Mythen und falschen Informationen behaftet. Besonders verbreitet ist offenbar die Einstellung, VACUUM FULL helfe vorbeugend. Das genaue Gegenteil ist häufig der Fall.

VACUUM - Der Staubsauger

Seit der Einführung von MVCC (Multi Version Concurrency Control) in PostgreSQL 6.5 im Jahr 1999 gibt es das Kommando VACUUM. Mit Hilfe dieses Kommandos wird der sogenannte Heap, also die Dateien, die die Tabellendaten enthalten, defragmentiert und nicht mehr belegter Speicherplatz freigegeben. Dies ist notwendig, da PostgreSQL Zeilen bei UPDATE oder DELETE nicht etwa physikalisch löscht, sondern eine neue Version der Zeile anlegt bzw. die Zeile einfach als gelöscht markiert. Die alte Version muss noch so lange beibehalten werden, wie es auch Transaktionen gibt, die diese Zeilenversion noch "sehen" können. Ist eine Tabelle sehr stark durch UPDATE oder DELETE/INSERT frequentiert, und passiert VACUUM zu selten (beispielsweise weil Autovacuum nicht verwendet wird), so kann der sogenannte "tote" Speicherplatz in einer Tabelle sehr stark anwachsen.

VACUUM FULL - Vorbeugende Reorganisation?

Viele Administratoren sind daher der Auffassung, dass es aus diesem Grund angebracht ist, dies im Vorfeld durch nächtliche VACUUM FULL Jobs dem Anwachsen der Tabelle vorzubeugen. Dies ist eine schlechte Strategie, aus mehreren Gründen:

  1. VACUUM FULL benötigt im Gegensatz zu normalem VACUUM eine exklusive Tabellensperre, d.h. der Zugriff ist für alle nebenläufigen Transaktionen nicht möglich (auch reine Leseanfragen).
  2. VACUUM FULL führt eine komplette physische Reorganisation der Tabelle durch, nicht jedoch der Indexe. Dies hat sich mit PostgreSQL 9.0 geändert. Eine exklusive Tabellensperre ist weiterhin notwendig.
  3. Läuft eine Datenbank mit WAL-Archiving, so kommt es durch VACUUM FULL zu massiv erhöhtem Datenaufkommen im Transaktionslog. Dies kann Probleme mit dem Backuparchiv nach sich ziehen.
  4. Man benötigt auf jeden Fall ein Wartungsfenster für exklusiven Zugriff der Tabellen.
  5. Im Gegensatz zu normalen VACUUM ist VACUUM FULL daher nicht für den Einsatz in 24/7-Datenbanken geeignet.

Während sich die meisten Nachteile durch ein Wartungsfenster umschiffen lassen, sind die Nachteile durch sehr häufiges VACUUM FULL gravierender. Besonders PostgreSQL-Versionen bis einschließlich 8.4 sind davon betroffen. Um das zu verstehen, muss man sich die Funktionsweise des VACUUM FULL Kommandos in diesen Versionen ansehen:

  1. VACUUM FULL untersucht die Tabelle sequentiell nach totem Speicherplatz. Hierzu werden die gefundenen toten Bereiche während VACUUM FULL in einem Array im Hauptspeicher gespeichert. Ist das Array voll (begrenzt durch maintenance_work_mem), so werden sichtbare (also aktive) Zeilen von unten her in die gefundenen toten Bereiche verlagert (sofern Platz hierfür ausreichend zur Verfügung steht).
  2. Sind Indexe auf der Tabelle vorhanden, so müssen diese ebenfalls aktualisiert werden.
  3. Ist das Array abgearbeitet, beginnt der Algorithmus wieder von vorne, solange, bis das Ende der Tabelle erreicht ist.
  4. Anschließend wird die Tabelle physisch verkleinert.

Das Hauptproblem ist das Umsortieren der Zeilen in den freigewordenen Speicherplatz. Dies sorgt für massive I/O auf dem Speichersystem. Noch schwerwiegender ist jedoch die Tatsache, dass beim Umsortieren der Index ebenfalls aktualisiert werden muss. Passiert das sehr häufig, so kann es passieren, dass der Index selbst sehr stark fragmentiert. In diesem Fall wächst der Index selbst an, man spricht dann vom sogenannten Index Bloat. Daher kann es erforderlich sein, direkt nach dem VACUUM FULL ein REINDEX auf die Tabellen auszuführen, insbesondere wenn Tabellen sehr stark fragmentiert waren und viele Tupel umsortiert wurden. Dies alles sorgt bei sehr großen Tabellen auch für sehr lange Laufzeiten.

Ab PostgreSQL 9.0 verhält sich VACUUM FULL wie das CLUSTER Kommando, d.h. die Tabelle wird sequentiell gelesen und parallel komplett neu aufgebaut. Dies hat den Vorteil, dass man nur die Zeilen liest, die aktiv sind und die "toten" Zeilen außen vor lässt. Anschließend werden die Indexe neu erzeugt. Dies eliminiert viele Nachteile des alten Algorithmus, vermeidet jedoch nicht die Notwendigkeit exklusiver Tabellensperren. Ferner benötigt die Reorganisation der Tabelle im schlechtesten Falle nochmal soviel Speicherplatz, wie die aktuell zu bearbeitende Tabelle.

VACUUM und Autovacuum für tägliche oder sehr granulare Wartung

VACUUM bzw. Autovacuum sind für die tägliche oder dauerhafte Wartung von PostgreSQL-Datenbanken ausgelegt.

  1. Wer sich eine sorgfältige VACUUM-Policy mit normalem VACUUM oder, noch besser, Autovacuum zurechtlegt, benötigt kein VACUUM FULL.
  2. Autovacuum sollte auf jeden Fall in Betracht gezogen werden, muss jedoch an den Workload angepasst werden.
  3. Ist dennoch mal eine Tabelle sehr stark aufgebläht, so kann mit aktuellen 8er PostgreSQL-Versionen mit CLUSTER die Tabelle häufiger deutlich schneller verkleinert werden, ohne das Problem der Indexfragmentierung. Da CLUSTER anhand eines Index die Tabelle reorganisiert, benötigt man mindestens einen Index. Ferner sollte unbedingt danach die Optimizerstatistiken mit ANALYZE aktualisiert werden.
  4. Bis einschließlich PostgreSQL 8.3 ist es unbedingt notwendig, sich vor Inbetriebnahme die Parameter max_fsm_pages und max_fsm_relations anzuschauen. Die Werte dieser Parameter kann nur durch einen Neustart der Datenbank geändert werden und beeinflussen die Anzahl an erfassten fragmentierten Speicherplatz in Tabellen und Indexe sowie die Anzahl an Tabellen und Indexe die durch VACUUM erfasst werden können (VACUUM FULL benutzt die sogenannte Free Space Map nicht). Ab PostgreSQL 8.4 werden die FSM pro Tabelle automatisch angepasst.
  5. Auch VACUUM kann unter günstigen Umständen eine Tabelle verkleinern. Wenn die Tabelle am Ende nur noch leere Blöcke enthält und aktuell keine Transaktion neue Zeilen in diese Bereiche einlagern möchte, dann kann auch normales VACUUM die Tabelle entsprechend eindampfen.

Warum dann überhaupt noch VACUUM FULL?

VACUUM FULL ist ein Kommando, das nicht für die tägliche Wartung ausgelegt ist. Ist das Kind einmal in den sprichwörtlichen Brunnen gefallen und eine Tabelle stark aufgebläht, so ist es je nach PostgreSQL-Version unausweichlich mit VACUUM FULL den Speicherplatz freizugeben. Bei älteren PostgreSQL-Versionen sollte sich der Administrator besonders bei sehr großen Speicherbedarf der Tabelle besser überlegen, auf das CLUSTER-Kommando auszuweichen. Möchte man dennoch VACUUM FULL benutzen, so sollte man bei älteren PostgreSQL-Versionen mit REINDEX ebenfalls die Indexe neu erzeugen. Weitere Infos zu diesem Thema finden sich im PostgreSQL Wiki.

Weitere Informationen

Alle Blog-Artikel zum Thema PostgreSQL werden auch als Kategorie PostgreSQL samt eigenem Feed angeboten. Wir helfen auch gerne mit Support und Services für PostgreSQL.

credativ beim PGDay Europe 2010

postgreslogo.png
Letzten Monat fand die alljährliche europäische PostgreSQL-Konferenz in Stuttgart statt. Die credativ GmbH war nicht nur Sponsor der Veranstaltung, sondern auch mit vier Mitarbeitern vor Ort, welche mehrere Vorträge gehalten haben. Die Folien der Vorträge sind nun verfügbar.


Die Konferenz fand im Stuttgarter Millennium-Hotel statt und wurde professionell und effizient von PostgreSQL Europe organisiert. Durch zahlreiche Kaffee-Pausen und die Konferenz-Party am Montag Abend war ein reger Austausch zwischen den Teilnehmern möglich.

Die Vorträge von credativ waren im einzelnen:

  • "Migration auf Freie Software in unternehmenskritischen Bereichen" (Folien)

    Dr. Michael Meskes fasste in diesem Vortrag die langjährige Erfahrung der credativ GmbH bei der Migration von kritischen Unternehmens-Bereichen auf Freie Software im allgemeinen und PostgreSQL für Datenbanken im speziellen zusammen.

  • "Embedded SQL für PostgreSQL" (Folien)

    In seinem zweiten Vortrag befasste sich Dr. Michael Meskes mit dem von ihm im PostgreSQL-Projekt als ECPG betreuten Embedded SQL, eine Datenbankschnittstelle in der Programmiersprache C. Da sie im SQL-Standard definiert ist und schon sehr lange und für alle Datenbanksysteme existiert, wird sie vielfach verwendet, so dass in dem Vortrag vor allem auch auf Migrationen eingegangen wurde.

  • "Die PostgreSQL Community" (Folien)

    Bernd Helmle, der technische Leiter der credativ GmbH für den Bereich Datenbanken, stellte in seinem Vortrag die Geschichte und den momentanen Stand der PostgreSQL-Community und deren Prozesse und Organisation vor und erläuterte zusätzlich die verschiedenen Möglichkeiten der Mitarbeit durch neue Mitglieder.

  • "Advanced Analytics with PL/R" (Folien)

    Schließlich hielt Joe Conway, CEO der US-amerikanischen credativ LLC einen (englisch-sprachigen) Vortrag über die PostgreSQL-Erweiterung PL/R, eine Zusammenführung von PostgreSQL mit R, der im Bereich Freier Software führenden Umgebung für mathematische und statistische Berechnungen und deren Visualisierung).

Das nächste PostgreSQL-Event der credativ GmbH ist die Schulung im Linux-Hotel vom 23. bis 25. Februar 2011.

Alle Blog-Artikel zum Thema PostgreSQL werden auch als Kategorie PostgreSQL samt eigenem Feed angeboten. Wir helfen auch gerne mit Support und Services für PostgreSQL.

[Howto] Nagios-OpenNMS Migration Teil 2: Passive Checks

migration.pngDies ist der zweite Teil unseres Migrations-Howtos für Netzwerk-Überwachungs-Systeme von Nagios nach OpenNMS. Nachdem im ersten Teil die Integration von aktiven Nagios-Checks via NRPE (Nagios Remote Plugin Executor) diskutiert wurde, wenden wir uns in diesem zweiten Teil den passiven Nagios-Checks durch NSCA (Nagios Service Check Acceptor) zu.

Passive Nagios-Checks

Da es momentan keine spezielle OpenNMS-Unterstützung für passive NSCA-Checks gibt, müssen diese durch andere Mechanismen abgebildet werden. In diesem Howto verwenden wir für jeden passiven NSCA-Check einen eigenen Service, dessen Status durch externe Benachrichtigung geändert wird und der durch den PassiveStatusKeeper-Mechanismus von OpenNMS überwacht wird.

Einbinden der Nagios SNMP-Trap Informationen

Für die sinnvolle Behandlung von SNMP-Traps wird eine Registrierung des jeweiligen MIBs (Management Information Base) als OpenNMS-Event benötigt. OpenNMS kennt zwar von Haus aus eine Vielzahl von SNMP-Traps, die aus dem Nagios-MIB sind jedoch nicht darunter. Die benötigte Nagios.events.xml Datei wurde aus dem MIB erstellt und muss in das events/-Unterverzeichnis der OpenNMS Konfiguration kopiert werden und in der eventconf.xml Datei via <event-file>events/Nagios.events.xml </event-file> eingebunden werden. Der in der Nagios-MIB definierte SNMP-Trap für Service-Events ist nSvcEvent, welcher als numerische OID (Object Identifier) den Code .1.3.6.1.4.1.20006.1.7 besitzt.

Benachrichtigungen via SNMP-Trap

Das für passive NSCA-Checks verwendete Programm send_nsca kann etwa durch folgendes Shell-Skript ersetzt werden, welches die Benachrichtigung von OpenNMS via snmptrap durchführt:
  #!/bin/bash

  SNMPTRAP=/usr/bin/snmptrap
  COMMUNITY=public

  while getopts "H:d:p:" OPTION; do
    case $OPTION in
      H) HOST=$OPTARG;;
      d) DELIM=$OPTARG;;
      p) PORT=$OPTARG;;
      *) ;;
    esac
  done

  if [ "x$DELIM" == "x" ]; then
    DELIM="\t"
  fi

  if [ "x$HOST" == "x" ]; then
    echo "No host defined, exiting"
    exit
  fi

  array=(`awk -F"$DELIM" '{for(i=1;i<=3;i++){print $i};
                    for(i=4;i<=NF;i++){gsub(/ /,"_",$i); print $i}}'`);
  NODE=${array[0]}
  SERVICE=${array[1]}
  STATUS=${array[2]}
  REASON=`echo ${array[3]} | sed s/_/\ /g`"'"

  $SNMPTRAP -v 2c -c $COMMUNITY $HOST '' NAGIOS-NOTIFY-MIB::nSvcEvent \
    NAGIOS-NOTIFY-MIB::nHostname s "$NODE" \
    NAGIOS-NOTIFY-MIB::nHostStateID i 0 \
    NAGIOS-NOTIFY-MIB::nSvcDesc s "$SERVICE" \
    NAGIOS-NOTIFY-MIB::nSvcStateID i "$STATUS" \
    NAGIOS-NOTIFY-MIB::nSvcAttempt i 1 \
    NAGIOS-NOTIFY-MIB::nSvcDurationSec i 1 \
    NAGIOS-NOTIFY-MIB::nSvcGroupName s "" \
    NAGIOS-NOTIFY-MIB::nSvcLastCheck i 0 \
    NAGIOS-NOTIFY-MIB::nSvcLastChange i 0 \
    NAGIOS-NOTIFY-MIB::nSvcOutput s "$REASON"
Das Skript versteht die beiden nsca_send Optionen -H (Host) und -d (Feldtrenner). $HOST ist dabei der OpenNMS-Server, für den die Benachrichtigung vorgesehen ist. Der awk-Befehl zerteilt den per Feldtrenner separierten NSCA-String (z.B. „postgres-test; Vaccuum;0;Vaccuum OK 1276511175“) in seine Bestandteile, welche den Variablen $NODE, $SERVICE, $STATUS und $REASON zugeteilt werden. Diese werden schließlich beim Aufruf von snmptrap den nSvcEvent Parametern nHostname, nSvcDesc, nSvcStateID und nSvcOutput zugeteilt. Den übrigen Parametern nHosteStateID, nSvcAttempt, nSvcDurationSec, nSvcGroupName, nSvcLastCheck und nSvcLastChange werden allgemeine Werte zugeteilt, da sie bei der Umsetzung des nSvcEvent-Traps in ein OpenNMS-Event keine Rolle spielen und auch beim Aufruf von send_nsca nicht bekannt sind. Damit die Parameter des nSvcEvent-Traps von snmptrap aufgelöst werden können, muss das NAGIOS-MIB der Net-SNMP-Installation bekannt sein.

Umwandlung von Traps in Events

Die eingehenden SNMP-Traps werden in OpenNMS-Events vom Typ nSvcEvent umgewandelt. Um diese nun einzelnen Nagios-Checks bzw. OpenNMS-Services zzuuweisen, müssen sie vom translatord-Dämon in passiveServiceStatus Events umgewandelt werden. Folgender Abschnitt ist hierfür in der Datei translator-configuration.xml nötig:
<event-translation-spec 
  uei="uei.opennms.org/vendor/nagios/traps/nSvcEvent">
    <mappings>
      <mapping>
        <assignment type="parameter" name="passiveNodeLabel">
          <value type="parameter" 
            name=".1.3.6.1.4.1.20006.1.1.1.2" 
            matches=".*" 
            result="${0}" 
          />
        </assignment>
        <assignment type="parameter" name="passiveIpAddr">
          <value type="field" 
            name="interface" 
            matches=".*" 
            result="${0}"
          />
        </assignment>
        <assignment type="parameter" name="passiveServiceName">
          <value type="parameter" 
            name=".1.3.6.1.4.1.20006.1.3.1.6" 
            matches=".*" 
            result="${0}" 
          />
        </assignment>
        <assignment type="parameter" name="passiveStatus">
          <value type="sql" 
            result="SELECT CASE WHEN ?::integer = 0  
                                     THEN 'Up'        
                                     ELSE 'Down' 
                                     END;" >  
            <value type="parameter" 
              name=".1.3.6.1.4.1.20006.1.3.1.7" 
              matches=".*" 
              result="${0}" 
            />
          </value>
        </assignment>
        <assignment type="parameter" name="passiveReasonCode">
          <value type="parameter" 
            name=".1.3.6.1.4.1.20006.1.3.1.17" 
            matches=".*" 
            result="${0}" 
          />
        </assignment>
        <assignment type="field" name="uei">
          <value type="constant" 
            result="uei.opennms.org/services/passiveServiceStatus" 
          />
        </assignment>
      </mapping>
    </mappings>
</event-translation-spec>
Die uei in der zweiten Zeile bezeichnet dabei den SNMP-Trap, wie er in der jeweiligen events-XML Datei angegeben ist. Die Parameter passiveNodeLabel, passiveServiceName, passiveStatus und passiveReasonCode werden aus den jeweiligen Parametern $NODE, $SERVICE, $STATUS und $REASON des SNMP-Traps übernommen. Für die Ermittlung von passiveStatus ist dabei eine SQL-Abfrage nötig, um je nach Nagios-Status ein "Up" oder "Down" zu senden. Die IP-Adresse kann direkt aus dem "interface"-Feld des Events übernommen werden. Schließlich wird in der letzten Zuordnung die OpenNMS UEI (Unique Event Identifier) von nSvcEvent nach passiveServiceStatus umgewandelt.

Einbinden von Passiven Checks als Services

Passive NSCA-Checks können naturgemäß nicht mit capsd entdeckt werden, deshalb müssen sie per LoopPlugin für jede betreffende Node per ip-match Property in der capsd-configuration.xml Datei aktiviert werden:
    <protocol-plugin 
      protocol="NSCA-check1" 
      class-name="org.opennms.netmgt.capsd.plugins.LoopPlugin"
      scan="on">
        <property key="ip-match" value="192.168.178.158" />
        <property key="ip-match" value="172.16.17.213" />
        <property key="is-supported" value="true" />
    </protocol-plugin>
Dabei bezeichnet protocol den Namen des betreffenen OpenNMS-Service.

Zusätzlich ist auch ein entsprechender Poller in poller-configuration.xml nötig, zum einen der <service>-Anker:

    <service name="NSCA-check1" 
      interval="30000" 
      user-defined="false" 
      status="on">
    </service>
Sowie schließlich ein PassiveServiceMonitor:
<monitor service="NSCA-check1" 
  class-name="org.opennms.netmgt.poller.monitors.PassiveServiceMonitor"
/>
Mit diesen Änderungen und nach einem Neustart von OpenNMS sollten die NSCA-Checks für die entsprechende Node im OpenNMS-Webinterface erscheinen und sich wie normale OpenNMS Dienste in Bezug auf Ausfälle etc. verhalten.

PGDay Europe 2010 in Stuttgart


Die PostgreSQL Europe Community wird dieses Jahr ihren jährlichen Kongress in Stuttgart abhalten. Das umfangreiche Vortragsprogramm umfasst vielfältige Themen rund um PostgreSQL, darunter Vorträge aus den Gebieten GIS, Entwicklung, Hochverfügbarkeit und vieles mehr.

Die credativ GmbH wird mit Michael Meskes, Joe Conway und Bernd Helmle als Silbersponsor mit Vorträgen zu den Themen

auf dem Kongress vertreten sein. Darüber hinaus bietet der PGDay ein eintägiges Tutorialprogramm. Details für die Registrierung, Unterkunft und Anreise können über die Seite des Kongresses abgerufen werden.

Alle Blog-Artikel zum Thema PostgreSQL werden auch als Kategorie PostgreSQL samt eigenem Feed angeboten. Wir helfen auch gerne mit Support und Services für PostgreSQL.

[Howto] Migration von Nagios zu OpenNMS

migration.pngHier bei credativ setzen wir bevorzugt Nagios für das Monitoring ein, aber wenn es die Richtilinien bei Kunden verlangen, arbeiten wir natürlich auch mit anderen Überwachungs-Systemen. Dieses Howto beschreibt die Integration von aktiven und passiven Nagios-Checks in ein OpenNMS-System, so dass zwar die entwickelten Checks weiter verwendet, der Nagios-Server aber abgeschaltet werden kann.

Einleitung

OpenNMS ist ein Open-Source Netzwerk-Monitoring-System. Es ist in Java geschrieben und benutzt PostgreSQL als Datenbank. Die Konfiguration erfolgt über XML-Dateien, teilweise (vor allem Reports, Benachrichtigungen usw.) auch über die Web-Oberfläche. OpenNMS ist relativ stark auf SNMP fokussiert, vor allem was das Sammeln von Performance-Daten angeht. Ob Rechner (oder Dienste auf Rechnern) erreichbar sind, kann jedoch auch einfach anderweitig abgefragt werden.
Dieses Howto behandelt die Migration eines Netzwerk-Überwachungs-Systems von Nagios/Icinga zu OpenNMS. Für aktive Nagios-Checks beruht diese Migration auf dem NRPE Plugin (Nagios Remote Plugin Executor), welches von der stabilen OpenNMS-Version bereits unterstützt wird. Es erfordert also ein bereits vorhandenes NRPE-Setup für Nagios, bzw. eine Migration des Nagios-Setups zu NRPE. Passive Nagios-Checks via NSCA (Nagios Service Check Acceptor) werden durch SNMP-Traps in OpenNMS integriert und bedürfen keiner Änderung auf der Nagios-Seite, lediglich das send_nsca-Skript muss zentral ausgetauscht werden. Die Sammlung und Bearbeitung von Performance-Daten ist mit diesem Howto nicht möglich, hierfür wäre eine Erweiterung der OpenNMS Code-Basis nötig.

Aktive Nagios-Checks

Die aktiven NRPE-Checks werden durch den OpenNMS Service pollerd ersetzt. Dieser stellt das Modul NrpeMonitor zur Verfügung, welches im Prinzip dazu gedacht ist, einen NRPE-Service auf einem der bekannten Rechner zu überwachen. Dazu wird alle 5 Minuten (dieser Wert ist für jeden Dienst einzeln konfigurierbar) versucht, den NRPE-Dämon zu erreichen, wobei im Normalfall der Befehl „_NRPE“ abgefragt wird, welcher vom NRPE-Dämon als Spezialfall aufgefasst wird und bei normalen Betrieb ein „OK“ und die Versionsnummer von NRPE zurück liefert.
Alternativ kann jedoch in der Konfigurations-Datei des pollerd ein beliebiges Kommando für den NRPE-Dämon eingestellt werden, z. B. check_load. Wenn dieses Kommando dem NRPE-Dämon bekannt ist, wird es ausgeführt und liefert den üblichen Nagios-Status zurück (OK mit Rückgabewert 0, WARNING mit Rückgabewert 1, CRITICAL mit Rückgabewert 2 oder UNKNOWN mit Rückgabewert 3) sowie die Performance-Daten, welche jedoch momentan vom pollerd bzw. OpenNMS nicht ausgewertet werden.
Um die bestehenden Nagios-Checks in OpenNMS abzubilden, wird für jeden bisher verwendeten aktiven Nagios-Check ein NRPE-Service in OpenNMS definiert. Diese werden dann unabhängig voneinander in OpenNMS geführt. Hierfür sind zwei Konfigurations-Dateien von OpenNMS zu ändern:
  • Die Datei capsd-configuration.xml bestimmt, auf welche Dienste ein Rechner vom OpenNMS Service capsd beim Scannen untersucht werden soll.
  • Die Datei poller-configuration.xml bestimmt, welche bzw. in welcher Art die vom capsd gefundenen Dienste vom pollerd überwacht werden sollen.
Aus Sicherheitsgründen sollten dem NRPE-Dämon keine variablen Parameter übergeben werden; die Abfrage des gleichen Checks mit verschiedenen Parametern oder Schwellen-Werten sollte also als jeweils unterschiedliche Checks in NRPE definiert werden.

Anpassung der capsd Konfiguration

Für jeden NRPE-Check muss ein neuer protocol-plugin Abschnitt in capsd-configuration.xml definiert werden. Der class-name ist dabei stets org.opennms.netmgt.capsd.plugins.NrpePlugin, normalerweise müssen lediglich die Werte für protocol und der für das Attribut „command“ angepasst werden. Ein Beispiel wäre:
    <protocol-plugin 
      protocol="NRPE-load" 
      class-name="org.opennms.netmgt.capsd.plugins.NrpePlugin" 
      scan="on">
        <property key="banner" value="*" />
        <property key="port" value="5666" />
        <property key="timeout" value="3000" />
        <property key="retry" value="2" />
        <property key="command" value="check_load" />
    </protocol-plugin>
Der Wert für „protocol“ bezeichnet den Dienst, wie er intern bzw. im Web-Interface von OpenNMS geführt werden soll. Das Attribut „port“ bezeichnet den Port, auf dem der NRPE-Dämon zu erreichen ist, der Standard hierfür ist 5666. Das Attribut „command“ bezeichnet den vom NRPE-Dämon auszuführenden Check, wie er in /etc/nagios/nrpe.cfg (oder evtl. /etc/nagios/nrpe_local.cfg) definiert ist. In diesem Fall wird der übliche Nagios-Check „check_load“ für die Überprüfung der System-Auslastung in Bezug auf die Anzahl der laufenden Prozesse ausgeführt.
Zu beachten ist hierbei, dass OpenNMS vor Version 1.6.9 nicht genauer den Rückgabewert prüft und im Falle eines Checks, der nicht ein „OK“ (sondern vorübergehend ein „WARNING“ oder „CRITICAL“) zurück gibt den jeweiligen Check nicht erkennt. Hierfür wurde von uns ein Patch entwickelt, welcher ab Version 1.6.9 in OpenNMS enthalten ist. Falls eine frühere Version von OpenNMS eingesetzt wird, kann das Problem durch eine temporäre Anpassung der Schwellen-Werte in der NRPE-Konfigurations-Datei auf dem jeweiligen Rechner behoben werden, so dass zum Zeitpunkt der Erkennung NRPE den Dienst als „OK“ ansieht.
Falls in einem großen Rechner-Netzwerk eine Prüfung auf eine potentiell große Anzahl von NRPE-Checks nicht im allgemeinen erwünscht ist, können diese auch auf ein einzelnes Netzwerk-Segment oder einen IP-Bereich beschränkt werden. Dazu wird die Beispiel-Konfiguration in einen protocol-configuration Abschnitt eingebettet:
    <protocol-plugin 
      protocol="NRPE-load" 
      class-name="org.opennms.netmgt.capsd.plugins.NrpePlugin" 
      scan="off">
        <protocol-configuration scan="on" user-defined="false">
        <range begin="192.168.178.0" end="192.168.178.254"/>
        <specific>10.0.0.2</specific>
        <specific>10.0.0.7</specific>
        <property key="banner" value="*" />
        <property key="port" value="5666" />
        <property key="timeout" value="3000" />
        <property key="retry" value="2" />
        <property key="command" value="check_load" />
        </protocol-configuration>
    </protocol-plugin>
Wichtig ist hierbei der Tag <range begin=“$IP_ADRESSE“ end=“$IP_ADRESSE“/>, welcher den IP-Bereich definiert. Alternativ können auch über <specific>$IP_ADRESSE</specific> Tags bestimmte IP-Adressen festgelegt werden. Durch die Option scan= “off“ in der ersten Zeile wird auf allen anderen Rechnern nicht auf diesen Check geprüft.
Nach der Änderung von capsd-configuration.xml ist ein Neustart von OpenNMS nötig; alternativ (ein OpenNMS-Neustart kann je nach Größe des überwachten Netzwerks eine längere Zeit dauern) kann der capsd-Daemon per JMX RPC neu gestartet werden:
for i in stop init start; do
  wget --proxy=off -O /dev/null \
"http://manager:manager@localhost:8181/invoke?objectname=OpenNMS%3AName%3DCapsd&operation=$i"; 
done
Wenn die Änderung hauptsächlich für einen bestimmten Rechner veranlasst wurde und sofort aktiv sein soll, muss für diesen Rechner ein „Rescan“ ausgeführt werden; entweder per Web-Interface oder mit Hilfe des send-event.pl Skripts, welches das entsprechende Event (forceRescan) an OpenNMS (auf localhost laufend) übermittelt:
send-event.pl uei.opennms.org/internal/capsd/forceRescan localhost --interface 10.0.0.2

Anpassung der pollerd Konfiguration

Die Konfigurations-Datei für den pollerd-Service muss für jeden NRPE-Check an zwei Stellen geändert werden; zum einen muss ein <service> Absatz hinzugefügt werden, in dem der zu überwachende Service ähnlich wie in der capsd-Konfigurationsdatei definiert wird, außerdem muss eine <monitor service=[...]/> Zeile eingefügt werden um die Überwachung des jeweiligen Services zu aktivieren. Analog zu dem Beispiel im letzten Abschnitt wäre dies etwa folgendes:
    <service name="NRPE-load" 
      interval="300000" 
      user-defined="false" 
      status="on">
        <parameter key="retry" value="3" />
        <parameter key="timeout" value="3000" />
        <parameter key="port" value="5666" />
        <parameter key="command" value="check_load" />
        <parameter key="padding" value="2" />
    </service>
Jeweils zu ändern sind auch hier die Angaben für „service name“ und der Parameter „command“. Die Option „interval“ gibt das Überwachungs-Intervall in Millisekunden an, der Standard-Wert ist hier üblicherweise 300000, was 5 Minuten entspricht. Die entsprechende Zeile für die Aktivierung des NrpeMonitor ist
<monitor service="NRPE-load" 
 class-name="org.opennms.netmgt.poller.monitors.NrpeMonitor" 
/>
Auch beim Ändern der Datei poller-configuration.xml ist ein Neustart von OpenNMS nötig, bzw. ein analoger Aufruf der RPCs wie im letzten Abschnitt, mit Pollerd statt Capsd als Argument:
for i in stop init start; do
  wget --proxy=off -O /dev/null \
"http://manager:manager@localhost:8181/invoke?objectname=OpenNMS%3AName%3DPollerd&operation=$i"; 
done
Im demnächst folgenden zweiten Teil dieses Howtos wird die Integration von passiven Nagios-Checks behandelt.

PostgreSQL 9.0 veröffentlicht

postgreslogo.png


Die PostgreSQL Community hat heute die Veröffentlichung der stabilen Version 9.0.0 bekanntgegeben.

Mit der Version 9.0 verfügt PostgreSQL erstmals über eine eingebaute Replikationslösung (Streaming Replication) und die Möglichkeit, Standbyknoten im reinen Lesemodus zu betreiben (Hot Standby). Streaming Replication ermöglicht die transparente Replikation auf einen oder mehrere Standbyknoten mit geringer Latenz. Des Weiteren gibt es viele Änderungen im Bereich Skalierbarkeit, Geschwindigkeit und Wartung:

  • JOIN Removal
  • Unterstützung für 64 Bit Windows
  • Trigger mit Bedingungen
  • Spaltenbasierte Trigger
  • Anonyme Prozedurale Codeblöcke mit DO
  • Verbessertes Nachrichtensystem mit LISTEN/NOTIFY

Weitergehende Informationen können direkt über die Release Notes der PostgreSQL Global Development Group eingesehen werden.

PostgreSQL 9.0 - Entwickler-Sprechstunde bei credativ

postgreslogo.png


Entwickler-Team beantwortet Fragen zur neuen PostgreSQL Version 9.0.

Mönchengladbach, 20. September 2010 - Anlässlich der neuen PostgreSQL Version 9.0 bietet das internationale PostgreSQL-Entwicklerteam der credativ allen interessierten Unternehmen eine „Entwickler-Sprechstunde" an.
Mit dieser Aktion ermöglicht credativ eine direkte Kommunikation zwischen Unternehmen und PostgreSQL-Entwicklern und steht für alle Fragen rund um die neue PostgreSQL Version 9.0 zur Verfügung.

Das neutrale und kostenfreie Informationsangebot richtet sich gezielt an Unternehmen, die den Einsatz von PostgreSQL planen, oder Ihre Anwendungen für die Unterstützung von PostgreSQL 9.0 vorbereiten möchten.
Als Ansprechpartner aus dem PostgreSQL-Entwicklerteam stellen sich folgende Personen zur Verfügung:

  • Dr. Michael Meskes (Deutschland)
    Schwerpunkte: PostgreSQL 9.0 im Enterprise-Bereich, Migration und Strategie, Hochverfügbarkeit und Skalierbarbeit, PostgreSQL Embedded SQL.
  • Bernd Helmle (Deutschland)
    Schwerpunkte: Neue Funktionalitäten in PostgreSQL 9.0, Replikation (Hot Standby & Streaming Replication), Skalierbarkeit, Performance und Tuning, Anwendungsentwicklung für PostgreSQL 9.0.
  • Joe Conway (USA)
    Schwerpunkte: Neue Funktionalitäten in PostgreSQL 9.0, PostgreSQL 9.0 im Enterprise- Bereich, Migration und Strategie, Replikation (Hot Standby & Streaming Replication), Procedural Language.
  • Dave Cramer (Kanada)
    Schwerpunkte: Neue Funktionalitäten in PostgreSQL 9.0, PostgreSQL 9.0 JDBC Driver, Anwendungsentwicklung, PostgreSQL und Embedded SQL.

Dr. Michael Meskes, Geschäftsführer der credativ GmbH, erklärt dazu: „Mit diesem Informationsangebot wollen wir eine direkte Verbindung zu den Unternehmen herstellen, die PostgreSQL bereits einsetzen, oder den Einsatz von PostgreSQL in ihrem Unternehmen evaluieren möchten. Als PostgreSQL-Entwickler sind wir natürlich sehr daran interessiert die Wünsche und Anregungen aufzunehmen, die aus Anwendersicht an uns gestellt werden. Die weitere Entwicklung einer Open Source Datenbank wie PostgreSQL lebt von dem Dialog und den Erfahrungen aller, die an PostgreSQL entwickeln oder PostgreSQL einsetzen."

Weitere Informationen können über unsere Internetseite eingesehen werden.