SLA Reporting: Beta-Tester gesucht!

Icinga Availability ReportGute Neuigkeiten habe ich heute für Freunde von SLA Reports. Und natürlich auch für all jene, die die Anforderungen derjeniger ausbaden dürfen, die ebensolche Reports haben wollen. Ein neues Reporting-Package für Icinga ist auf dem Weg und steht unter dem Feature-Request #2972 “Proposal – new SLA reporting strategy” bereits in einer kleinen Vorschau zum Testen bereit.
Kern des Ganzen ist eine neue Funktion für die Datenbank, welche versucht die Komplexität des Themas vor den SQL-Abfragen die uns eigentlich interessieren zu verbergen. Um die Funktionsweise des Ganzen zu veranschaulichen, klaue ich am Besten meine Beispiel-Abfrage aus dem Feature-Request:

SELECT
  name1 AS host,
  COALESCE(name2, 'Host availability') AS service,
  icinga_availability(object_id, '2012-01-01 00:00:00', NOW()) AS sla
 FROM icinga_objects
WHERE is_active = 1
  AND objecttype_id IN (1, 2)
ORDER BY host, objecttype_id, service;

Das Ergebnis dieser einfachen Abfrage kann dann wie folgt aussehen:

host service sla
c1-db1 Host availability 91.5496
c1-db1 MySQL 91.5700
c1-db1 PING 91.5696
c1-db2 Host availability 91.5569
c1-db2 MySQL 100.0000
c1-db2 PING 91.5689

Jeder hat so seine eigenen Vorstellungen, wie sein SLA-Reporting ticken soll. Manche wollen Filter auf Hostgruppen-Ebene, andere per CustomVariable – und wieder andere werfen lieber gleich ein paar eigene Tabellen mit in die Query.
Auch speziellere Abfragen sind nun möglich, so z.B. jene nach allen Services, deren Verfügbarkeit im Juli besser als im Juni war. Und noch viel, viel mehr! Berücksichtigt werden jetzt auch Downtimes – was wunderbare Möglichkeiten zum nachträglichen “Feintunen” der SLA-Werte eröffnet.
Das Unterfangen war recht anspruchsvoll, und wurde durch kleinere Bugs in Icinga/IDO sowie älteren MySQL-Versionen nicht gerade erleichtert. Um möglichst viele Spezialfälle abdecken und korrekt behandeln zu können deshalb hier mein Appell: bitte runterladen und auf Herz und Nieren testen! Weiterführende Infos samt aller benötigten Komponenten finden sich im bereits erwähnten Icinga-Ticket.
Und jetzt viel Spaß damit – ich freue mich auf Feedback aller Art!

Thomas Gelf
Thomas Gelf
Principal Consultant

Der gebürtige Südtiroler Tom arbeitet als Principal Consultant für Systems Management bei NETWAYS und ist in der Regel immer auf Achse: Entweder vor Ort bei Kunden, als Trainer in unseren Schulungen oder privat beim Skifahren in seiner Heimatstadt Bozen. Neben Icinga und Nagios beschäftigt sich Tom vor allem mit Puppet.

Weekly Snap: OpenLDAP & Jasper Reports, OSMC Partners & Xsensior Sensors

22 – 26 August offered tips on Jasper Reports and OpenLDAP, introduced the OSMC partners and USB sensors for Windows.
To start the week, Pamela announced our partners for this year’s OSMC (Open Source Monitoring Conference). Linux Magazin, Admin Magazin and Thomas Krenn will support us again, while SuSE Linux will for the very first time.
From our hardware store, Martin introduced a simple environmental monitoring device for Windows. The Xsensior Lite USB temperature and humidity sensors come equipped with software to monitor up to 10 sensors displayed in tabs side by side. They can also export .csv metrics to other formats e.g. MS Excel, for further processing and can alert via email. With a USB extension, these simple sensors can also be set up a little further away.
Marius  then offered an easier way to prepare reports – with Jasper and SOAP. Alongside an interface to manage reports and their resources, JasperServer also exports its functionality via SOAP. Installation is easy – either the complete package or just the application can be deployed on a Tomcat server. Report templates can also be created with the report designer iReport, and transferred to the server. Marius showed how to format a report with PHP and recommended a bunch of other docs for more advice.
Finally, Philipp followed with his own 4-step how-to on extending OpenLDAP 2.4 schemas with cn=config.

JasperServer und SOAP

Sich eigene Reports oder sogar erweiterbare Reportframeworks zu schreiben ist mühsam und zeitaufwendig. Vor allem wenn es bereits gute Lösungen in dem Bereich gibt wie z.B. JasperServer. Neben einem eigenem Interface zur Verwaltung von Berichten und deren Ressourcen exportiert der Server gleichzeitig seine ganze Funktionalität durch SOAP nach außen. Die Installation geht mit wenigen Zeilen von statten. Entweder kann man sich ein Komplettpaket ziehen oder nur die Applikation welche auf einem Tomcat Server deployed werden muss.
Jasper Reports können mit einem Reportdesigner (iReport) erstellt werden und auf den Server übertragen werden. Danach können sie entweder direkt abgerufen werden oder zeitgesteuert per Mails verschickt werden.
Mit PHP und etwas gemogel kommt man relativ einfach zu seinem Report im gewünschten Format:

