Seite wählen

NETWAYS Blog

Umzug mit Audi – von Tivoli nach Icinga mit dem NETWAYS Umzugsservice

Icinga_LConf_AudiAudi ist ein verdammt großes Unternehmen und hat, so rein monitoringtechnisch, nun wirklich viel zu leisten.
Spätestens, wenn sich dann herausstellt, dass das bisherige Monitoringsystem nicht so super ist, wie es sein sollte, hat man dann ein Problem. Mit mehreren tausend Hosts und Services, einen Umzug in geordneter Manier, in ein anderes System zu organisieren, ist schließlich kein entspannter Spaziergang durch den Park. Und was macht man, wenn man einen riesigen, stressigen Umzug vor sich hat, bei dem jede Menge kaputt gehen kann? Genau – man lässt ihn von Profis machen – Menschen, deren Job es ist, für zerbrechliche Gegenstände Luftpolterfolie mitzunehmen und die jeden Umzugskarton vorschriftsgemäß beschriften.
Was Audis Umzug von Tivoli in Icinga angeht, waren wir hier der Profi. Gemeinsam mit dem Audi-Team haben wir LConf – ein LDAP basiertes Konfigurationsmanagement Tool, das die gesamte IT-Umgebung in Baumstruktur darstellt, gebastelt und so den administrativen Aufwand vereinfacht. Das Tool generiert aus über 20.000 Einträgen über Hosts, Services und Contacts, etwa eine halbe Million LDAP queries und LConf sorgt dabei dafür, dass das zentrale Management des gesamten Systems trotzdem von nur zwei Sysadmins abgewickelt werden kann.
LConf und Icinga Web haben wir um benutzerdefinierte Ansichten und Benachrichtigungen ergänzt. Zusätzlich zu den Autorisierungen des Active Directory mit Icinga Web ‘Cronk’ Widgets, gibt es jetzt auch individuell angepasste Ansichten, die jedem Teammitglied genau die passenden Hosts und Services anzeigen.
Wir haben das Ganze dann (natürlich mit der Zustimmung von Audi) unter GPLv2 der Weltöffentlichkeit (also eigentlich der Open Source Community) zur Verfügung gestellt, weil wir nicht nur saugute Umzugshelfer, sondern auch noch total nett sind.
Audi weitet das Icinga Monitoringsystem jetzt auch auf den Standort Győr in Ungarn aus. In den nächsten drei Jahren wird insgesamt voraussichtlich eine Verdopplung der aktuellen Umgebung von 50.000 Services erwartet – und wir helfen dabei natürlich wieder kräftig mit.
Und wer noch viel mehr zu unserer Arbeit bei Audi wissen möchte, der wird hier fündig.

LConf 1.3.0 released

LConf_LogoMan soll ja niemals nie sagen – nachdem ich bei einem unserer Kunden in den letzten Wochen verstärkt mit LConf Performance beschäftigt war, konnte ich neben LConf 1.2 Kennenlernen auch LConf 1.3 ausgiebig testen anhand von verschiedenen Produktivkonfigurationen und deren ausgeprägten Eigenheiten 😉
Dementsprechend ist es nun da – LConf 1.3.0 steht zum Download bereit.
Gleich vorweg – es hat sich auch im Vergleich zum 1.3RC noch einiges geändert, weswegen bei diesem Release auch verstärkt Augenmerk auf die Qualität der Dokumentation sowie Changelog inkl Upgrade Notes gelegt wurde. Es muss also zwingend das LDAP Schema sowie die config.pm angepasst (diff ist ein Freund) werden – das obligatorische slapdcat Backup nicht vergessen!
Weiters, neben den schon erwähnten vielen Features, sind die Releases so verschönert, dass Packaging um vielfaches einfacher wird (das betrifft auch inGraph, EventDB, etc) und wir auch gleich das Spec File für RPM Packages nativ mitliefern – oder auf Wunsch eigene Pakete für unsere Kunden bauen. Paketrepository dazu gibts ebenso bald. Ebenso gibt es in der Dokumentation einige neue Sektionen, u.a. für den LConf Template Tree, LConf Konfiguration, LConf TreeRwrite sowie mehr Details zu den Distributed Setups mit LConf.
Ein Auszug aus den Release Notes:

  • added functionality to rewrite attributes to linked trees
  • accelerated export function (using child processes)
  • add Slave Export based on ruleset, additional to existing script
  • due to many problems with vars hashrefs moved to real perl hashes
  • fixed many errors in LConfExport.pl and LConfSlaveExport.pl
  • added functionality to change values during LConfSlaveExport.pl
  • add attributes: display_name, notes, contactgroup_members, is_volatile, flap_threshold
  • add startTLS support
  • a lot of code cleanup
  • revamp configure/make, LConf can now be installed into FHS compliant paths
  • add a spec file for RPM packages

