Herzlich willkommen auf dem Blog der exensio GmbH

exensio ist ein unabhängiges Software-Unternehmen von erfahrenen IT Beratern und Architekten. Zu unseren Kunden zählen namhafte deutsche Großunternehmen.

exensio verbessert das Kommunikations- und Informationsmanagement von Unternehmen. Auf Basis sinnvoller und zweckmäßiger Technologien erarbeiten wir flexible und übergreifende Lösungen für webbasierte Informationssysteme. Abhängig von den Kundenanforderungen realisieren wir Web Applikationen sowie Lösungen auf Basis von Web Content Management- und Portalsystemen. Integrativ, wirtschaftlich und anwenderfreundlich!

Hier gelangen Sie zur exensio GmbH.

Dienstag, 21. Juli 2015

Qlik Sense Desktop stellt nicht alle Geo-Daten auf einer Karte dar

Hier eine kurze Information, falls man bei der Darstellung nicht die erwarteten Werte - die aber eine Pivot-Tabelle enthält - auf der Landkarte wiederfindet. Ich hatte aktuell das Problem und dachte zunächst, dass es an der falschen Berechnung der Geo-Koordinaten mithilfe von »GeoMakePoint(latitude,longitude) as Location« liegt. Mir ist schließlich die Notiz »Zurzeit wird nur ein beschränkter Datensatz angezeigt« aufgefallen. Eine Internet-Recherche ergab letztlich, dass die Karte bei Qlik Sense maximal 1000 Daten-Punkte [1] darstellen kann.


Links

[1] https://community.qlik.com/thread/170133

Mittwoch, 15. Juli 2015

Datenanalyse mit Qlik Sense Desktop statt Excel

In diesem Blog-Post möchte ich kurz aufzeigen, welche Möglichkeiten es mit dem kostenlos herunterzuladenden Qlik Sense Desktop gibt [1]. Als Beispiel wurden die Neuanmeldungen einer Webseite (bspw. Shop) analysiert und in welchen Regionen diese stattgefunden haben. Hierzu wurden die Daten auf einer Karte visualisert.

Import

Hierzu in der Dropdown-Box den Datenmanager aufrufen. An dieser Stelle können Excel-, CSV-Dateien geladen bzw. auf eine Datenbank per ODBC zugriffen werden. Man sollte hier überlegen, ob man besser gleich bspw. ein Python-Skript für das Laden der Daten in Form einer CSV-Datei benutzt. Qlik Sense bietet auch ETL-Funktionen an, jedoch hat man nicht so viele Freiheitsgrade. So habe ich beispielsweise die Latitude (Breitengrad) und Longitude (Längengrad der Geo-Koordinaten) innerhalb des Python-Skripts angereichert und Qlik Sense innerhalb des CSV-Files zur Verfpgung gestellt. Ich habe (siehe Bild unten) dann nur noch die Befehle Year, Month, Day, Dual (Berechnung Quartal) und GeoMakePoint für die Kartendarstellung angewendet. Das Lade-Script von Qlik Sense kann über die Drop-Box Dateneditor aufgerufen werden.

Drop-Down-Box
Datenmanager
Dateneditor

Analyse

Die Analysen heißen Apps bei Qlik Sense und werden mithilfe des entsprechenden Menüs gewählt bzw. initial erzeugt. Es stehen dem Analysten Balken-, Kreis-, Kombi-, Linien- und Punktdiagramme zur Verfügung. Des Weiteren gibt es auch noch eine Baumkarte (Treemap), Karte (Map), KPI, etc. Als Tabelle kann der User eine einfache oder eine Pivot-Tabelle benutzen. Bei der Pivot-Tabelle ist anzumerken, dass die Dimensionen per Drag-and-drop mühelos verschoben werden können. Dies stellt ein mächtiges Werkzeug bei der Auswertung dar. Weiterhin finde ich die Möglichkeit, Daten auf einer Landkarte zu visualisieren, ausgesprochen gelungen umgesetzt.


Pivot-Tabelle unten / Treemap rechts oben

Kartendarstellung mit Filter auf rechter Seite

Tipp

Die Angaben zu Längen- und Breitengrad müssen ein Komma und keinen Punkt enthalten, so wie diese Angaben ("53,53811330000001";"7,944259100000001"). Falls ein Punkt verwendet wird, liefert die Qlik Sense Funktion GeoMakePoint() keine Ergebnisse.

