# Application Response Measurement

Der Application Response Measurement (ARM) ist ein Standard der Open Group und dient zur Performancemessung von Transaktionen aus der Sicht des Benutzers. Technisch ist ARM eine Programmierschnittstelle, die für spätere Auswertungen in das Programm eingebaut werden muss. ARM ist verfügbar für die Programmiersprachen C und Java.

## Geschichte

Der Application Response Measurement (ARM) wurde ursprünglich von Tivoli und Hewlett-Packard entwickelt und in der Version 1.0 im Jahre 1996 veröffentlicht. Dieser Standard spezifiziert eine Programmierschnittstelle zur Performancemessung für die Programmiersprache C.
1997 wurde der ARM 2.0 Standard unter dem Dach der Computer Measurement Group (CMG) von der ARM Working Group entwickelt und erlaubte die Korrelation von Eltern-Kind-Transaktionen in einem verteilten Computersystem.
ARM 3.0 wurde 2001 von der Open Group als Standard angenommen. Dieser Standard spezifiziert eine Programmierschnittstelle für die Programmiersprache Java.
Im Herbst 2003 wurde die Version 4.0 des ARM-Standards von der Open Group angenommen. Diese Version bietet nun eine Programmierschnittstelle sowohl für die Programmiersprache C als auch für Java. Im Dezember 2004 wurde die Version 4.0 in einer zweiten Auflage überarbeitet.
ARM 4.1 erschien im Sommer 2007.

## Einführung

Moderne Anwendungen werden immer komplexer und oft auch über mehrere Rechner in einem Netzwerk verteilt. Hieraus ergeben sich neue Herausforderungen für Werkzeuge zur Beobachtung und Analyse dieser verteilten Anwendungen. Für diese Aufgabe wurde der ARM-Standard entworfen. Um einen genaueren Einblick in das Verhalten einer verteilten Anwendung zu bekommen, können folgende Fragen gestellt werden:
* Werden Geschäftstransaktionen ausgeführt und, wenn nicht, was sind die Gründe dafür?
* Wie groß ist die Antwortzeit einer Transaktion?
* Wo ist die Schwachstelle, welche Unter-Transaktionen können die Schwierigkeiten auslösen?
* Welche und wie viele Transaktionen werden in einer Anwendung ausgeführt?
* Wie kann die Performance einer Anwendung verbessert werden?
ARM kann die Beantwortung dieser Fragen erleichtern, indem die Performance von definierten Transaktionen gemessen und die Verfügbarkeit von Anwendungen überprüft wird. Es können sowohl sogenannte Geschäftstransaktionen als auch technische Transaktionen (also solche, die einen technischen Sachverhalt näher analysieren) gemessen werden.

## Vorgehensweise

Die grundsätzliche Vorgehensweise, um Anwendungen mit ARM zu instrumentieren und Performancedaten zu gewinnen, ist wie folgt:
* Ermitteln und Definieren sowohl der Geschäftstransaktionen als auch technischer Transaktionen.
* Instrumentierung der Anwendung mit Aufrufen zur ARM-Programmierschnittstelle.
* Start der instrumentierten Anwendung in ihrer gewohnten Laufzeitumgebung und Aufruf der fraglichen Transaktionen.
* Die benutzte ARM Implementierung stellt nun Messdaten zur Verfügung, die betrachtet, weiter verarbeitet oder statistisch analysiert werden können.

## Konzepte

ARM stellt verschiedene Konzepte zur Modellierung einer Anwendung und deren Performancemessung zur Verfügung. Die im nachfolgenden dargestellten Konzepte der ARM Applikation und der ARM Transaktion unterscheiden zwischen Definitionen und Instanzen. Eine Definition beschreibt die Eigenschaften eines Konzepts, wohingegen eine Instanz die eigentliche Messung beschreibt:

