Auferstanden aus Ruinen

Frohe Weihnachten zusammen. Ich hoffe mal, dass alle die Feierlichkeiten gut überstanden haben. Heute, am 2. Weihnachtstag ist für die meisten ja nur noch Entspannung und evenutell ein Familienbesuch eingeplant. Der Titel dieses Artikels soll jedoch keineswegs bedeuten, dass die angesprochenen Ruinen die eigene Gesundheit oder die Diät-Ziele eines vergangenen Sylvesters verkörpern. Viel mehr möchte ich euch heute ein Tool vorstellen, mit dem man wahlweise solange automatisch auf neue Angebote und Sylvester-Special prüft bis der e-shop kaputt ist oder eben genau dieses fachgerecht überprüft um nicht nächstes Jahr wieder an Heiligabend einen support-call zu bekommen, nur weil der tomcat sich mal wieder mit Speicher vollgezogen hat und eigentlich gerade eh neu gestartet wurde.

Casper, der freundliche Geist

Eine Lösung erster Wahl um end2end testing zu realisieren hat mein Kollege Markus Frosch vor einiger Zeit schon mal vorgestellt. Diese heißt CasperJS, mit Hilfe dessen man Tests und vieles mehr auf den headless Browsern wie PhantomJS oder SlimerJS ausführen kann.

Record . . .

Wer keine Lust, Zeit, Muße oder Können bestizt um solche Tests zu schreiben kann den Casper mit Hilfe von Resurrectio steuern. Resurrectio bedeutet zu deutsch ‘wiederauferstehen’ und ist ein AddOn für den Browser Chrome. Man bekommt ihn im Google Web Store und kann anschließend auf einer beliebigen Seite seine Aktionen aufnehmen, Tests definieren und das ganze als casperJS Skript exportieren.

. . . Plug-In and Replay

Diese Skripte kann man jetzt einfach auf seinen Monitoring Server werfen und einbinden. In der letzten Woche vor Weihnachten durfte ich bei einem sehr freundlichen Kunden ein neues Plugin zu diesem Thema schreiben. Das Plugin selber ist in Perl geschrieben und steht auf auf git.netways.org oder bei icingaexchange.org zum Download bereit. Es setzt ein funktionierendes CasperJS voraus und sorgt selbst lediglich dafür, dass das durch caspjerJS exportierte XML-Files ausgewertet und an Icinga gemeldet werden.

Christoph Niemann
Christoph Niemann
Senior Consultant

Christoph hat bei uns im Bereich Managed Service begonnen und sich dort intensiv mit dem internen Monitoring auseinandergesetzt. Seit 2011 ist er nun im Consulting aktiv und unterstützt unsere Kunden vor Ort bei größeren Monitoring-Projekten und PERL-Developer-Hells.

End2End Monitoring mit CasperJS

CasperJS LogoWas ist eigentlich dieses End2End Monitoring? Während viele Nutzer von Icinga haarklein jede Ecke ihrer IT-Landschaft überwachen, und sofort merken sollten wenn ein Dienst ausfällt oder ein Dateisystem voll läuft, werden Funktionstests aus der Endbenutzer-Sicht oft vernachlässigt.
Hier bietet CasperJS einen netten Funktionsrahmen um solche Tests für Webseiten einfach zu machen und z.B. den Inhalt zu prüfen oder mit der Webseite zu interagieren.
Ein kleiner Auszug der Funktionen von Casper:

  • Navigations-Schritte definieren und abarbeiten
  • Formulare ausfüllen und absenden
  • Interaktion mit der Webseite (Buttons und Links)
  • Screenshots zu jedem Zeitpunkt
  • Javascript Code im Context der Webseite (DOM) ausführen
  • Test Funktionen für den Inhalt der Webseite

Den Kern hinter Casper bildet dabei das Browser-Framework PhantomJS, dass einen Webkit Browser simuliert den man über Javascript steuern kann. Der große Unterschied zu einem echten Browser ist nur dass PhantomJS keinerlei Frontend bietet, alles geschieht im Hintergrund, und erfordert somit auch keine Desktop Oberfläche. Als Alternative lässt sich auch SlimerJS nutzen, was einen ähnlichen Funktionsumfang wie Phantom bietet, aber auf der Firefox Engine (Gecko) basiert.
Beide Tools liefern eine komplette Javascript API um den Browser zu steuern, was Casper beisteuert sind viele Hilfsfunktionen, die man sich sonst selbst schreiben müsste.
Aber wie sieht so ein CasperJS Skript eigentlich aus? Hier ein einfaches Beispiel:

/*
 * Webseite www.netways.de
 */
var url = 'http://www.netways.de';
casper.test.begin('NETWAYS.de', 4, function suite(test) {
  casper.start(url, function() {
    test.assertHttpStatus(200, "HTTP Request erfolgreich");
    test.assertUrlMatch(url, "auf der richtigen Webseite");
    test.assertTitleMatch(/NETWAYS/, "Titel der Webseite");
    test.assertExists('a[href="de/info/jobs/"]', 'Link auf Jobs');
  });
  casper.run(function() {
    test.done();
  });
});

Das Ergebnis auf der Kommandozeile sieht dann so aus:
CasperJS www.netways.de
Für einen Kunden integriere ich gerade CasperJS in Icinga, damit man zum einen die Ergebnisse melden, als auch Performancedaten sammeln und auswerten kann. Ich werde berichten sobald es etwas herzeigbares gibt!
Für alle die gerne jetzt, oder am Wochenende, mit CasperJS erste Gehversuche machen folgen noch ein paar Links. Am besten sollte man mit der Beta Version testen – dort sind viele neue Funktionen enthalten.
Weiterführende Links

P.S. Unsere Stellenanzeigen sollte man übrigens wirklich mal “von Hand” checken, Automatisierung ist nicht für alles gut…

Markus Frosch
Markus Frosch
Principal Consultant

Markus arbeitet bei NETWAYS als Principal Consultant und unterstützt Kunden bei der Implementierung von Nagios, Icinga und anderen Open Source Systems Management Tools. Neben seiner beruflichen Tätigkeit ist Markus aktiver Mitarbeiter im Debian Projekt.

end-2-end monitoring mit watir-webdriver und headless

Schon häufiger wurde hier im Blog end 2 end monitoring behandelt, z.B. auto-it, webinject.
Das rubygem watir-webdriver ist ein weiteres tool aus diesem Bereich. Mit Ihm kann man Webseiten abrufen, auf Elemente überprüfen und Aktionen ausführen. Das besondere am watir-webdriver ist, dass er einen echten Browser zum simulieren der Verbindung nutzt.
Auf einem Linux Server ohne GUI schön und gut könnte man sich jetzt denken, doch mit gem headless und Xvfb kann man seinen Browser auch ohne GUI nutzen.
Im folgenden Beispiel zeige ich die Funktionsweise von watir. Als System dient mir ein debian wheezy

Vorbereitung

Als Voraussetzung braucht man folgende Pakete

aptitude install rubygems curl xvfb

Unter debian installiert an jetzt iceweasel, unter anderen distros wohl eher firefox. Chrome sollte auch funktionieren (und safari auf dem mac)

aptitude install iceweasel

Ich empfehle ruby mit rvm zu verwalten. Dann kann man zwischen verschiedenen Projekten und ruby Versionen einfach hin und her springen.

curl -L http://get.rvm.io | bash -s stable
# su -
rvm install 1.9.3
rvm use ruby 1.9.3@watir --create

Projektverzeichnis anlegen und Gemset für dieses Verzeichnis festlegen

mkdir check_watir
cd $_
rvm use @watir --ruby-version

Ein Gemfile erleichtert es einem die plugins auf andere Server zu kopieren. Nach einem “bundle” stehen dort wieder alle gems zur verfügung.

vim Gemfile
source 'https://rubygems.org'
gem 'watir-webdriver'
gem 'headless'
bundle

Erster Test im irb

Um die Funktionalität von watir ersteinmal auszuprobieren bietet es sich an irb zu benutzen.

irb
1.9.3p194 :001 > require 'watir-webdriver'
 => true
1.9.3p194 :002 > require 'headless'
 => true
1.9.3p194 :003 > headless = Headless.new
 => #
1.9.3p194 :004 > headless.start
 => #
1.9.3p194 :005 > b = Watir::Browser.start 'www.google.com'
 => #