Fazit

Für die Auswertung von Daten stellt Qlik Sense mächtige Funktionen zur Verfügung, ohne Programmieren zu müssen. Für die Aufbereitung der Daten scheint mir ein extern erstelltes Skript sinnvoller zu sein. Dies gilt insbesonders wenn man die Daten mit der Latitude und Longitude zur Kartendarstellung anreichern will.

Links

[1] http://www.qlik.com/de/explore/products/sense/desktop

Freitag, 10. Juli 2015

Logstash Grok Muster online für den Elasticsearch (ELK) Stack prüfen

In diesem Posting geht es um die online Überprüfung von Mustern für den Logstash Filter Grok.

Einführung

Mit dem ELK Stack [1], bestehend aus Elasticsearch, Logstash und Kibana, lassen sich Logdateien prima analysieren. Logstash verwendet dafür unter anderem den Filter Grok [2], ein Tool das bei der Analyse von unstrukturiertem Text hilfreich ist. Dem Filter wird dabei der zu analysierende Text (message) übergeben. Grok wendet auf die message eine zuvor definierte Folge von Grok Mustern an. Falls die message und die Folge von Mustern übereinstimmen, also falls beide matchen, gibt der Filter den zu jedem Muster gefundenen Wert in strukturierter Weise zurück.

Passt das Muster?

Bei einer message kann es sich dabei um einzelne Zeilen einer Logdatei handeln oder z. B. auch um Ausgaben einer SQL-Abfrage einer Datenbank. Die message kann auch mehrzeilig sein. Die Schwierigkeit beim Grok Filter besteht darin, eine zur jeweiligen message passende Folge von Grok Mustern zu finden. Logstash enthält bereits standardmässig eine große Anzahl von Grok Mustern, die beliebig kombiniert und erweitert werden können. Zuerst betrachtet man den zu analysierenden unstrukturierten Text und überlegt sich, welche Grok Muster darauf anzuwenden sein könnten. Unser Beispieltext stammt von einer SQL-Abfrage:
id:123,datumAbruf:2015-07-07 10:30:00,shopName:myShop,shopUrl:http://www.myshop.de,artikelIdentifikation:123-de

Bei der ersten Betrachtung der message fällt auf, die einzelnen Werte sind durch ein Komma getrennt. Außerdem scheint es sich um Key-Value-Paare zu handeln. Unsere Folge von Grok Mustern könnte also wie folgt aussehen:
id:%{NUMBER:id:int},datumAbruf:%{TIMESTAMP_ISO8601:datumAbruf},shopName:%{USERNAME:shopName},shopUrl:%{URI:shopUrl},artikelIdentifikation:%{GREEDYDATA:artikelIdentifikation}

Möchte man testen, ob die gefundene Folge von Grok Mustern auf die message anwendbar ist, so kann man dafür Logstash im agent Modus starten. Der Grok Filter wird dabei in der Konfigurationsdatei logstash.conf angegeben:
sudo -u logstash /opt/logstash/bin/logstash agent --verbose -f /etc/logstash/conf.d/logstash.conf

Falls die Grok Muster Folge nicht auf die Nachricht anwendbar ist, fügt logstash den Typ _grokparsefailure hinzu. Dieses Vorgehen ist langwierig, denn bei jedem Versuch muss zuerst Logstash gestartet werden, was einige Sekunden in Anspruch nimmt. Viel besser geeignet ist die Matcher Funktion [3] von Grok Constructor. Dabei handelt es sich um eine Art online Logstash. Die Webseite bietet ein Textfeld, in das man den unstrukturierten Text eingibt. Darunter kann man die zu testende Grok Muster Folge eingeben und danach die Logstash Bibliotheken definieren, die für die Analyse verwendet werden sollen.
Matcher mit Nachricht und Folge von Grok Mustern
Die Überprüfung der Grok Muster Folge wird gestartet durch Klick auf den Go!-Knopf. Die Seite präsentiert das Ergebnis der Überprüfung am unteren Ende.
Ergebnis der Grok Überprüfung

Weitere Funktionen