Die wichtigsten Änderungen:

  • perl module Parallel::ForkManager (>= 0.7.6) is needed
  • LConf*.pl scripts are moved into $prefix/bin by default
  • contrib/lconf_deploy.sh is renamed to contrib/LConfDeploy.sh
  • config options have been added/renamed. please consult doc/UPGRADING
  • lconfcheckcommand is deprecated. use lconf{host,service}checkcommand instead.

Zusätzlich zum LConf Backend gibt es auch neue Bugfix Releases der beiden LConf Frontends: LConf Standalone Web 1.3.0 sowie LConf für Icinga Web 1.3.2 🙂
Bitte beachten: Statt des Installers wird ab sofort configure/make verwendet, was eine leicht geänderte Installation mit sich führt. LConf für Icinga Web liefert ebenso ein aktualisiertes Spec File für RPM Packaging mit.
Wie üblich – Bug Reports und/oder Feature Requests bitte im Development Tracker erstellen (LConf Backend, LConf Standalone Web, LConf Icinga Web), sowie bei Fragen am besten im Forum vorbeischauen 🙂
 

Weekly Snap: LConf to Come, Coverage.py & Jenkins, DevOps

weekly snap29 April – 3 May turned over a new month with a LConf preview, Puppet course, video on DevOps and tip for Coverage Code and Jenkins.
Michael teased us with the new features to come in LConf while Johannes showed how to integrate coverage.py into Jenkins.
Lastly, Sebastian reflected on a successful 3-day training course he ran on Puppet in Cologne and Bernd shared a video on the history of DevOps.

Besser spät als nie …

