next up previous contents
Next: 3.4.3.3 Korrelation von Subtransaktionen Up: 3.4.3 Application Response Measurement Previous: 3.4.3.1 Die Computer Measurement

3.4.3.2 Das Konzept

Der Kerngedanke des Ansatzes der CMG ist Markierung der für die zu überwachenden Transaktionen zuständigen Codesequenzen (siehe http://www.hp.com/go/arm). Der Aufruf entsprechender Methoden der ARM API am Anfang und am Ende der Transaktionen ermöglicht es Agenten, die ebenfalls mit der ARM API bestückt sind, diese Applikation zu beobachten. Die Architektur eines solchen Ansatzes ist in Abbildung 3.8 dargestellt.

  
Abbildung 3.8: Die Architektur der ARM-API
\begin{figure}

 \begin{center}

 \leavevmode
 \epsfxsize = \textwidth
 
\epsfbox {./Bilder/architekturARM.eps}

 \end{center}
\end{figure}

Die ARM API [ARM 97] besteht aus einem Satz von Funktionen, die in einer Shared Library zur Verfügung gestellt werden. Jeder Agent verfügt über eine eigene Implementierung dieser Library. Die zur Verfügung stehenden Funktionen werden in Tabelle 3.2 kurz dargestellt.
 
 
Tabelle: Übersicht über die ARM-Funktionen
arm_init Initialisiert die ARM-Umgebung für die Applikation.
arm_getid Mit arm_getid wird eine Transaktion in ARM registriert und bezeichnet.
arm_start arm_start signalisiert den Beginn der Transaktion.
arm_update Diese optionale Funktion kann nach arm_start und vor arm_stop aufgerufen werden, um genauere Informationen über die Transaktion zu erhalten.
arm_stop arm_stop signalisiert das Ende der Transaktion.
arm_end Am Ende der Applikation kann arm_end aufgerufen werden, um z.B. allokierten Speicher wieder freizugeben.

Nun soll anhand eines Beispieles dargestellt werden, wie eine Applikation instrumentiert wird. Dazu wird angenommen, eine Geschäftsapplikation mit diversen Server-Anfragen soll so bestückt werden, daß einzelne Transaktionen gemessen werden können.
Vereinfacht würde das wie folgt aussehen:

APPL = arm_init("Application Name", "User Name")
    A = arm_getID("Transaction A", APPL)
    B = arm_getID("Transaction B", APPL)
    C = arm_getID("Transaction C", APPL)
    
    loop until program ends
        arm_start(A)
            arm_start(B)
            // do some work
            arm_stop(B, status)

            arm_start(C)
            loop until transaction ends
                // do some work
                arm_update(C)
            end loop
            arm_stop(C, status)

        arm_stop(A, status)
    end loop
arm_end
Zu Beginn der Applikation wird die Methode arm_init mit den Parametern Application Name und User Name aufgerufen. Ziel dieser Initialisierung ist die Vereinfachung der Organisation der später gemessenen Werte. Diese Methode gibt einen Identifikator zurück, der durch den ARM-Agenten vergeben wird und eine Klasse von Transaktionen durch ihre Beziehung zu einer Applikation definiert.
arm_getID wird typischerweise in der Initialisierungsphase einer Applikation aufgerufen, um einen Transaktionsnamen zu erstellen. Die Kombination von Transaktionsnamen und Applikationsidentifikator ergibt einen eindeutigen Schlüssel zur Identifikation einer Transaktion. Der Rückgabewert der Methode arm_getID stellt einen eindeutigen Identifikator für eine Transaktion dar und wird später den einzelnen arm-Aufrufen als Parameter übergeben.
arm_start signalisiert dem Agenten nun den Beginn der zu messenden Transaktion. Hierbei können sich diese Transaktion ineinander verschachteln. arm_update stellt eine Methode dar, deren Benutzung optional ist. Sie teilt dem Agenten mit, daß die betreffende Transaktion noch läuft. Typischerweise wird sie bei längeren Transaktionen eingesetzt, und zwar in bestimmten Zeitintervallen (Heartbeat, z.B. einmal pro Minute) oder nach dem Abarbeiten einer bestimmten Menge der Transaktion (z.B. nach je 1000 abgearbeiteten Datensätzen).
arm_stop indiziert das Ende einer Transaktion und kann von einem neuen Prozess oder Thread bekanntgegeben werden. Diese Methode übergibt neben dem Transaktionsbezeichner auch eine Statusmitteilung, die folgende Werte annehmen kann: arm_end teilt dem Agenten mit, daß die Applikation keinen Aufruf der ARM-API mehr tätigen wird. Diese Methode wird typischerweise beim Beenden der Applikation aufgerufen. Alle nicht gestoppten Transaktionen dieser Applikation werden durch den Agenten verworfen.


next up previous contents
Next: 3.4.3.3 Korrelation von Subtransaktionen Up: 3.4.3 Application Response Measurement Previous: 3.4.3.1 Die Computer Measurement
Copyright Munich Network Management Team