Neben Matcher bietet die Seite noch zwei weitere Funktionen. Mit Incremental Construction steht eine Art Assistent zur Verfügung, der Schritt für Schritt durch den zu analysierenden Text führt und Vorschläge für mögliche Grok Muster Folgen macht. Der Assistent funktioniert gut und vereinfacht das Finden von passenden Grok Muster Folgen. Allerdings stößt man schnell an die Grenzen der Funktion, wenn man z. B. mit Freitext zu tun hat. Die folgende Grok Muster Folge wurde mit der Incremental Construction Funktion ermittelt:
id:%{BASE10NUM:id},datumAbruf:%{TIMESTAMP_ISO8601:datumAbruf},shopName:%{HOST:shopName},shopUrl:%{URI:shopUrl},artikelIdentifikation:%{GREEDYDATA:artikelIdentifikation}

Diese Folge von Mustern ist zwar auf unseren Beispieltext anwendbar. Sobald aber beispielsweise der Shop-Name ein Leerzeichen enthält ("Mein Shop"), schlägt das Matching fehl. Musterfolgen, die mit der Incremental Construction Funktion ermittelt wurden, dienen zwar als guter Anhaltspunkt, müssen aber nachkontrolliert werden.

Die zweite Funktion der Seite heißt Automatic Construction und generiert nach dem Prinzip der Permutation alle möglichen Musterfolgen. Das (auf die Top 200 Folgen eingeschränkte) Ergebnis ist allerdings nicht wirklich für die weitere Verwendung geeignet.

Fazit

Mit der Matcher Funktion der Webseite Grok Constructor lässt sich schnell und einfach eine Folge von Grok Mustern finden und überprüfen, ob sie auf einen Beispieltext anwendbar ist.

Links

[1] ELK Stack
[2] Grok
[3] Matcher

Java Forum Stuttgart 2015

Gestern fand dass 18. Java Forum Stuttgart statt und wir waren auch wieder dabei. Dieses Mal zu dritt, aber ohne Vortrag wie in 2013 (Vortrag in 2013: Enterprise 2.0 Portale mit Grails. Geht das?).

Spannende Vorträge

Das Themenfeld war bunt gemischt und so war bei sieben parallel ablaufenden Tracks für jeden Geschmack ein Vortrag vorhanden.
Ich persönlich fand besonders die Vorträge "Java als Integrationslösung in einer gewachsenen Anwendungslandschaft" und "Hack that website!" sehr unterhaltsam und lehrreich. Vor allem die Vorstellung der Tool-Sammlung in "Hack that website!" in Form der Linux-Distribution Kali Linux blieb mir in Erinnerung. Anschaulich wurde gezeigt, wie einfach es mit den entsprechenden Tools mittlerweile ist, Sicherheitslücken in Webseiten automatisch aufzuspüren und auch gleich auszunutzen. So wurde beispielsweise in wenigen Sekunden über eine SQL-Injection-Lücke die Benutzer-Tabelle der dahinterliegenden MySQL-Datenbank exportiert; den integrierten Abgleich der gehashten Passwörter mit einer Datenbank von MD5 Hashes gab's inklusive. Das Fazit waren Benutzerdaten mit Klartextpasswörtern in unter einer Minute.

Meinen Kollegen hatten es zudem die Möglichkeiten im SmartHome-Sektor und die Vorstellung von Vert.x angetan.

JFS 2015: Ein gelungener Tag im schönen Stuttgart

Freitag, 3. Juli 2015

Lancom Router per SNMP überwachen

Dieses Posting erklärt, wie man eine Management Information Base (MIB) eines Lancom Routers auf einem Linux Server für die Überwachung per SNMP installiert.

Problemstellung

Ein Router des Herstellers Lancom hat immer wieder Performance Probleme und soll deshalb automatisch überwacht werden. Der Router unterstützt das Simple Network Management Protocol SNMP [1], worüber alle relevanten Informationen des Routers ausgelesen werden können. Für die Überwachung soll nicht das vom Hersteller angebotene Tool SNMP Monitor verwendet werden, sondern der sowieso vorhandene Monitoring Server mit der Open Monitoring Distribution (OMD) [2].

Lancom verwendet in seinen Routern neben den Managed Objects der Internet Assigned Numbers Authority (IANA) und der Internet Engineering Task Force (IETF) auch eigene Managed Objects. Die dafür nötige Management Information Base (MIB) kann man direkt aus dem Router beziehen. In diesem Knowledge Base Eintrag [3] mit dem Titel "SNMP und MIB" wird beschrieben, wie man die MIB erhalten kann.