LConf_LogoJa, es ist schon fast zu spät für einen Blogpost vor dem wohlverdienten Wochenende, aber Icinga 1.9 als Core Release Manager steht an, sowie auch Icinga2 vorankommen muss. Aber es gibt da noch ein Tool, was sich aktiv in der Entwicklung befindet – LConf.
Nicht zu verwechseln mit LConf für Icinga Web, dem schönen Web Interface mit komfortablen Features wie Drag&Drop. LConf ist ja eigentlich für einen grossen Kunden entwickelt worden, und erfreut sich seither wachsender Beliebtheit (was wohl auch daran liegt, dass man damit schöne Icinga Distributed Setups bauen kann, aber dazu später mehr).
Es gibt nun schon eine Weile das Release 1.3.0rc und neben den schon angesprochenen Performance Verbesserungen (und Templates in die Vererbung miteinbeziehen zu können) gibts noch einige Veränderungen, Fixes und Features die seither eingeflossen sind:

  • der Export der Konfiguration aus dem LDAP Baum kann nun (optional) durch Child Prozesse parallelisiert und damit beschleunigt werden. Der Defaultwert sind 2 Prozesse um den Monitoringserver nicht allzusehr zu stressen. Soll heissen, wenn man 24 Cores zur Verfügung hat, und LConf Export 12 Childs erlaubt, lässt sich ein 13000 Service Export auch mal ums 2,5fache verringern. Das ist also insbesondere in grossen Umgebungen interessant, und bringt neben der verminderten Anzahl an LDAP Abfragen im Vergleich zu 1.2 einen erheblichen Geschwindigkeitsvorteil.
  • beim Export lassen sich benutzerdefinierte Scripts ausführen. Dies wird zB dazu verwendet, um für jeden Host/Service eine Custom Variable mit der LDAP DN zu setzen, um dann später vom Service im Icinga Monitoring direkt in die LConf Baum Konfiguration zu springen. Diese Idee kann man aber noch weiterspinnen und eigene Custom Variablen und andere Attribute exportieren. Sinn macht das insbesondere für verteilte Umgebungen, wo man beispielsweise anhand von Servicenamensmustern dann Standortmuster erkennt und diese als Customvariable abspeichert. Neben der Scripts die die Slave Konfiguration beinflussen, gibt es jetzt auch eine mid-master.pl die lediglich die Master Konfiguration manipuliert (zB dort alle Checks als passiv setzt, o.ä.)
  • LConfSlaveSync als Checkresultsammler kann nun übrigens auch direkt das Icinga Checkresult Spooldir schreiben, um blockiert somit nicht die External Command Pipe. Die Option directIO ist auch in Zukunft so gesetzt.
  • Custom Variablen können nun verwendet werden, um dynamische Objektnamen zu generieren. Also beispielsweise wird die Service Custom Variable „_PORT 1337“ aus „http_$_SERVICEPORT$“ den sprechenden Namen „http_1337“ erzeugen. Was man da dank Vererbung im LDAP Baum dann alles anstellen kann….
  • der gewisse Mehrwert, den Software haben muss – Pakete die einfaches Installieren/Upgraden erlauben. Dementsprechend haben wir in schon in Kundenprojekten Pakete für LConf gebaut (und tun das auch (auf Anfrage) für all unsere Addons), und gleichzeitig auch notwendige Änderungen an der LConf Struktur vorgenommen. So sind etwa alle Scripts in bin/ installiert, während die Perl Module in lib/ ihren Platz finden, var/ und tmp/ dienen dem Export als Ablage und in etc/ findet sich die Konfiguration wieder. Die meisten Optionen sind nun via configure Parameter einstellbar – ich halte das ähnlich wie bei meinen Icinga RPMs – wenns mich nervt, bau ichs passend Upstream richtig. Das heisst also nun folgerichtig – auch LConf Pakete sind in Vorbereitung (auch LConf für Icinga Web ist entsprechend angepasst worden). 
  • Alle bisherigen Änderungen sind in doc/UPGRADING dokumentiert. Das betrifft auch Änderungen im Vergleich zur 1.3.0 RC.  alle Tester bitte vor der Installation konsultieren. Achja, wir unterwerfen uns gitflow, weswegen der brandaktuelle Entwicklungszweig auch immer im GIT Branch next (als Snapshot) zu finden ist 🙂

Die alles umfassende Frage – wann kommts denn nun? Nun, bald. Ob Juni realistisch ist, wage ich mal zu bezweifeln, aber die Hoffnung stirbt ja bekanntlich zuletzt. Feedback und Tester sind natürtlich jederzeit willkommen, um den Entwicklungsprozess zu beschleunigen! 😉
Für all jene die bis jetzt durchgehalten haben, noch ein kleines Anschauungsbeispiel wie man LConf in verteilten Umgebungen ebenso implementieren kann.
Folgendes Beispiel erkennt anhand des Musters „denu“ dass die deutsche Location „Nuernberg“ als Customvariable zu setzen ist, sofern der Hostname darauf passt. Um später auch die Services danach zu filtern, wird diese Customvariable direkt im Anschluss auch an diese vererbt. Das Script wird als mid.pl im Order custom/ abgelegt (kann via configure –with-export-script-dir angepasst werden).

