next up previous contents
Next: Übertragung der Meßdaten Up: 5 Prototypische Implementierung Previous: Prüfung des ISDN-Status

5.5 Realisierung der Messung

  Wie in Abschnitt 2.3.3 beschrieben, ist es notwendig, zur Überwachung von Service-Level-Agreements Antwortzeiten aus Benutzersicht zu messen. Durch eine Agentenarchitektur wird diese Anforderung erfüllt, da so die Messung aus der Händlerlokation getätigt wird. Implementiert wurde im Prototypen ein einfaches, auf dem Internetwerkzeug ping und ICMP (Internet Control Message Protocol) basierendes Verfahren zur Prüfung der Verfügbarkeit eines IP-Hosts und Messung seiner Antwortzeit.
Ziel der Realisierung auf der Agentenseite ist, den Implementierungsaufwand für neue Meßmethoden möglichst gering zu halten. Daher wurde eine Architektur gewählt, die eine abstrakte Klasse AgMeasurement mit allen für eine intervallgesteuerte Messung benötigten Funktionalitäten bereitstellt. Die eigentlich Meßmethode, also performMeasure, wurde abstrakt gehalten. Die Umsetzung dieser Methode geschieht in der Klasse AgConnectivity.

  
Abbildung 5.5: Diagramm der Klassen AgMeasurement und AgConnectivity
\begin{figure}

 \begin{center}

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

 \end{center}
\end{figure}

Der durch diese Klassen gesteuerte Ablauf sieht so aus, daß nach Erhalt des PropertyChangedEvent der bereits dargestellten Klasse AgISDN_Handler die AlarmClock gestartet wird:

 public void propertyChange(PropertyChangeEvent e){ 
    alarmClock.performStart();
    }
In dem erstem Intervall werden keine Messungen durchgeführt, da hier die Ressourcen für Benutzerdaten freigehalten werden müssen. Während der Initialisierung der Messung werden die IP-Adressen der Hosts aus der Konfigurationsschnittstelle GlobalVariables des Agenten ausgelesen und eine neues Objekt der Klasse DataObject zur Verwaltung der messungsrelevanten Daten erzeugt:

 Vector adressen = AgBasis.globalVariables.gethostsToBeChecked();
 DataObject cdo = new DataObject(now , true, getownIPAdress(), false, 
                                 "Connectivity&ResponseTimeWithPing", 
                                           adressen, getownIPAdress());
Nun wird anhand des Adressenvektors adressen eine Erreichbarkeitsanalyse mit dem Internetwerkzeug ping, also mit ICMP-Echo-Paketen, durchgeführt. Vorteil einer solchen Realisierung ist, daß dieser Mechanismus als Standard überall verfügbar ist. Auf praktisch jeder aktiven Netzkomponenten ist ein Port festgelegt, an das dieses Werkzeug Pakete senden kann, und die dann zurückgeschickt werden.
Um nun dieses externe Programm nutzen zu können, wird ein Runtime-Objekt erzeugt, das den Ausführungsrahmen innerhalb des Java-Agenten darstellt.

// Rahmen fuer den PingProzess
Process pingproc;
Runtime runtime = Runtime.getRuntime();
In der darauffolgenden Meßsequenz wird nun pro IP-Adresse eine Anfangszeit aus dem System ausgelesen, der Ping-Prozeß ausgeführt, und mit Hilfe der Endzeit die Prozeßdauer in Millisekunden berechnet.

// Pingsequenz 
for (int i=0; i<anzahl; i++){
    String adresse = (String)adressen.elementAt(i);
    try{
        // Startzeit
        long begin = System.currentTimeMillis();
        pingproc = runtime.exec("ping "+ adresse);

        // hier kann eine Maximale Wartezeit ergaenzt werden
        pingproc.waitFor(); 

        // Endzeit
        long end=System.currentTimeMillis();
        // benoetigte Zeit
        Integer result = new Integer((int)end-(int)begin);

        // wurde Ping erfolgreich durchgefuehrt ??
        if (pingproc.exitValue()==0)
           results.addElement(result);    
        else
            results.addElement(new Integer(-1)); 
            // -1 bedeutet Host nicht erreichbar
    }
    catch(Exception e){
        e.printStackTrace();
        cdo.setresults(results);
    }
}
Der Rückgabe-Wert signalisiert, ob die Messung erfolgreich war oder nicht. Abschließend wird das Ergebnis dem DataObject übergeben und dieser an den DataHandler weitergereicht.

cdo.setresults(results);
AgBasis.dataHandler.addDataObject(cdo);
alarmClock.setTimeoutAsLong(AgBasis.globalVariables.getcheckFrequence()); 
alarmClock.performStart();
Das erneute Setzen der CheckFrequenz gewährleistet eine sofortige Reaktion auf eine Änderung der Agenten-Konfiguration.
Der Aufruf alarmClock.performStart() veranlaßt die alarmClock, nach dem zuvor übergebenem Zeitraum ein neues Event zu erzeugen, das wiederum eine neue Meßsequenz einleitet. Das bedeutet, daß der Zeitraum zwischen den Messungen durch diesen Intervall festgelegt wird. Grund für diese Konstruktion ist die Tatsache, daß die Messungen unterschiedlich lange dauern können. Es es ist aber gewünscht, daß die Zeitspanne zwischen den Messungen konstant bleibt, um so dem lokalen Router die Möglichkeit zu geben, seinen Timeout zu durchlaufen und somit die Verbindung zu beenden, wenn keine Benutzerdaten mehr übertragen werden.
Abweichend von dieser Meßmethodik wurde im Vorfeld der Implementierung ein Zwei-Agenten Modell getestet, daß hier noch kurz vorgestellt wird. Basierend auf den in Abschnitt 4.3.2.1 geschilderten Überlegungen wurden ein Agent entwickelt, der eine Messung der Antwortzeit einen Echo-Agenten nutzt. Zu diesem Agenten, der an einem vorgegebenen Port lauscht, wird ein Socket aufgebaut und ein Datenpaket gesendet, das umgehend zurückgeschickt wird. Dazu wird durch den Echo-Agenten ein in Java verfügbares ServerSocket-Objekt nutzt. Eine ähnliche Realisierung ist mit Hilfe der JDMK-Adapter zu realisieren.
Das Prinzip dieser Messung ist ähnlich dem des Internetwerkzeuges ping, allerdings wird nicht ICMP genutzt, sondern eine TCP-basierte Socket-Verbindung. Von einer Implementierung dieser Meßmethode in den Prototypen wurde aufgrund der in Abschnitt 4.3.2.1 geführten Diskussion abgesehen.
Auf die Instrumentierung einer Applikation und der damit verbundenen Realisierung der Messung von Antwortzeiten auf Applikationsebene mußte aufgrund des zeitlich begrenzten Rahmens dieser Arbeit verzichtet werden.


next up previous contents
Next: Übertragung der Meßdaten Up: 5 Prototypische Implementierung Previous: Prüfung des ISDN-Status
Copyright Munich Network Management Team