### ARM Applikation (Application)

    In verteilten Systemen (klassisch Client/Server-Anwendungen) operieren viele verschiedene Anwendungen zusammen. Erst dieses Zusammenspiel beschreibt das komplette verteilte System. Zur Identifizierung einzelner Anwendungen im ARM-Kontext wird das Konzept einer Applikation in ARM etabliert. Wird ein und dieselbe Anwendung mehrfach gestartet, so wird es mehrere ARM Applikationsinstanzen geben, jedoch nur eine Applikationsdefinition.

### ARM Transaktion (Transaction)

    Eine Transaktion stellt das Hauptkonzept des ARM-Standards dar und beschreibt genau eine Performance Messung. Eine Transaktionsdefinition legt dabei die Randbedingungen fest (z. B. welche Daten werden aufgezeichnet, an welcher Stelle der Applikation wird die Transaktion gestartet und gestoppt usw.). Wird ein und dieselbe Transaktion mehrfach durchgeführt, resultieren daraus viele Transaktionsinstanzen, es gibt aber nach wie vor nur eine Transaktionsdefinition. Eine Transaktion besteht im Wesentlichen aus einem Status (Gut, Fehlerhaft, Abgebrochen), einem Start- bzw. Stopzeitpunkt, der daraus resultierenden Dauer und der Beschreibung des Rechners (SystemAddress), auf dem die Transaktion aufgezeichnet wurde. Zusätzlich können weitere Informationen wie spezielle Metriken (Metrics) oder Zeichenketten (Properties) an eine Transaktion gebunden werden.

### ARM System Adresse (SystemAddress)

    Beschreibt eindeutig einen Rechner z. B. durch seinen Namen, seine IP-Adresse oder sonstige eindeutige Beschreibungen.

### ARM Korrelatoren (Correlators)

    Ein Korrelator beschreibt im ARM Kontext genau eine Transaktionsinstanz als eine Folge von Bytes. Mit Hilfe eines solchen Korrelators können Eltern/Kind Beziehungen zwischen Transaktionsinstanzen hergestellt werden. Somit ist es möglich, eine komplexe Transaktion in ihre einzelnen Bestandteile zu zerlegen. Beispiel: Zeige mir den ARM-Wikipedia-Artikel in meinem Web-Browser an. Hierfür könnten beliebig viele sogenannte Sub-Transaktionen (Kinder) gemessen werden, wie Zugriff auf den Web-Server, Datenbankzugriff oder dass Zeichnen der Seite im eigenen Browser.

### ARM Metriken (Metrics)

    Metriken im ARM Sinne sind zusätzliche Daten (Zähler, Füllstand, IDs), die einer Transaktion zugeordnet werden können. Zum Beispiel kann die Anzahl gedruckter Seiten eines Druckauftrags und dessen Dauer eine genauere Beurteilung über die Performance eines Drucksystems geben als die reine gemessene Zeit für dessen Durchführung.

### ARM Eigenschaften (Properties)

    Sogenannte Properties erlauben einer Transaktion beliebige Daten anzuhängen. Properties bestehen aus zwei Zeichenketten, einem Namen und einem Wert. Diese Zeichenketten können mit spezieller Semantik für jede Transaktionsdefinition versehen werden.

### ARM Benutzer (User)

    Eine Transaktionsinstanz kann genau einem Benutzer zugeordnet werden. Hierbei ist zu beachten, dass der Benutzer keineswegs der Benutzer sein muss, der sich gerade am Rechner befindet und sich dort angemeldet hat.

## ARM instrumentierte Anwendungen

Folgende Anwendungen sind bereits mit ARM instrumentiert:
* Apache HTTP Server mittels des ARM 4.0 Moduls mod_arm4. Alle HTTP Anfragen werden mittels ARM gemessen.
* IBM WebSphere Applikationsserver. Verschiedene Anfragen wie URI, JSP und andere können direkt mit ARM gemessen werden.
* IBM HTTP Server.
* IBM DB2 Datenbank Server.
* Das Software-System von SAS Institute unterstützt ARM 2.0 schon länger; mit der Version 9.2 wird nun auch ARM 4.0 unterstützt.
* Baan 5 und Infor ERP Ln 6.1