MIB installieren

Der Monitoring Server läuft unter Ubuntu precise (12.04.4 LTS) und die MIBs der IANA und IETF wurden bereits installiert. MIBs befinden sich bei Ubuntu im Verzeichnis "/usr/share/mibs". Für die neue MIB von Lancom wird das Verzeichnis "lcos" angelegt und anschließend die MIB vom Router dorthin kopiert:
sudo mkdir /usr/share/mibs/lcos
sudo cp LC-UNIFIED-LCOS-9-00-REL-OIDS.mib /var/lib/mibs/lcos/LC-UNIFIED-LCOS-9-00-REL-OIDS
Abschließend muss die SNMP Konfigurationsdatei bearbeitet werden:
sudo vi /etc/snmp/snmp.conf
In die Datei fügt man folgende Zeilen am Ende an:
mibdirs +/usr/share/mibs/lcos
mibs +LCOS-MIB
Nach einem Neustart des SNMP Dienstes stehen die neu importierten Managed Objects für Abfragen zur Verfügung.
sudo service snmpd restart

Beispiel

Um die neue MIB zu prüfen, bieten sich beispielsweise folgende Abfragen an:
Informationen und Details über die gesamte Menge an Arbeitsspeicher des Routers:
user@omd $ snmptranslate -Td -OS LCOS-MIB::lcsStatusHardwareInfoTotalMemoryKbytesLCOS-MIB::lcsStatusHardwareInfoTotalMemoryKbytes
LCOS-MIB::lcsStatusHardwareInfoTotalMemoryKbytes
lcsStatusHardwareInfoTotalMemoryKbytes OBJECT-TYPE
  -- FROM       LCOS-MIB
  SYNTAX        Integer32 (0..2147483647)
  MAX-ACCESS    read-only
  STATUS        current
  DESCRIPTION   ""
::= { iso(1) org(3) dod(6) internet(1) private(4) enterprises(1) lancom-systems(2356) lcos(11) lcsStatus(1) lcsStatusHardwareInfo(47) 4 }
Abfrage der gesamten Menge an Arbeitsspeicher
user@omd $ snmpwalk -t 2 -r 2 -v 1 -c public 192.168.0.1 LCOS-MIB::lcsStatusHardwareInfoTotalMemoryKbytes
LCOS-MIB::lcsStatusHardwareInfoTotalMemoryKbytes.0 = INTEGER: 262144

Nagios Plugin

Damit ist es also möglich, Lancoms Managed Objects des Routers per SNMP abzufragen. Um die Überwachung automatisiert von unserem Monitoring Server durchführen zu lassen, benötigt man passende Nagios Plugins. Für die Überwachung der CPU Nutzung [4], der Temperatur [5] und des verwendeten Arbeitsspeichers [6] des Routers habe ich passende Plugins erstellt und auf Nagios Exchange veröffentlicht. Die Plugins lassen sich, wie alle Plugins, in Nagios als neues Kommando einbinden. Die Command-Direktive für die CPU Nutzung sieht beispielsweise wie folgt aus:
define command {
  command_name                   check_snmp_router_cpu
  command_line                   $USER2$/check_snmp_router_cpu.sh -H $HOSTADDRESS$ -C $ARG1$ -w $ARG2$ -c $ARG3$
}
Command-Direktive
Mit dem Webinterface Thruk lassen sich die Einstellungen angenehm am Browser durchführen.
Dazu passend sieht die Service-Direktive wie folgt aus:
define service {
  service_description            router_check_snmp_cpu
  host_name                      router01
  use                            check_mk_perf
  check_command                  check_snmp_router_cpu!public!80!90
  check_interval                 1
  check_period                   24X7
  contact_groups                 support
  flap_detection_enabled         0
  max_check_attempts             1
  retry_interval                 1
}
Im Webinterface Thruk ist das die Service-Direktive:
Service-Direktive
Mit diesen Einstellungen überwacht Nagios automatisch alle 60 Sekunden den Zustand des Routers. Die Nagios Plugins sind so angelegt, dass die Rückgabewerte von Nagios als PerfData interpretiert werden können. In Verbindung mit dem Template check_mk_perf erstellt Nagios ansehnliche Grafiken mit den Leistungsparametern des Routers.