sub CustomMid {
    my $changes = {
        'denu' => {
            '_LOCATION' => 'Nuernberg'
        }
    };
    my $CLIENTS = shift;
    foreach my $client (keys %{$CLIENTS}) {
        foreach my $hostChange (keys %{$changes}) {
            if ($CLIENTS->{$client}->{cn} =~ /$hostChange/) {
                foreach my $cv (keys %{$changes->{$hostChange}}) {
                    $CLIENTS->{$client}->{lconfhostcustomvar}->{$cv} = $changes->{$hostChange}->{$cv};
                }
            }
        }
        foreach my $cv (keys %{$CLIENTS->{$client}->{lconfhostcustomvar}}) {
            foreach my $service (keys %{$CLIENTS->{$client}->{SERVICES}}) {
                $CLIENTS->{$client}->{SERVICES}->{$service}->{lconfservicecustomvar}->{$cv} = $CLIENTS->{$client}->{lconfhostcustomvar}->{$cv};
            }
        }
    }
}

Diese Custom Variable könnte man nun als Auswahlkriterium sehen, dass auf dem Icinga Slave in Nürnberg all diese Host und Service Checks durchgeführt werden sollen (natürlich könnte man das auch via LCONF->EXPORT->MODIFY lösen, aber dieser Ansatz hier erlaubt freiere Baumstrukturen, die ich lieber mag 😉 ). Hier gibts lediglich ein Problem – LConfSlaveExport kann die Konfiguration nicht anhand von Attributsmustern für die Slaves aufsplitten. Also haben wir uns etwas neues überlegt – LConfSlaveExportRules übernimmt an dieser Stelle.
Folgende Konfiguration in etc/config.pm stellt sicher, dass alle Services mit dem Muster Nürnberg nur an den Slave Satelliten „satelite1.icinga“ exportiert werden. Neben den obligatorischen Einstellungen ‚rules‘ und ‚targets‘ kann man mittels ’settings‘ auch beinflussen, ob Parents und/oder Dependencies auf diesem Slave zum Tragen kommen sollen. Die Erfahrung hat gezeigt, dass zerschnittene Slavekonfiguration nicht für derartige Dinge taugt, und die Logik nur am Monitoring Master sinnvoll einzusetzen ist.

$cfg->{slaveexportrules} = {
   'rules' => {
       'service-rule1' => {
           'object' => 'lconfservice',
           'attribute' => 'lconfservicecustomvar',
           'pattern' => 'Nuernberg'
       },
},
   'targets' => {
       'satelite1.icinga' => {
           'targetDir' => '/etc/icinga/lconf',
           'rulemap' => 'service-rule1'
       },
   },
   'settings' => {
       'slaveexportparents' => 0,
       'slaveexportdependencies' => 0,
   },
};

Der Aufruf in LConfDeploy.sh könnte dann etwa so aussehen (anstatt der Verteilung durch LConfSlaveExport)

(cd $LCONFBINPATH ; $SUDOCOMMAND /usr/bin/LConfSlaveExportRules.pl -v )

Achja, die Custom Variablen kann man in Icinga Web übrigens auch für erweiterte Filter und ebenso Berechtigungen verwenden. Aber dazu ein andermal mehr.
Wie man LConf insbesondere in komplexen verteilten Umgebungen sinnvoll einsetzt, darüber wissen unsere Spezialisten im Consulting bestens Bescheid. Aber auch Schulungen mit dem optimalen Wissenstransfer sind hier nicht zu verachten, denn viele Dinge die LConf kann, zeigt und lernt man am besten persönlich 🙂

Schneller, schöner, besser: LConf 1.3


