Seite wählen

NETWAYS Blog

Icinga 2 – Monitoring automatisiert mit Puppet Teil 1: Installation


Der erste Release vom Rewrite des Puppetmoduls zu Icinga 2 liegt nun auch schon einige Monate zurück und somit wird es Zeit sich im Zuge einer Blog-Serie genauer damit zu befassen. Zu beziehen ist das Module entweder über die Puppet Forge oder via GitHub.
Zu Beginn steht natürlich immer erstmal die „Installation“ bzw. weil Puppet deklarativ arbeitet, die Beschreibung installiert zu sein. Schon hier zeigt sich das Modul flexibel und kann vom Benutzer angepasst benutzt werden. So greift Puppet bei einer einfachen Deklaration ohne Parameter auf die auf dem System konfigurierten Repositories zurück. Es bietet jedoch auch die Möglichkeit für die unterstützten Plattformen RedHat, Debian, Ubuntu und Suse, die automatisch Einbindung der offiziellen Icinga-Repositories auf packages.icinga.com.

class { '::icinga2':
  manage_repo => true,
}

Betreibt man selbst ein internes Repository, z.B. als Spiegel des offiziellen, muss dieses vor der Deklaration der Klasse ::icinga2 erfolgen. Beispielhaft hier für RedHat-Systeme:

yumrepo { 'ICINGA-release':
  descr => 'ICINGA (stable release for epel)',
  baseurl => 'http://packages.icinga.org/epel/$releasever/release/',
  failovermethod => 'priority',
  enabled => '1',
  gpgcheck => '1',
  gpgkey => 'http://packages.icinga.org/icinga.key',
}
->
class { '::icinga2': }

Ein Problem beim Einsatz in verteilten Umgebungen und vor allem durch die Benutzung von Icinga als Agent ist die Software-Verwaltung. So sollten keine Instanzen miteinander kommunizieren, die zwei Major Releases auseinander liegen, z.B. 2.6.x mit 2.5.x sollte noch ok sein, 2.6er mit 2.4.x und früher jedoch nicht. Besser ist jedoch die Benutzung ausschließlich von 2.6er Versionen. Setzt man hierfür kein Software-Management-Tool ein, kann Puppet helfen. Voraussetzung sollte jedoch ein Repository-Spiegel sein, den man nur zu gegebenen Zeitpunkten synchronisiert.

package { 'icinga2':
  ensure => latest,
}
->
class { '::icinga2':
  manage_package => false,
}

Damit wird bei jedem Puppetlauf dafür gesorgt, das die neuste Version installiert ist. Welche das ist, steuert man über den „händischen“ Repo-Sync. Sind für einzelne Features zusätzliche Pakte erforderlich, müssen dann auch diese durch eigene Package-Resources verwaltet werden. Betroffen sind hier außer auf Windows oder FreeBSD die Features idomysql und idopgsql.
Auch das Handling des Icinga Services kann angeschaltet werden. Standardmäßig zieht jede Änderung an einer mit Puppet verwalteten Konfigurationsdatei einen Reload des icinga-Prozesses nach sich. Vor Version 1.2.0 von puppet-icinga2 wird allerdings noch ein Neustart ausgelöst. Für den Fall, dass lediglich zu bestimmten Zeiten eine neue Konfiguration eingelesen werden soll, kann man wie folgt vorgehen:

schedule { 'everyday':
  range  => '2 - 4',
  period => daily,
  repeat => 1,
}
class { '::icinga2':
  manage_service => false,
}
~>
service { 'icinga2':
  ensure => running,
  enable => true,
  schedule => 'everyday',
}

Zu bedenken ist hier nur der Nachteil, dass auch nur zwischen 2 und 4 nachts der Dienst wieder gestartet wird, falls er nicht laufen sollte. Aber dafür gibt es ja das Monitoring. Abschließend für heute kann nicht unerwähnt bleiben: Auch um benötigte Plugins darf sich der Benutzer selbst kümmern. Hierbei ist die Reihenfolge, ob erst die Plugins und dann Icinga oder umgekehrt, unerheblich.

Lennart Betz
Lennart Betz
Senior Consultant

Der diplomierte Mathematiker arbeitet bei NETWAYS im Bereich Consulting und bereichert seine Kunden mit seinem Wissen zu Icinga, Nagios und anderen Open Source Administrationstools. Im Büro erleuchtet Lennart seine Kollegen mit fundierten geschichtlichen Vorträgen die seinesgleichen suchen.