1.9.3p194 :006 > b.text_field(:name => 'q').set("Icinga Monitoring")
 => ""
1.9.3p194 :007 > b.button(:name => 'btnG').click
 => []
1.9.3p194 :008 > b.a(:text => 'Home - Icinga: Open Source Monitoring').exists?
 => true
1.9.3p194 :013 > quit

Ein echtes plugin

Dieses Plugin geht zuerst auf www.netways.de. Dort sucht es den Link ‘Shop’ und klickt diesen an; sucht anschließend den Link Warenkorb, klickt diesen und überprüft ob der Warenkorb leer ist.
(mehr …)

Christoph Niemann
Christoph Niemann
Senior Consultant

Christoph hat bei uns im Bereich Managed Service begonnen und sich dort intensiv mit dem internen Monitoring auseinandergesetzt. Seit 2011 ist er nun im Consulting aktiv und unterstützt unsere Kunden vor Ort bei größeren Monitoring-Projekten und PERL-Developer-Hells.

OSMC 2013: Der Countdown läuft – nur noch 92 Tage

Simon Meggle erhellt uns heute, in unserem Countdown zur OSMC 2013, mit seinem Vortrag “End2End-Monitoring von Webapplikationen mit SAHI“.
 

 
 

OSMC? Was soll das denn sein und wer sind die netten Menschen in diesen Videos?Die Open Source Monitoring Conference (kurz: OSMC) ist die internationale Plattform für alle an Open Source Monitoring Lösungen Interessierten, speziell Nagios und Icinga. Jedes Jahr gibt es hier die Möglichkeit sein Wissen über freie Monitoringsysteme zu erweitern und sich mit anderen Anwendern auszutauschen. Die Konferenz richtet sich besonders an IT-Verantwortliche aus den Bereichen System- und Netzwerkadministration, Entwicklung und IT-Management. Und die netten Menschen, die Ihr in unseren Videos zur OSMC seht, gehören dazu. 2013 wird die OSMC zum 8. Mal in Nürnberg stattfinden.

Die Geister, die ich rief…

