Die ARM API erlaubt die transaktionsbasierte Überwachung des
Antwortzeitverhalten s verteilter
Anwendungen auch in heterogenen Umgebungen. Um dieses Ziel zu
erreichen wurde eine sehr einfache API definiert. Vor Beginn und nach
Ende jeder (vom Anwendungsentwickler festzulegenden) zu überwachenden
Transaktion müssen Aufrufe der entsprechenden Funktionen der API in
den Source Code der Anwendung eingefügt werden. Die
Implementierung der Funktionen der API erfolgt in sogenannten
Measurement Agents, die zur zu überwachenden Anwendung gebunden
werden. Diese bestimmen und speichern den Zeitpunkt der Aufrufe und
gestatten so die Berechnung der Antwortzeiten einzelner
Transaktionen.
Abbildung stellt die resultierende Architektur dar:
Eine - möglicherweise verteilt realisierte - Anwendung wird
instrumentiert, vor Beginn und nach Ende jeder Transaktion eine
Funktion der ARM API aufzurufen [#!hare00!#]. Ein auf dem jeweiligen
System vorhandener Measurement Agent wird dynamisch zur
Anwendung gebunden und wird somit im selben Prozeß wie die zu
überwachende Anwendung ausgeführt. Er nimmt die Aufrufe entgegen,
bestimmt die aktuelle Systemzeit und leitet die Information an
beliebige Managementanwendungen weiter. Die Schnittstelle zwischen
Managementanwendung und Measurement Agent ist hierbei allerdings
nicht vorgegeben, sondern bleibt der Implementierung des
Managementsystems überlassen. Aus Gründen der Performanz des
resultierenden Systems wird allerdings vorgeschlagen, daß der
Measurement Agent nur teilweise innerhalb des Prozesses der zu
überwachenden Anwendung abläuft und der Hauptteil des Agenten (z.B.
die Kommunikation mit der eigentlichen Managementanwendung) außerhalb
der Anwendung stattfindet [#!john97!#]. Damit instrumentierte
Anwendungen auch dann lauffähig sind, wenn kein Measurement
Agent auf dem System vorhanden ist, kann die sogenannte Null
Library zur Anwendung gebunden werden. Diese implementiert die ARM
API, verfügt aber über keinerlei Funktionalität, sondern kehrt
unmittelbar zur aufrufenden Anwendung zurück.
In Version 2.0 der ARM API sind die folgenden sechs Funktionen definiert:
Seit Einführung von Version 2.0 gestattet die ARM API die Korrelation
von Subtransaktionen zu übergeordneten Transaktionen. Dies kann über
mehrere Systeme verteilt geschehen. Hierzu werden sogenannte
Korrelatoren (correlators) eingesetzt. Beim Aufruf von
arm_start kann die Anwendung vom Measurement Agent einen
Korrelator anfordern, der bei nachfolgenden Aufrufen von
arm_start wieder übergeben werden kann. Diese nachfolgenden
Aufrufe werden dann vom Measurement Agent als Beginn von
Subtransaktionen der ursprünglichen Transaktion betrachtet. Der
Korrelator muß hierzu natürlich innerhalb der zu überwachenden
Anwendung (z.B. als zusätzlicher Aufrufparameter) propagiert werden.
Eine detailliertere Betrachtung der Korrelation von Subtransaktionen
bei Verwendung der ARM API findet sich in
Abschnitt .
Wie bereits erwähnt, ist mittlerweile Version 3.0 der ARM API bei der CMG verfügbar [#!john:99!#][#!smea99!#], allerdings noch nicht offiziell von der Open Group standardisiert worden. Die wesentlichen Erweiterungen sind die Unterstützung von Java sowie die Möglichkeit, komplette Transaktionen an den Measurement Agent zu übermitteln. Die bisherigen Versionen der ARM API beschränkten sich auf die Programmiersprache C, gingen aber davon aus, daß C-Bibliotheken aus nahezu jeder anderen Programmiersprache aufrufbar sind. Aus Java heraus besteht diese Möglichkeit mit Hilfe des Java Native Interface (JNI). Da dies aber umständlich ist und Probleme bzgl. der Performanz bereitet und Java heutzutage immer weitere Verbreitung findet, wurde eine Java-Bibliothek definiert, die direkt in Java-Programme eingebunden und aus diesen heraus aufgerufen werden kann. Aufgrund der Objektorientiertheit von Java wurden einige Anpassungen erforderlich, die aber keine wesentlichen konzeptionellen Unterschiede darstellen. Wie schon erwähnt, ist darüber hinaus ein Aufruf eingeführt worden, der es Anwendungen gestattet, komplette Transaktionen an den Measurement Agent zu übermitteln. Dies wurde im Hinblick auf Anwendungen gemacht, die bereits über - nicht ARM-konforme - Instrumentierung verfügen und somit mit geringem Aufwand in die ARM-basierte Überwachung integriert werden können.
Trotz vieler Unzulänglichkeiten ist die ARM API die derzeit am weitesten verbreitete Methode für die generische Instrumentierung von Anwendungen zur Transaktionsüberwachung. Mehrere Hersteller von Managementsystemen (z.B. Hewlett Packard, Tivoli) bieten Measurement Agents an, die eine Überwachung von instrumentierten Anwendungen erlauben. Die ARM API stellt somit einen wichtigen ersten Schritt für die generische Managementinstrumentierung verteilter Anwendungen dar. Aus diesen Gründen wurde sie im Rahmen der Studien zur vorliegenden Arbeit einer eingehenden Untersuchung unterzogen [#!hare99!#][#!fisc01!#][#!alde00!#][#!hojn99!#].
Dabei zeigte sich, daß zum heutigen Zeitpunkt keine instrumentierten
Anwendungen verfügbar sind. Dies liegt insbesondere daran, daß trotz
der sehr einfach gehaltenen Struktur der ARM API die Instrumentierung
von Anwendungen erheblichen Aufwand verursacht. Insbesondere die
nachträgliche Instrumentierung von Anwendungen ist - selbst wenn
Zugang zum Source Code der Anwendung existiert - nur mit großer
Mühe möglich. Auch bereitet die Korrelation von Subtransaktionen zu
übergeordneten Transaktionen erhebliche Probleme. Dies liegt daran,
daß der vom Measurement Agent gelieferte Korrelator innerhalb
der zu überwachenden Anwendung propagiert werden muß, so daß er beim
Start von Subtransaktionen übergeben werden kann. Dies bedeutet, daß
z.B. bei nachträglicher Instrumentierung einer Anwendung die
Aufrufparameter einzelner Funktionen der Anwendung verändert werden
müssen, um die Propagierung der Korrelatoren zu ermöglichen. Dies
macht sich insbesondere im Fall über mehrere Systeme verteilter
Anwendungen negativ bemerkbar. Ein detaillierter Vergleich der ARM API
mit der im folgenden Kapitel vorgeschlagenen Lösung findet sich in
Abschnitt