<?php
$jasper_wsdl = 'http://10.121.0.95:8080/jasperserver/services/repository?wsdl';
$client = new SOAPClient($jasper_wsdl, array (
        'login' => 'jasperadmin',
        'password' => 'jasperadmin',
        'trace' => true
));
$request = '<?xml version="1.0" encoding="UTF-8"?>
<request operationName="runReport" locale="en">
        <argument name="RUN_OUTPUT_FORMAT"><![CDATA[PDF]]></argument>
        <resourceDescriptor name="" wsType="" uriString="/Icinga/reports/host.overview" isNew="false">
                <label>null</label>
                <parameter name="p_host_object_id"><![CDATA[1]]></parameter>
        </resourceDescriptor>
</request>';
// Rückgabe ist nicht XML sondern multipart
try {
 $re = $client->runReport($request);
} catch (SOAPFault $e) {
        if ($e->getMessage() !== 'looks like we got no XML document') {
                throw $e;
        }
}
$headers = $client->__getLastResponseHeaders();
$m = array();
// Splitten der Ausgabe und finden des reports
if (preg_match('/boundary="([^"]+)"/', $headers, $m)) {
        $content = explode('--'. $m[1], $client->__getLastResponse());
        foreach ($content as $part) {
                if (strpos($part, 'Content-Id: <report>')!==false) {
                        list($header, $content) = explode("\r\n\r\n", $part);
                        file_put_contents('report.pdf', $content);
                        break;
                }
        }
}

Die Antworten vom Jasper sind MIME multipart/related weshalb man den nativen PHP Soap Client etwas austricken und die die Inhalte zusammensuchen muss.
Der Webservice ist übrigens hervorragend dokumentiert.

Marius Hein
Marius Hein
Head of Development

Marius Hein ist schon seit 2003 bei NETWAYS. Er hat hier seine Ausbildung zum Fachinformatiker absolviert, dann als Application Developer gearbeitet und ist nun Leiter der Softwareentwicklung. Ausserdem ist er Mitglied im Icinga Team und verantwortet dort das Icinga Web.

Jasper Reporting – Upload des Reports

Jasper-ReportingUm den im letzten Post erstellten Bericht auch anderen Anwendern zur Verfügung zu stellen, muss dieser auf den Server geladen werden. Der Upload kann entweder über das Webinterface oder was aus meiner Sicht komfortabler ist, über iReport erfolgen. Der Upload erfolgt via HTTP und ist somit auch gut über Firewallgrenzen hinweg durchführbar.
Wir starten mit der Anlage einer neuen Serververbindungpost4_screen1. Hierfür wird lediglich die URL des Servers sowie Username und Passwort des berechtigten Benutzers benötigt. Default-User des JasperServers ist jasperadmin mit gleichlautendem Passwort.
Nach Speicherung kann sofort auf die Ordner des Servers zugegriffen und entsprechende Aktionen via Kontextmenü ausgeführt werden.
post4_screen2
So erfolgt dann auch gleich die Anlage der neuen Report-Unit, was den logischen Container des Reports mit Bildern, Datenbankverbindung und möglichen Parametern beschreibt.
Zur Angabe des Report Namens und einer möglichen Beschreibung muss noch die entsprechende Datenbankverbindung konfiguriert werden. Hier besteht die Möglichkeit eine bereits im Repository definierte Verbindung auszuwählen oder entsprechend anzulegen. Für den Test empfiehlt sich die Anlage einer eigenen Verbindung durch Kopie der lokalen Einstellungen.
post4_screen3
Nach Speicherung des Reports ist dieser sofort im Webinterface sichtbar und kann dort via Klick gestartet werden. Hier kann das Ergebnis als PDF heruntergeladen werden.
Der nächste Post widmet sich der optischen Verschönerung des Reports um ihn auch für die Weitergabe an Dritte fit zu machen.

Bernd Erk
Bernd Erk
CEO

Bernd ist Geschäftsführer der NETWAYS Gruppe und verantwortet die Strategie und das Tagesgeschäft. Bei NETWAYS kümmert er sich eigentlich um alles, was andere nicht machen wollen oder können (meistens eher wollen). Darüber hinaus startet er das wöchentliche Lexware-Backup und investiert seine ganze Energie in den Rest der Truppe und versucht für kollektives Glück zu sorgen. In seiner Freizeit macht er mit sinnlosen Ideen seine Frau verrückt und verbündet sich dafür mit seinem Sohn.