Wie der Zauberlehrling kam ich mir vor als ich beim Kunden AutoIT für End2End-Monitoring nutzen wollte. AutoIT hatte ich davor nur für kleine Automatisierungen genutzt, war mir der Macht dieses Werkzeugs aber durchaus bewusst. Wie schick es ist diese auch für Monitoring zu nutzen liegt auf der Hand. Auch Kollegen haben davon schon berichtet und es wurden sogar ganze Vorträge darüber gehalten.
Die Automatisierung hat auch schnell geklappt und wenn die Programme ausgeführt wurden bewegte sich alles wie von Geisterhand. Die Ausgabe hat auch gefallen. Damit kommt der Punkt, alles so einzubinden wie es am Ende laufen soll und nun fingen meine Probleme an.
Diese will ich im folgenden einfach auflisten, vielleicht hilft es dem ein oder anderen, vielleicht hat ja noch jemand eine schlauere Lösung über die ich mich natürlich auch freue.
Mein erstes Problem waren die Möglichkeiten die WindowsXP einem Dienst zugesteht. Hier kann ich nur einem Dienst erlauben mit dem Desktop zu interagieren wenn er als lokaler System-Account läuft. Aber wenn das Programm aufgrund des SingleSignOn als ein anderer Benutzer laufen muss und die Meldung in einem Fenster auf dem Desktop erkennen soll? Alle Versuche mit RunAs scheiterten. Die Funktion in AutoIT hatte ein etwas anderes Verhalten der Anwendung zur Folge, ein Wrapperscript mit dem Windows-Kommando benötigt ein Passwort und alternative Werkzeuge verhinderten die Konsolen-Ausgabe.
Ein weiteres war das unterschiedliche Verhalten des NSClient (oder auch wieder von WindowsXP), ob nun das Programm direkt als .exe aufgerufen wurde oder ob eine .bat um den Aufruf des Programms herumgestrickt wurde. Zusätzlich änderte sich dieses Verhalten auch damit als welcher Benutzer der Dienst gestartet wurde und ob der NSClient zum Debugging im Vordergrund gestartet wurde.
Ein seltsames Phänomen, welches ich so nebenbei entdeckt hatte, war die Namensauflösung. Ohne Eintrag in der hosts-Datei war der Verbindungsaufbau extrem langsam wie ich schon beim Entwickeln festgestellt hatte. Lief der Check des Weblogins mittels Internet Explorer nun als System-Benutzer wurde wohl dieser Eintrag ignoriert, weshalb dieser regelmäßig in einen Timeout lief.
Diese Probleme hab ich dann im Kollektiv dadurch gelöst, dass ich meinen Benutzer für das End2End-Monitoring automatisch anmelde und den NSClient mit /test im Vordergrund starte.
Dazu kam dann noch das Problem, bei dem ich kurz davor war mit dem Lösungsweg des Zauberlehring zu liebäugeln. Ich mein damit “Mit dem scharfen Beile spalten”, höhere Mächte um Hilfe anflehen soweit war ich dann doch nicht. Da mir keine Konsole zur Verfügung stand, hatte ich mich mittels Remotedesktop auf den Client verbunden. Schau ich nun also per Remotedesktop den Geistern zu sind sie ganz brav und tun ihre Arbeit. Kaum hab ich die Sitzung minimiert oder geschlossen, bekomme ich je nach Skript unterschiedlichstes Verhalten. Der Weblogin im Internet Explorer funktioniert weiterhin, der Aufruf des Fatclients scheitert an den Fenstern und der Thinclient an der Erkennung der Meldung. Beim Versuch das Problem zu lösen, bin ich darüber gestolpert das AutoIT statt mit Titeln auch mit Handles arbeiten kann, was so mehr oder weniger gut in der Dokumentation versteckt war. Nachdem Umschreiben war wenigstens das Verhalten von Fatclient und Thinclient gleich. Dumm nur dass dies bedeutet gleich fehlerhaft!
Immer wieder auf Foreneinträge, Bugreports und auch hilfreiche Kollegen gestoßen, die nahelegten dass Remotedesktop das Verhalten von Fenstern unter WindowsXP stark verändern kann, kam ich mit dem Kunden überein eine Konsolensitzung zu brauchen. Mit der internen Standardlösung für Remotesupport ausgestattet und den Remotedesktop beendet, funktioniert alles plötzlich wie gewollt. Somit ist klar kein AutoIT mit Remotedesktop! Schlussendlich mussten die Geister nicht in die Ecke verbannt werden und Icinga ruft sie nun ganz wie der alte Meister zu seinem Zwecke und weiß nun dass der Benutzer auch wirklich seine Anwendungen benutzen kann.

Dirk Götz
Dirk Götz
Senior Consultant

Dirk ist Red Hat Spezialist und arbeitet bei NETWAYS im Bereich Consulting für Icinga, Puppet, Ansible, Foreman und andere Systems-Management-Lösungen. Früher war er bei einem Träger der gesetzlichen Rentenversicherung als Senior Administrator beschäftigt und auch für die Ausbildung der Azubis verantwortlich wie nun bei NETWAYS.

End2End Monitoring mit AutoIt

Es stellt sich uns immer wieder die Frage, wie man mit Nagios End2End Monitoring realisieren kann.
AutoIt ist hier eine flexible Lösung um Benutzeraktionen 1 zu 1 durch ein Script nachzustellen und die Überwachungsergebnisse an Nagios zu übermitteln.
AutoIt wurde ursprünglich für die automatisierte Installation von Programmen und das Konfigurieren von PCs entwickelt (Makrosprache für die GUI). Nach und nach wurde AutoIt zu einer umfangreichen Sprache in der komplexe Ausdrücke, Benutzerfunktionen, Schleifen, und vieles mehr verwirklicht werden können.
Im Zusammenspiel mit Nagios und NSClient++ (für die Windowsüberwachung) kann man so komplexe Abläufe überwachen oder aber auch Durchlaufzeiten bestimmter Applikationen (z.B.: Terminalserver oder SapGui login, Webshop Bestellungen, …) protokollieren.
Das von uns entwickelte Plugin check_autoit ermöglicht die parametrisierte Ausführung von entsprechenden Makros und die Interpretation der Ergebnisse in Nagios. Wie immer steht das Plugin unter GPL und auf NagiosExchange zum Download bereit