Wer sich unsere Software gerne tippfrisch aus den git Repositories zieht hat es vielleicht Bemerkt: In den letzten Monaten hat sich bei LConf, unserem LDAP-basierten Icinga/Nagios® Konfigurationstool einiges getan – sowohl im Backend als auch im Frontend. Heute freue ich mich, nach langer Arbeit die RC Version 1.3.0. bekanntgeben zu dürfen.
Alles unter Kontrolle – auch bei großen Setups: 
LConf erlaubt es dem Admin, sein Icinga (natürlich auch Nagios®) Setup grafisch auf einem LDAP Server zu verwalten und sich aus diesem Baum die Monitoringkonfiguration zu exportieren. Durch die Baumstruktur, Aliase und Vererbung lassen sich dabei auch sehr große Monitoring setups bequem und übersichtlich verwalten – und das ohne an ein bestimmtes Frontend zur Datenverwaltung gebunden zu sein.
LConf besteht dabei aus zwei unterschiedlichen Projekten:

  • Einmal dem eigentlichen LConf CLI-Tool, das Icinga Konfigurationen aus dem LDAP Baum erstellen und bestehende Konfigurationen in den LDAP Baum Importieren kann. Auch verteilte Setups können mit LConf erstellt und verwaltet werden. Die Verteilung der einzelnen Konfigurationen auf die Satelliten übernimmt dabei der Exporter selbst.
  • Und zusätzlich unserem (optionalen) Icinga-Web Modul, für alle die es noch bequemer wollen. LConf lässt sich mit zwar mit jedem beliebigen LDAP Editor (oder auch programmatisch von der Kommandozeile aus) bedienen, jedoch bietet das Icinga-Web Frontend einige LConf-spezifische Features, die einem die Verwaltung noch einfacher machen (z.B. besondere Suchfunktionen, Operationen über Verbindungen hinweg, Export der Konfiguration vom Frontend aus, etc. ). Zusätzlich gibt es noch LConf-Web – eine standalone Version die keine vorherige Icinga-Web Installation benötigt.

Das Frontend: Spezifische Dialoge für alle Objekttypen
Die auffälligste Neuerung in der Version 1.3 sind ( neben einer Menge Bugfixes) zahlreiche objektspezifische Dialoge, die einem bei der Konfiguration unterstützen. Jedes LConf spezifische Objekt hat jetzt eine eigene Eingabemaske, die einem bei der Arbeit unterstützt (wer lieber direkt mit den LDAP Attributen arbeitet, kann das jedoch immer noch).
Hier spare ich mir die Worte und lasse einige der neuen Dialoge für sich sprechen:
         
Zusätzlich gibt es natürlich die bewährten Features: Aliaserstellung/Aktualisierung, einfaches Arbeiten mit Drag&Drop, serverübergreifende Operationen, Export aus der Oberfläche, bequeme Filter- und Suchfunktionen, uvm.
Das Modul samt Doku und Bugtracker ist wie immer unter netways.org zu finden. Die Standalone Version vom LConf-Web ist derzeit noch in Bearbeitung, folgt aber in den nächsten Tagen.
Das Backend: Schneller und aufgeräumt
Im Backend hat Tobias zahlreichen Bugs den Garaus gemacht und nebenbei viel von der Codebasis aufgeräumt und umgeschrieben. Das Ergebnis kann sich sehen lassen: Neben kosmetischen Änderungen bietet Version 1.3 einen viel schnelleren Export und jetzt auch die Möglichkeit, Templates in die Vererbung mit einzubeziehen.
Obwohl letzteres wohl eines der gefragtesten Features im LConf ist, beeinflusst es doch das Ergebnis des Exportes stark. Aus diesem Grund ist das Feature standardmäßig Deaktiviert und die 1.3. Version als RC Version gekennzeichnet.
Das heisst: Die  Version ist zwar stabil, kann durch das ggf. andere Verhalten jedoch ein anderes Ergebnis als die Version 1.2 im Export liefern, sollte man das Vererbungsfeature Scharf schalten. Das sollte aber nicht vom Herunterladen und Verwenden abhalten (eher ermutigen!) – ein Blick in die Dokumentation schadet dabei aber nie.