Selbstentwickelte Anwendungen überwachen

Die Basis

Bei selbstentwickelten Anwendungen stellt sich häufig die Frage wie sich diese im Monitoringsystem überwachen lassen.
Häufig läuft es dann darauf hinaus das einzelne Komponenten der Anwendung überwacht werden. Der Webserver, die Datenbank, eventuell der Applicationserver oder die Messagequeue die von der Anwendung benötigt wird. Das alles ist ein Solides Grundgerüst auf dem sich aufbauen lässt.

Die Anwendung verrät Ihren Status

In einer agilen (Web-)Plattform ist es aber hilfreich wenn die Anwendung etwas über ihren Status verrät. Welches Softwarelease ist ausgerollt und passt die Version des Datenbank Schemas zu dieser Version? Erreicht der Server seine Failover Systeme und sind diese OK?
Die Software kann aber noch mehr über sich verraten. Wie ist der Gesamtstatus der Software? Dieser ist nur OK wenn alle einzelnen Prüfungen OK sind.
Wünschen sich Entwickler oder Admins bestimmte Infos auf einer Infoseite oder einer API, lassen sich diese häufig recht einfach implementieren.
Hier das Beispiel einer möglichen API Ausgabe:

{
  "health": {
    "status": "OK"
  },
  "checks": [
    {
      "version": "1.0.1"
    },
    {
      "commit": "338308edb94efb7e54e609d5a8ee3f5df78595d0"
    },
    {
      "nodeid": "node2"
    }
  ],
  "cluster": [
    {
      "node1": [
        {
          "status": "OK"
        },
        {
          "version": "1.0.2"
        },
        {
          "commit": "f28d07c9ec90a4f17b446de060c44cf6ff379de5"
        }
      ]
    },
    {
      "node2": [
        {
          "status": "MAINTENANCE"
        },
        {
          "version": "1.0.1"
        },
        {
          "commit": "338308edb94efb7e54e609d5a8ee3f5df78595d0"
        }
      ]
    },
    {
      "node3": [
        {
          "status": "OK"
        },
        {
          "version": "1.0.2"
        },
        {
          "commit": "f28d07c9ec90a4f17b446de060c44cf6ff379de5"
        }
      ]
    }
  ]
}

Die Informationen im Monitoring nutzen

Im Monitoring lassen sich einzelne Werte zum Beispiel mit check_http auswerten, indem man auf den zu erwartenden String prüft. Mit check_multi lassen sich diese Infos dann mit anderen Checks verknüpfen. Die Kollegen in der Rufbereitschaft freuen sich über weitere Anhaltspunkte, wo das Problem zu suchen ist.

Hilfe bei der Automatisierung

Diese Infos sind zum Beispiel bei Continuous Delivery Szenarien enorm hilfreich. Das CI System kann prüfen ob der Rollout der ersten Knotens erfolgreich war und diesen dann z.B. über einen API Call wieder als Live markieren, das Monitoring System beendet die Downtime und der Loadbalancer nimmt den Knoten wieder in die Verteilung.

Mittagsbestellungen bei NETWAYS