Ausgabe der Leistungsparameter im Webinterface
Grafische Ausgabe der Leistungsparameter

Links

[1] Simple Network Management Protocol SNMP
[2] Open Monitoring Distribution (OMD)
[3] Lancom KB Eintrag zu SNMP und MIB
[4] check_snmp_router_cpu.sh
[5] check_snmp_router_temperature.sh
[6] check_snmp_router_memory.sh
[7] Das GitHub Projekt lancom-router-nagios-plugin

exensio.de neugestaltet in Responsive Web Design

Nach dem Relaunch der Homepage erstrahlt diese nun in „neuem Glanz“. Doch nicht das Design wurde überarbeitet - dies wurde größtenteils übernommen - sondern die Usability stand primär im Vordergrund. Die Seite passt sich nun nahtlos an die Größe des Gerätes an, mit dem sie betrachtet wrid - sei es der Desktop am Arbeitsplatz, das Handy unterwegs oder das Tablet zuhause auf dem Sofa, man erhält nun immer die optimale Darstellung.


Die Motivation zur Neugestaltung war die schlechte Darstellung auf mobilen Endgeräten. Der Inhalt war in der alten Version nur durch Vergrößern sinnvoll lesbar, doch dann fließt der Text links und rechts aus dem Bildschirm - insgesamt ein suboptimales Erscheinungsbild. Hier ein Vergleich:

Links neues Responsive Design / rechts bisherige Homepage

Doch was ist eigentlich Responsive Web Design?

Unter Responsive Web Design versteht man Webseiten, welche auf die Eigenschaften des Gerätes reagieren, mit denen sie angezeigt werden. Besonders die Größe des Bildschirms beeinflusst die Darstellung und Anordnung einzelner Elemente wie der Navigation, Seitenspalten, Texte und Bilder. Aber auch die Nutzung unterschiedlicher Eingabemethoden ist von Bedeutung, am Desktop die klassische Maus, auf mobilen Geräten Touchscreens. 

Die Anforderungen der Bedienung mit einer Maus unterscheiden sich drastisch von der an einem Touchgerät. Eine Maus bietet präzise Steuerung und man kann Elemente „überfahren“ (hovern) - Touch hingegen tippen, Gesten und eine natürlichere Interaktion. Somit müssen zum Beispiel Links so gestaltet sein, dass sie ohne den Einsatz von Hover-Effekten als solche erkennbar sind. Dennoch sollten Hover-Effekte für Desktop-Nutzer vorhanden sein. Ein weiterer Punkt ist die Größe von klickbaren Elementen. Da der menschliche Finger im Vergleich zu einem Mauszeiger geradezu monströs ist, müssen auf mobilen Geräten die interaktiven Flächen entsprechend groß angelegt sein und genügend Abstand zu nächsten Element aufweisen, um Fehler zu vermeiden. Ein guter Richtwert ist mindestens 8 mm in Höhe und Breite - so treffen über 99% das gewünschte Element. 

Das Anordnen von Inhalten ist vergleichsweise einfach dank moderner Web-Technologien wie HTML 5 und CSS3. Das Zauberwort hier sind Media Queries mit welchen, abhängig von der Breite des Anzeigegeräts, verschiedene Styles angegeben werden können. So können die Container an die Breite angepasst und umgebrochen werden, sobald der Platz nicht mehr ausreicht. Vereinfacht sieht dies wie folgt aus:



Ein Element welches sich allerdings nicht so einfach verkleinern lässt, ist das Hauptmenü. Irgendwann ist der Punkt erreicht, ab dem nicht mehr alle Menü-Einträge nebeneinander in eine Zeile passen. Was dann? Mobile-Menü ist hier das Zauberwort. Das heißt im Grunde nichts anderes als das man für mobile Endgeräte ein eigenes Menü entwirft. Die Ausprägungen sind vielfältig, aber die Grundidee hinter allen ist gleich: möglichst wenig Platz verbrauchen und nur bei Bedarf die gesamte Navigation zur Verfügung stellen. Ein Vertreter ist das Drop-Down-Menü. Hier reduziert sich die Hauptnavigation auf ein einzelnes Wort oder Symbol, welches beim Tippen auf das Menü ausfährt.



Oder einfach auf verschiedenen Endgeräten selbst ausprobieren: www.exensio.de.