Integration von MoSKito in einer Java EE und JBoss 7 Umgebung


December 13, 2013 · DevOps, Java · von: Michael Schütz

MoSKito ist ein Open-Source Projekt zum Messen, Analysieren und Optimieren der Geschwindigkeit und des Verhaltens einer Applikation. Ziel von MoSKito ist es, jederzeit Einblick über den Status der eigenen Applikationen zu haben.

MoSKito

MoSKito überwacht technische Daten wie SessionCount, blockierte Threads sowie Anzahl und Geschwindigkeit von Requests. Aber vor allem wegen der einfachen Integration in die Geschäftslogik der Applikation haben wir uns für MoSKito entschieden. So ist MoSKito ein Bestandteil unseres zaunberg Entwicklungsprozesses geworden.
Wenn das Verständnis der Applikation zur Selbstverständlichkeit wird, schafft das Sicherheit und Vertrauen.

Dieser Beitrag ist kein Einstieg in MoSKito. Dafür steht ein veröffentlichter Artikel bereit. Vielmehr liegt der Fokus in der schrittweisen Integration von MoSKito in eine bestehende Java EE Anwendung und der Ausführung der Demo-Anwendung in einem JBoss 7 Applikationsserver. Weiterhin werden wir den Bogen spannen zu Schlüsselkonzepten wie Producers, Thresholds und Akkumulatoren.

Voraussetzungen

Wir starten mit der Annahme, dass Sie ein lauffähiges Java EE 6 Projekt haben, welches im JBoss AS 7.1 einsatzfähig ist. In unserer Demo verwenden wir ein Multi-Modul Maven-Projekt mit einem deploybaren WAR Artefakt. In unserer einfachen Demo-Anwendung können Sie Ihre Aufgaben anlegen und verwalten:

MoSKito Demo Anwendung

Unser Fahrplan:

  • Maven-Abhängigkeiten konfigurieren
  • MoSKito Web-Filter und -Listener aktivieren
  • Integration in CDI
  • Eine Java-Klasse zur Überwachung kennzeichnen
  • Tiefer eintauchen in MoSKito – Producers, Thresholds und Akkumulatoren
Maven-Abhängigkeiten konfigurieren

Die MoSKito Maven-Artefakte stehen im Standard Maven Central Repository zur Verfügung. Fügen Sie lediglich die erforderlichen Abhängigkeiten Ihrer Root-POM hinzu. Wir benötigen die Archive MoSKito-CDI und MoSKito-WebUi.
Bitte beachten Sie, dass MoSKito als Multi-Maven-Projekt für verschiedenen Umgebungen entwickelt wurde. Daher müssen einige Abhängigkeiten ausgeschlossen werden, um eventuelle Konflikte mit JBoss bezogenen Bibliotheken zu vermeiden, welche in den erforderlichen Versionen direkt im Container mitgeliefert sind.

1) MoSKito-Integration in die Root-POM

<moskito.version>2.4.0</moskito.version>
<ano-util.version>2.1.1</ano-util.version>

<dependency>
  <groupId>net.anotheria</groupId>
  <artifactId>moskito-webui</artifactId>
  <version>${moskito.version}</version>
  <exclusions>
    <exclusion>
      <groupId>javassist</groupId>
      <artifactId>javassist</artifactId>
    </exclusion>
    <exclusion>
      <groupId>xerces</groupId>
      <artifactId>xercesImpl</artifactId>
    </exclusion>
    <exclusion>
      <groupId>xerces</groupId>
      <artifactId>xmlParserAPIs</artifactId>
    </exclusion>
  </exclusions>
</dependency>

<dependency>
  <groupId>net.anotheria</groupId>
  <artifactId>moskito-cdi</artifactId>
  <version>${moskito.version}</version>
  <exclusions>
    <exclusion>
      <groupId>javassist</groupId>
      <artifactId>javassist</artifactId>
    </exclusion>
  </exclusions>
</dependency>

<!-- Ignore Blowfish -->
<dependency>
  <groupId>net.anotheria</groupId>
  <artifactId>ano-util</artifactId>
  <version>${ano-util.version}</version>
  <exclusions>
    <exclusion>
      <groupId>blowfish</groupId>
      <artifactId>blowfish</artifactId>
    </exclusion>
  </exclusions>
</dependency>

2) MoSKito-Integration in den POM’s der Untermodule:

Fügen Sie diese Abhängigkeiten Ihren CDI-Archiven hinzu:

<dependency>
<groupId>net.anotheria</groupId>
<artifactId>moskito-cdi</artifactId>
</dependency>

Fürgen Sie im Web-Modul zusätzlich WebUI hinzu, welches die JSP’s und Servlets beinhaltet, aus welchen die MoSKito UI aufgebaut ist. Mittels standardisierter REST-Schnittstellen lassen sich bei Bedarf eigene MoSKito UI-Oberflächen erstellen.

<dependency>
<groupId>net.anotheria</groupId>
<artifactId>moskito-webui</artifactId>
</dependency>
MoSKito Web-Filter und -Listener aktivieren

MoSKito verbindet sich mit mit Ihrer Applikation mittels Standard HTTP-Filter und -Listener.

[Update] Seite version 2.4.0 setzt MoSKito auf Servlet 3.0. Damit ist es nicht mehr erforderlich, Filter und Listener manuell in der web.xml zu konfigurieren. web-fragment übernimmt hier.

Integration in CDI

MoSKito stellt einen CDI-Interceptor bereit um sich in eine CDI-Umgebung zu integrieren. Dafür einfach den Interceptor in der CDI eigenen beans-xml anmelden:

<interceptors>
<class>net.anotheria.moskito.integration.cdi.WebCallInterceptor</class>
</interceptors>
Eine Java-Klasse zur Überwachung kennzeichnen

Nach dem die reine Konfiguration geschafft ist, wollen wir MoSKito in Aktion erleben. Um eine gewünschte Klasse unter MoSKito Monitoring zu stellen, ist lediglich eine entsprechende Annotation auf Klassenebene erforderlich. Im Beispiel möchten wir CustomerService in MoSKito überwachen und kennzeichnen die Klasse zur besseren Unterscheidung als SERVICE Kategorie. Entsprechend könnten wir Service’s für DAO oder WEB markieren. Durch @Monitor werden alle Requests der mit public gekennzeichneten Methode dieser Klasse in MoSKito überwacht und stehen somit für weitere Analysen zur Verfügung.

import static net.anotheria.moskito.integration.cdi.MonitoringCategorySelector.SERVICE;
import net.anotheria.moskito.integration.cdi.Monitor;
...
@Monitor(SERVICE)
@Stateless
public class CustomerService implements Serializable {

@Inject
private CustomerDao customerDao;
...
public void saveCustomer(Client client) {
clientDao.persist(client);
}
...
Tiefer eintauchen in MoSKito – Producers, Thresholds und Akkumulatoren

Die weiter oben im Beispiel mit @Monitor annotierte Klasse stellt als Producer den Einstiegspunkt in MoSKito dar. Mittels Intervallen werden die einzelnen Messpunkte verbunden. Auf dieser Basis lassen sich leicht und on-the-fly Thresholds und Akkumulatoren erstellen. Ferner können diese ebenso per XML, REST oder direkt per JAVA konfiguriert werden. Hier ein paar beispielhaft definierte Thresholds – wir zählen die Häufigkeit der erstellten Tasks der Demo-Anwendung:

MoSKito UI Demo Anwendung

Für weitere Details zu MoSKito’s Konzepten und Einsatzgebieten steht auf dem MoSKito Blog ein umfangreicher Integrations-Leitfaden bereit: http://blog.anotheria.net/msk/the-full-complete-integration-guide-to-moskito-step-0/

Weitere Schritte

In diesem Beitrag haben wir beschrieben, wie leicht sich MoSKito in ein bestehendes Java EE + JBoss AS7 Öko-System einbinden lässt. Wir laden Sie ein, dass Beispiel direkt auszuprobieren und sich von MoSKito helfen zu lassen, mehr Einblick in Ihre Live-Anwendung zu gewinnen. Wählen Sie Ihre nächsten Schritte:

  • Laden Sie sich den kompletten Open-Source Demo Code von GitHub herunter und bauen Sie die Anwendung: https://github.com/zaunberg/moskito-jboss
  • Führen Sie die Demo lokal aus: http://localhost:8080/moskitojboss/ , Login mittels Standard-Benutzer (jim | secret ) oder erstellen Sie sich Ihren eigenen Benutzer samt Tasks
  • MoSKito lokal anschauen: http://localhost:8080/moskitojboss/mui/
  • Treten Sie in Kontakt mit der MoSKito Community auf http://www.moskito.org
  • Erweitern Sie MoSKito nach Belieben und erstellen Sie Forks und Pull-Requests, um die ganze Community daran teilhaben zu lassen.

Michael

Tags: , , ,