Mittagsbestellungen in einem größeren Büro zu organisieren, ist gar nicht so einfach. Die Kollegen müssen gefragt werden, was sie denn gerne bestellen wollen und irgendjemand muss das Geld jeweils passend einsammeln („Ich hab‘ aber nur einen 50 Euro-Schein!“).
Sobald das Essen dann da ist, müssen die Kollegen benachrichtigt werden, die inzwischen vielleicht in einem Meeting sitzen und gar nicht mehr daran denken, dass sie vor einer halben Stunde eine Pizza bestellt haben.
Um diesen Prozess zu vereinfachen, haben wir uns einige Automatismen ausgedacht, die uns sowohl Zeit sparen als auch den Bestellvorgang komfortabler gestalten.
Zunächst einmal habe ich hierfür eine Webseite entwickelt, über die Bestellungen entgegengenommen werden können:
order-form
Unsere Mitarbeiter bekommen dazu täglich um 10:15 Uhr eine E-Mail, in der die heutigen Angebote stehen (z.B. Pizza oder Döner). Auf der Bestellseite gibt es auch für den jeweiligen Laden die aktuelle Speisekarte, in der einfach die gewünschten Gerichte inkl. derer Optionen (groß, klein, mit extra Käse, usw.) ausgewählt werden können. Alternativ kann auch über einen Jabber-Bot bestellt werden.
Händler können über die Webseite auch Trinkgeld für den jeweiligen Laden einsammeln, das dann gerecht auf alle Bestellungen aufgeteilt wird. Auch sind Rabattaktionen möglich (z.B. 30% auf alles).
Der Bestellschluss ist um 11:15 Uhr. Danach können sich unsere Händler die Liste der Bestellungen über die Webseite als PDF herunterladen und entsprechend bestellen. Sobald das Essen im Büro angekommen ist, ändern die Händler den Bestellstatus über die Webseite, wodurch auch gleichzeitig Jabber-Benachrichtigungen an alle Kollegen verschickt werden, die am jeweiligen Tag mitbestellt haben.
In Zukunft wird dieser Schritt dann über einen Taster erledigt, der neben der Eingangstür angebracht ist. Dabei gibt es für die Kollegen, von denen die meisten Bestellungen ausgeführt werden, jeweils einen Taster:
fhem-buttons
Bleibt eigentlich nur noch die Frage, wie die Händler an das Geld kommen, um die Bestellungen bezahlen zu können. Anstatt täglich Kleinstbeträge für Döner (3€) und ähnliches einzusammeln, erhält jeder Mitarbeiter ein Konto, über das die Bestellungen abgerechnet werden:
bank
Dies ermöglicht uns auch, Bargeld an einer zentralen Stelle einzusammeln. Hierfür haben wir eine Geldkasette, in der wir jeweils eine ausreichende Summe Bargeld vorhalten, um für die nächsten 1-2 Wochen Bestellungen ausführen zu können.
Einzahlungen sind allerdings auch über SEPA-Überweisungen möglich. Hierzu fragt ein Cronjob stündlich ein externes Bankkonto per HBCI ab und schreibt es dem jeweiligen Mitarbeiter auf seinem Essenskonto gut.
Überweisungen zwischen Mitarbeitern sind auch möglich (inkl. SMS-TAN zur Sicherheit) und wir räumen jedem Kollegen einen zinsfreien Dispokredit von 20€ ein.
Der Sourcecode für die beiden Anwendungen ist auf GitHub in den beiden Repositories https://github.com/gunnarbeutner/shop-app und https://github.com/gunnarbeutner/bank-app. Aktuell fehlt leider jegliche Dokumentation (ups!) und der Code ist an einigen Stellen nicht wirklich schön.

OSDC 2014: Der Countdown läuft – nur noch 8 Tage

NUR NOCH EINE WOCHE!!!
Aber heute gibt’s noch mal Serverorchestrierung mit Rex.

OSDC? Noch nie gehört…
Das ist aber schade und fast schon ein unentschuldbares Versäumnis!
Aber wir holen das nach:
Die Open Source Data Center Conference (kurz OSDC) ist unsere internationale Konferenz zum Thema Open Source Software in Rechenzentren und großen IT-Umgebungen. 2014 findet sie zum sechsten Mal statt und bietet mit dem Schwerpunktthema Agile Infrastructures ganz besonders erfahrenen Administratoren und Architekten ein Forum zum Austausch und die Gelegenheit zur Aneignung des aktuellsten Know-Hows für die tägliche Praxis. Diesmal treffen wir uns dafür in Berlin!
Workshops am Vortag der Konferenz und das im Anschluss an die Veranstaltung stattfindende Puppet Camp komplettieren dabei das Rundum-sorglos-Paket für Teilnehmer, die gar nicht genug Wissen in sich aufsaugen können.

Reminder für das morgige Puppet Webinar

PuppetIch möchte noch einmal auf das morgige Webinar zum Thema Puppet: Aufbau einer Puppet Enterprise Umgebung hinweisen. Ziel soll es sein, einen groben Überblick über die Funktionsweise und Möglichkeiten zu geben, aber auch die Unterschiede zur Open Source Variante herauszustellen.
Natürlich werden wir, wie bisher auch, detailliert auf Fragen eingehen und einige Beispiele demonstrieren, die in der Open Source Variante genauso hilfreich sein können.
Wer sich registrieren möchte, hat über unsere Webinarseite jetzt noch die Gelegenheit.
Bis morgen!

Christian Stein
Christian Stein
Manager Sales

Christian kommt ursprünglich aus der Personalberatungsbranche, wo er aber schon immer auf den IT Bereich spezialisiert war. Bei NETWAYS arbeitet er als Manager Sales und berät unsere Kunden in der vertrieblichen Phase rund um das Thema Monitoring. Gemeinsam mit Georg hat er sich Mitte 2012 auch an unserem Hardware-Shop "vergangen".