Server

Konfiguration

Die Konfiguration des Servers basiert auf unserem Konfigurationssystem. Im einfachsten Fall schreibst du deine Konfiguration in die Datei configuration.xml welche du im Verzeichnis der Anwendung platzierst. Die genauen Details zum Konfigurationssystem findest du im Kapitel Konfigurationssystem.

Schema der Konfiguration

Das folgende Schema zeigt die Struktur der Konfiguration:

Module

Application

List

network

Optional

Complex list definition

Value

interface

String

  • Must not be empty.

  • Must be one of this: Client, Agent

Value

protocol

String

  • Must not be empty.

  • Must be one of this: Message, HTTP

Value

port

Optional

Integer

  • Minimum value: 0

  • Maximum value: 65535

Default Value:

0

Value

scope

String

  • Must be one of this: None, LocalHost, Any

Default Value:

LocalHost

Value

sslProfile

Optional

String

List

secrets

Complex list definition

Value

label

String

  • Must not be empty.

Value

key

String

  • Must not be empty.

Value

secret

Password

  • Must not be empty.

Value

authorizedNetworks

Optional

String

Value

authorizedProtocols

Optional

String

  • Must be one of this: Any, Message, HTTP

Default Value:

Any

Value

enabledFeatures

Optional

StringList

  • Must be one of this: ReadSessionList, ReadIdleState, SendMessage, ImportSession, ManageScheduledMessages

  • Must not have duplicates.

Value

sessionFilter

Optional

String

Complex list definition

Value

filter

Optional

String

Value

idleMonitoringEnabled

Optional

Boolean

Default Value:

Yes

Value

idleTime

Optional

Integer

  • Minimum value: 5

  • Maximum value: 1440

Default Value:

10

List

monitoredProcesses

Optional

Complex list definition

Value

namePattern

String

  • Must not be empty.

  • Must be a valid regular expression.

Value

monitoringEnabled

Optional

Boolean

Default Value:

Yes

Value

userCpuThreshold

Optional

Integer

  • Minimum value: 0

  • Maximum value: 100

Default Value:

90

Value

systemCpuThreshold

Optional

Integer

  • Minimum value: 0

  • Maximum value: 100

Default Value:

10

Value

memoryThreshold

Optional

Integer

  • Minimum value: 0

Default Value:

0

Value

problemDuration

Optional

Integer

  • Minimum value: 1

  • Maximum value: 1140

Default Value:

10

Complex list definition

Value

filter

Optional

String

Value

enabledFeatures

StringList

  • Must be one of this: ReadSessionList, ReadIdleState, SendMessage, ManageScheduledMessages

  • Must not have duplicates.

Value

sessionFilter

Optional

String

Die Liste network

Die Liste network steuert die verschiedenen Netzwerkschnittstellen des Servers. Jeder Eintrag in dieser Liste konfiguriert eine Schnittstelle und Protokoll. Du findest alle gültigen Kombinationen in der folgenden Tabelle:

Schnittstelle

Protokoll

Port

Beschreibung

Agent

Message

17671

Schnittstelle für alle Agents und Nodes.

Client

Message

17672

Für den Client und die Raptor Integration.

Client

HTTP

17673

Für Skripte und externe Anwendungen.

Es werden nur konfigurierte Schnittstellen aktiviert. Fehlt ein Eintrag in der Liste, bleibt die fehlende Schnittstelle deaktiviert.

Das folgenden Beispiel zeigt eine Konfiguration welche die Agent und Client Schnittstelle mit den default Ports aktiviert. Die Skript-Schnittstelle bleibt jedoch deaktiviert.

<List name="network">
    <ListEntry>
        <Value name="interface">Agent</Value>
        <Value name="protocol">Message</Value>
        <Value name="scope">Any</Value>
    </ListEntry>
    <ListEntry>
        <Value name="interface">Client</Value>
        <Value name="protocol">Message</Value>
        <Value name="scope">Any</Value>
    </ListEntry>
</List>

Der Wert interface

Mit dem Wert interface wählst du welche Schnittstelle du mit dem Eintrag konfigurierst. Dabei kannst du einen der Werte aus der folgenden Tabelle wählen:

Bezeichner

Beschreibung

Agent

Wählt die Agent-Schnittstelle. Diese wird von den Agents und Nodes im System verwendet.

Client

Wählt die Client-Schnittstelle. Diese wird von dem Client, der Raptor-Integration und auch dem REST-API verwendet.

Der interface Wert wird immer in Kombination mit dem protocol Wert verwendet. Du findest einen Übersicht aller Kombinationen hier: Die Liste network.

<List name="network">
    <ListEntry>
        <Value name="interface">Agent</Value>
        <Value name="protocol">Message</Value>
        <Value name="scope">Any</Value>
    </ListEntry>
    ...
</List>

Der Wert protocol

Mit dem protocol Wert wählst du welche Schnittstelle du mit dem Eintrag konfigurierst. Dabei kannst du einen der Werte aus der folgenden Tabelle wählen:

Bezeichner

Beschreibung

Message

Wählt das kompakte, verschlüsselte und authentifizierte Protokoll mit denen die EducateIT Anwendungen untereinander kommunizieren.

HTTP

Wählt das sichere HTTPS REST Protokoll, welches eine Kommunikation mittels JSON Nachrichten mit dem Server erlaubt. Hier kannst du mit dem Wert sslProfile die SSL Einstellungen wählen.

Der protocol Wert wird immer in Kombination mit dem interface Wert verwendet. Du findest einen Übersicht aller Kombinationen hier: Die Liste network.

<List name="network">
    <ListEntry>
        <Value name="interface">Agent</Value>
        <Value name="protocol">Message</Value>
        <Value name="scope">Any</Value>
    </ListEntry>
    ...
</List>

Der Wert port

Der optionale Wert port konfiguriert einen anderen Port für die Netzwerkschnittstelle. Lässt du diesen Wert wer wird der default Port für die Schnittstelle verwendet.

Du findest den default Port für alle Schnittstelle hier: Die Liste network.

<List name="network">
    <ListEntry>
        <Value name="interface">Agent</Value>
        <Value name="protocol">Message</Value>
        <Value name="port">12345</Value>
        <Value name="scope">Any</Value>
    </ListEntry>
    ...
</List>

Der Wert scope

Mit dem optionalen Wert scope steuerst du woher auf die Schnittstelle zugegriffen werden kann. Mögliche Werte findest du in der folgenden Tabelle:

Bezeichner

Bedeutung

None

Die Schnittstelle wird deaktiviert und ist nicht zugänglich.

LocalHost

Die Schnittstelle ist nur lokal auf dem selben Server zugänglich.

Any

Zugriffe aus dem Netzwerk sind erlaubt.

Wenn du diesen Wert weglässt, wird der default LocalHost verwendet. Fehlt der komplette Eintrag für eine Schnittstelle, wird diese mit dem Wert None deaktiviert.

<List name="network">
    <ListEntry>
        <Value name="interface">Agent</Value>
        <Value name="protocol">Message</Value>
        <Value name="scope">Any</Value>
    </ListEntry>
    ...
</List>

Der Wert sslProfile

Mit dem optionalen Wert sslProfile kannst du eine eigene SSL Konfiguration wählen. Dazu erstellst du ein SSL Profil und gibst hier den Namen dieses Profils an.

Du findest alle Details dazu im Kapitel Eigene SSL Zertifikate verwenden.

<List name="network">
    <ListEntry>
        <Value name="interface">Agent</Value>
        <Value name="protocol">Message</Value>
        <Value name="scope">Any</Value>
        <Value name="sslProfile">example</Value>
    </ListEntry>
    ...
</List>

Die Liste secrets

Die Liste secrets konfiguriert wer auf die Session-Liste zugreifen kann. Dabei generierst du mit dem EducateIT Secret Generator Schlüsselpaare, welche für den Zugriff auf eine Schnittstelle oder Funktion benötigt werden.

Das Schlüsselpaar wird mit dem Secret Generator erstellt. Siehe dazu Das Secret System.

Der Client ist dabei immer die Software welche auf die Daten zugreifen möchte, beispielweise der Session Monitor Client oder die Raptor Integration. Der Server ist die Software welche die Daten anbietet, also der Session Monitor Server.

Erstelle für jede Anwendung welche auf Daten des Servers zugreift ein eigenes Schlüsselpaar. Zudem macht es Sinn auf der Client Seite das Secret zusätzlich zu kodieren, dieser Wert ist wie ein Passwort, daher solltest du ihn wie ein solches schützen. Siehe dazu Kapitel Kodieren von Passwörtern.

Zusätzlich zu dem Schlüsselpaar, kannst du den Zugriff mit einer Netzwerkliste einschänken. Wenn du also weist, dass ein Client sich immer aus dem Netzwerk 10.0.0.0/24 mit dem Server verbindet, kannst du diese Einschränkung mit dem Wert authorizedNetworks Konfigurieren. Wir empfehlen solche Einschränkungen falls möglich zu definieren.

Weiter kannst du für jeden individuellen Zugriff einen individuellen Session-Filter definieren. Dieser wird zusätzlich zu allen bestehenden Filtern angewendet. So kannst du beispielsweise Supportmitarbeitern aus einem bestimmten Bereich nur zugang zu ihren eigenen Daten geben, auch wenn der Session Monitor Server die Session-Daten des gesamten Netzwerks sammelt.

Das folgenden Beispiel zeigt, wie eine solche secrets Liste aussehen kann. Die dabei verwendeten Werte bei key und secret sind bewusst fiktive Werte und funktionieren nicht.

<List name="secrets">
    <ListEntry>
        <Value name="label">Agents</Value>
        <Value name="key">tB*OsLDoq_-4UpbT?C(...)40v</Value>
        <Value name="secret">p~#S6O{{TT2yApY(...)qWRg==</Value>
        <Value name="authorizedProtocols">Message</Value>
    </ListEntry>
    <ListEntry>
        <Value name="label">Client</Value>
        <Value name="key">XiV6Cy_+hBJrP+9c#9(...)Dw{</Value>
        <Value name="secret">(m[iVGXZjphGa*C(...)eoQ==</Value>
        <Value name="authorizedProtocols">Message</Value>
        <Value name="enabledFeatures">
            ReadSessionList
            ReadIdleState
            SendMessage
            ManageScheduledMessages
        </Value>
    </ListEntry>
    <ListEntry>
        <Value name="label">ClientV2</Value>
        <Value name="key">R%mhUf6)9$LKA{Ukd{(...)#E</Value>
        <Value name="secret">EGAEC;|jvqpl+tl(...)rg== V2</Value>
        <Value name="authorizedProtocols">Message</Value>
        <Value name="enabledFeatures">
            ReadSessionList
            ReadIdleState
            SendMessage
            ManageScheduledMessages
        </Value>
    </ListEntry>
    <ListEntry>
        <Value name="label">Raptor</Value>
        <Value name="key">(F@vmJ|L!R#AncbPQ(...)xzw</Value>
        <Value name="secret">mbS3G7lp(P[cbq(...)OUQ== V2</Value>
        <Value name="authorizedProtocols">Message</Value>
        <Value name="enabledFeatures">
            ReadSessionList
            ReadIdleState
        </Value>
    </ListEntry>
    <ListEntry>
        <Value name="label">Script</Value>
        <Value name="key">QNcJ0eh{m}~f(HSHf(...)qsh</Value>
        <Value name="secret">*fB77OiTq(H)Xz(...)FqQ== V2</Value>
        <Value name="authorizedProtocols">HTTP</Value>
        <Value name="enabledFeatures">
            ReadSessionList
            ReadIdleState
            ImportSession
        </Value>
    </ListEntry>
</List>

Der Wert label

Mit dem Wert label gibst du einem Eintrag einen Namen. Dieser taucht in den Logdateien auf, so dass du Fehlermeldungen oder Zugriffe einem Eintrag zuordnen kannst. Funktional hat dieser Wert keine Bedeutung.

Siehe dazu auch Kapitel Das Secret System.

<List name="secrets">
    <ListEntry>
        <Value name="label">Agents</Value>
        <Value name="key">tB-4UpbT?C(...)40v</Value>
        <Value name="secret">p~#S6O2yApY(...)qWRg==</Value>
        <Value name="authorizedProtocols">Message</Value>
    </ListEntry>
    ...
</List>

Der Wert key

Der Wert key ist ein Teil des Schlüsselpaars, welches du mit dem EducateIT Secret Generator erstellst. Dieser Wert bildet der Schlüssel, welcher einen Zugang eindeutig identifiziert. Der Wert ist vergleichbar mit einem Benutzernamen.

Siehe dazu auch Kapitel Das Secret System.

<List name="secrets">
    <ListEntry>
        <Value name="label">Agents</Value>
        <Value name="key">tB-4UpbT?C(...)40v</Value>
        <Value name="secret">p~#S6O2yApY(...)qWRg==</Value>
        <Value name="authorizedProtocols">Message</Value>
    </ListEntry>
    ...
</List>

Der Wert secret

Der Wert secret ist der zweite Teil des Schlüsselpaars, welches du mit dem EducateIT Secret Generator erstellst. Dieser Wert ist eine Prüfsumme („Hash“) des eigentlichen Werts welches du im Client konfigurierst. Es ist nicht ohne weiteres möglich von dem Server Secret auf das Client Secret zu schliessen. Trotzdem solltest du den Zugriff auf die Konfiguration so gut wie möglich limitieren.

Siehe dazu auch Kapitel Das Secret System.

<List name="secrets">
    <ListEntry>
        <Value name="label">Clients</Value>
        <Value name="key">tB-4UpbT?C(...)40v</Value>
        <Value name="secret">p~#S6O2yApY(...)qWRg==</Value>
        <Value name="authorizedProtocols">Message</Value>
    </ListEntry>
    ...
</List>

Der Wert authorizedNetworks

Mit dem optionalen Wert authorizedNetworks schränkst du die Clients ein, welche über diesen Eintrag auf das System zugreifen können. Dabei gibst du eine Liste von IPv4 oder IPv6 Netzwerken an, für welche der Zugriff erlaubt ist. Die einzelnen Netzwerke werden durch Whitespace voneinander getrennt.

Siehe dazu auch Kapitel Das Secret System.

<List name="secrets">
    <ListEntry>
        <Value name="label">Clients</Value>
        <Value name="key">tB-4UpbT?C(...)40v</Value>
        <Value name="secret">p~#S6O2yApY(...)qWRg==</Value>
        <Value name="authorizedNetworks">10.100.30.0/24 192.168.0.0/16</Value>
        <Value name="authorizedProtocols">Message</Value>
    </ListEntry>
    ...
</List>

Der Wert authorizedProtocols

Mit dem optionalen Wert authorizedProtocols kontrollierst du, welche Protokolle für den Eintrag zulässig sind. Dabei kannst du die folgenden Bezeichner verwenden:

Bezeichner

Bedeutung

Any

Akzeptiert alle Protokolle

Message

Nur Verbindungen mit dem Message Protokoll werden akzeptiert.

HTTP

Nur Verbindungen mit dem HTTPS/JSON Protokoll werden akzeptiert.

Wenn du diesen Wert weglässt werden alle Protokolle akzeptiert.

<List name="secrets">
    <ListEntry>
        <Value name="label">Clients</Value>
        <Value name="key">tB-4UpbT?C(...)40v</Value>
        <Value name="secret">p~#S6O2yApY(...)qWRg==</Value>
        <Value name="authorizedProtocols">Message</Value>
    </ListEntry>
    ...
</List>

Der Wert enabledFeatures

Mit dem Wert enabledFeatures konfigurierst du, welche Funktionen einem Client zur Verfügung stehen der sich mit diesem Schlüssel am Server anmeldet. Der Wert hat keinen Einfluss auf eine Agent-Verbindung und kann dort weggelassen werden.

Gib hier eine Liste der Funktionen an, welche du zulassen möchtest. Trenne dabei die einzelnen Bezeichner mit Whitespace voneinander. Lässt du diesen Wert leer, sind keine Funktionen verfügbar.

Die folgende Tabelle enthält alle möglichen Werte und deren Beschreibung:

Bezeichner

Beschreibung

ReadSessionList

Der Client kann die Liste mit allen Sessions abfragen. Du kannst dabei die Liste mit dem Wert sessionFilter weiter einschränken.

ReadIdleState

Der Client kann den Aktivitätsstatus einer Session mit der Session-Liste abfragen. Lässt du dieser Wert weg, obwohl der Server den Aktivitätsstatus erfasst, ist der entsprechende Wert in der Session-Liste leer.

SendMessage

Mit diesem Wert erlaubst du das Senden von Nachrichten an eine Session.

ImportSession

Dieser Wert erlaubt das manuelle einfügen von Sessions in das System über die HTTPS/JSON Schnittstelle.

ManageScheduledMessages

Mit diesem Wert aktivierst du das abfragen und erfassen von Zeitgesteuerten Nachrichten.

<List name="secrets">
    <ListEntry>
        <Value name="label">Clients</Value>
        <Value name="key">tB-4UpbT?C(...)40v</Value>
        <Value name="secret">p~#S6O2yApY(...)qWRg==</Value>
        <Value name="authorizedProtocols">Message</Value>
        <Value name="enabledFeatures">
            ReadSessionList
        </Value>
    </ListEntry>
    ...
</List>

Der Wert sessionFilter

Mit dem optionalen Wert sessionFilter limitierst du die abgefragten Sessions. Lässt du diesen Wert weg, können alle Sessions abgefragt werden.

Gibst du diesen Wert an, muss es sich um einen Filterausdruck handeln, wie er im Kapitel Filterausdrücke beschrieben wird. Im Kapitel Die Filter findest du alle Details zu den Feldern welche du in einem Filter verwenden kannst.

Der Wert beeinflusst auch an welche Sessions Nachrichten gesendet werden können.

<List name="secrets">
    <ListEntry>
        <Value name="label">Clients</Value>
        <Value name="key">tB-4UpbT?C(...)40v</Value>
        <Value name="secret">p~#S6O2yApY(...)qWRg==</Value>
        <Value name="authorizedProtocols">Message</Value>
        <Value name="sessionFilter"><![CDATA[
            <Value name="userDomain">
                <Matches>example.com</Matches>
            </Value>
        ]]></Value>
    </ListEntry>
    ...
</List>

Die Liste agentConfiguration

Mit der Liste agentConfiguration erstellst die Konfiguration für alle Agents im Netzwerk.

Im einfachsten Fall erstellst du nur einen einzelnen Eintrag ohne Filter in der Liste. Dieser Eintrag definiert dann die Konfiguration für alle Agents.

Falls du möchtest, kannst du a aber beliebig viele unterschiedliche Konfigurationen erstellen. Mit dem Wert filter wählst du dabei verschiedene Gruppe von Agents aus.

Der letzte Eintrag der Liste muss dabei immer ein Eintrag mit einem leeren oder weggelassenen Filter sein, der auf alle Agents zutrifft. Die Einträge der Liste werden in der konfigurierten Reihenfolge getestet. Der erste Eintrag, dessen Filter auf einen Agent passt wird verwendet um diesen Agent zu konfigurieren. Danach werden keine weiteren Einträge mehr geprüft.

Im folgenden Beispiel wird in fast allen Sessions die Prozessüberwachung aktiviert. In Sessions in denen der Benutzername Administrator ist, wird die Aktivitätserkennung und Prozessüberwachung deaktiviert.

<List name="agentConfiguration">
    <ListEntry>
        <Value name="filter"><![CDATA[
            <Value name="userName">
                <Matches>Administrator</Matches>
            </Value>
        ]]></Value>
        <Value name="idleMonitoringEnabled">No</Value>
    </ListEntry>
    <ListEntry>
        <!-- The last entry matches every agent and defines the default configuration. -->
        <List name="monitoredProcesses">
            <ListEntry>
                <Value name="namePattern">.*</Value>
                <Value name="problemDuration">1</Value>
                <Value name="userCpuThreshold">0</Value>
                <Value name="systemCpuThreshold">0</Value>
                <Value name="memoryThreshold">50mb</Value>
            </ListEntry>
        </List>
    </ListEntry>
</List>

Der Wert filter

Mit dem optionalen Wert filter wählst du eine Gruppe von Agents aus. Lässt du den Filter weg, betrifft der Eintrag automatisch alle Agents.

Falls du den Wert angibst, muss es sich dabei um einen Filterausdruck handeln, so wie er im Kapitel Filterausdrücke beschrieben wird. Die möglichen Werte für den Filter findest du im Kapitel Agent Filter.

<List name="agentConfiguration">
    <ListEntry>
        <Value name="filter"><![CDATA[
            <Value name="userName">
                <Matches>Administrator</Matches>
            </Value>
        ]]></Value>
        <Value name="idleMonitoringEnabled">No</Value>
    </ListEntry>
    ...
</List>

Der Wert idleMonitoringEnabled

Mit dem optionalen Wert idleMonitoringEnabled steuerst du, ob für die gewählte Gruppe von Agents die Aktivitätsüberwachung aktiviert ist. Wenn du diesen Wert auf Yes setzt oder weglässt, ist die Überwachung aktiviert. Setzt du den Wert auf No wird sie deaktiviert.

<List name="agentConfiguration">
    <ListEntry>
        <Value name="filter"><![CDATA[
            <Value name="userName">
                <Matches>Administrator</Matches>
            </Value>
        ]]></Value>
        <Value name="idleMonitoringEnabled">No</Value>
    </ListEntry>
    ...
</List>

Der Wert idleTime

Der Wert idleTime steuert, nach wie vielen Minuten eine Session als Inaktiv gilt. Der minimale Wert ist dabei fünf Minuten. Der maximale Wert ist 1440 Minuten.

Lässt du den Wert weg, wird der Default von 10 Minuten verwendet.

<List name="agentConfiguration">
    <ListEntry>
        <Value name="filter"><![CDATA[
            <Value name="userName">
                <Matches>Administrator</Matches>
            </Value>
        ]]></Value>
        <Value name="idleTime">20</Value>
    </ListEntry>
    ...
</List>

Die Liste monitoredProcesses

Die optionale Liste monitoredProcesses aktiviert die Überwachung problematischer Prozesse. Dabei konfiguriert jeder Eintrag einen Prozess und dessen Grenzwerte.

Alle Einträge werden in der konfigurierten Reihenfolge getestet. Der erste Eintrag dessen namePattern Wert auf den Prozess passt wird verwendet. Danach werden keine weiteren Einträge getestet.

<List name="agentConfiguration">
    ...
    <ListEntry>
        <!-- The last entry matches every agent and defines the default configuration. -->
        <List name="monitoredProcesses">
            <ListEntry>
                <Value name="namePattern">.*</Value>
                <Value name="problemDuration">2</Value>
                <Value name="userCpuThreshold">90</Value>
            </ListEntry>
        </List>
    </ListEntry>
</List>
Der Wert namePattern

Mit dem Wert namePattern konfigurierst du einen Regulären Ausdruck welcher auf den Namen des überwachten Prozesses passen muss. Der Reguläre Ausdruck unterstützt dabei fast alle Möglichkeiten der Perl Compatible Regular Expressions (PCRE).

Verwende das Prefix (?i) um die Gross-/Kleinschreibung zu ignorieren.

<List name="agentConfiguration">
    ...
    <ListEntry>
        <!-- The last entry matches every agent and defines the default configuration. -->
        <List name="monitoredProcesses">
            <ListEntry>
                <Value name="namePattern">(?i)^edge.exe$</Value>
                <Value name="problemDuration">0</Value>
                <Value name="userCpuThreshold">0</Value>
                <Value name="memoryThreshold">1gb</Value>
            </ListEntry>
            <ListEntry>
                <Value name="namePattern">(?i)^word.exe$</Value>
                <Value name="problemDuration">10</Value>
                <Value name="userCpuThreshold">90</Value>
            </ListEntry>
            <ListEntry>
                <Value name="namePattern">.*</Value>
                <Value name="problemDuration">2</Value>
            </ListEntry>
        </List>
    </ListEntry>
</List>
Der Wert monitoringEnabled

Der optionale Wert monitoringEnabled steuert, ob die Überwachung eines Prozesses aktiviert ist. Lässt du den Wert weg, wird er auf Yes gesetzt und aktiviert die Überwachung.

Mit diesem Wert kannst du Ausnahmen definieren. Falls du also mit einem Eintrag eine ganze Gruppe von Prozessen auswählst, kannst du mit einem Eintrag davor, bei welchem du monitoringEnabled auf No setzt einzelne Prozesse ausschliessen.

Ein Prozess gilt als Problematisch, wenn er alle drei Werte userCpuThreshold, systemCpuThreshold und memoryThreshold länger als mit problemDuration definiert überschreitet.

<List name="agentConfiguration">
    ...
    <ListEntry>
        <!-- The last entry matches every agent and defines the default configuration. -->
        <List name="monitoredProcesses">
            <ListEntry>
                <Value name="namePattern">(?i)^hopeless.exe$</Value>
                <Value name="monitoringEnabled">No</Value>
            </ListEntry>
            <ListEntry>
                <Value name="namePattern">.*</Value>
                <Value name="problemDuration">2</Value>
            </ListEntry>
        </List>
    </ListEntry>
</List>
Der Wert userCpuThreshold

Mit dem optionalen Wert userCpuThreshold wählst du die minimale Benutzer-Prozessorauslastung, ab welcher ein Prozess als problematisch gilt. Als Wert gibst du eine Zahl zwischen 0 und 100 an, welche die Auslastung in Prozent definiert.

Lässt du diesen Wert weg, wird 90 als Default verwendet.

<List name="agentConfiguration">
    ...
    <ListEntry>
        <!-- The last entry matches every agent and defines the default configuration. -->
        <List name="monitoredProcesses">
            <ListEntry>
                <Value name="namePattern">(?i)^edge.exe$</Value>
                <Value name="problemDuration">0</Value>
                <Value name="userCpuThreshold">0</Value>
                <Value name="memoryThreshold">1gb</Value>
            </ListEntry>
            <ListEntry>
                <Value name="namePattern">(?i)^word.exe$</Value>
                <Value name="problemDuration">10</Value>
                <Value name="userCpuThreshold">90</Value>
            </ListEntry>
            <ListEntry>
                <Value name="namePattern">.*</Value>
                <Value name="problemDuration">2</Value>
            </ListEntry>
        </List>
    </ListEntry>
</List>
Der Wert systemCpuThreshold

Mit dem optionalen Wert systemCpuThreshold wählst du die minimale System-Prozessorauslastung, ab welcher ein Prozess als problematisch gilt. Als Wert gibst du eine Zahl zwischen 0 und 100 an, welche die Auslastung in Prozent definiert.

Lässt du diesen Wert weg, wird 10 als Default verwendet.

<List name="agentConfiguration">
    ...
    <ListEntry>
        <!-- The last entry matches every agent and defines the default configuration. -->
        <List name="monitoredProcesses">
            <ListEntry>
                <Value name="namePattern">.*</Value>
                <Value name="problemDuration">2</Value>
                <Value name="systemCpuThreshold">50</Value>
            </ListEntry>
        </List>
    </ListEntry>
</List>
Der Wert memoryThreshold

Mit dem optionalen Wert memoryThreshold definierst du die minimale Menge RAM ab wann ein Prozess als problematisch gilt. Der Wert gibt dabei die Speicherauslastung in bytes an, du kannst jedoch auch mit Suffixen wie mb, oder gb arbeiten.

Lässt du den Wert weg, wird der Default 0 verwendet.

<List name="agentConfiguration">
    ...
    <ListEntry>
        <!-- The last entry matches every agent and defines the default configuration. -->
        <List name="monitoredProcesses">
            <ListEntry>
                <Value name="namePattern">.*</Value>
                <Value name="problemDuration">2</Value>
                <Value name="memoryThreshold">500mb</Value>
            </ListEntry>
        </List>
    </ListEntry>
</List>
Der Wert problemDuration

Der optionale Wert problemDuration gibt die Dauer in Minuten an, wie lange ein Prozess die Grenzwerte überschreiten muss, bevor er als problematisch eingestuft wird.

Lässt du den Wert weg, wird 10 als Default verwendet.

<List name="agentConfiguration">
    ...
    <ListEntry>
        <!-- The last entry matches every agent and defines the default configuration. -->
        <List name="monitoredProcesses">
            <ListEntry>
                <Value name="namePattern">.*</Value>
                <Value name="problemDuration">2</Value>
            </ListEntry>
        </List>
    </ListEntry>
</List>

Die Liste clientConfiguration

Mit der Liste clientConfiguration erstellst die Konfiguration für alle Clients.

Im einfachsten Fall erstellst du nur einen einzelnen Eintrag ohne Filter in der Liste. Dieser Eintrag definiert dann die Konfiguration für alle Clients.

Falls du möchtest, kannst du a aber beliebig viele unterschiedliche Konfigurationen erstellen. Mit dem Wert filter wählst du dabei verschiedene Gruppe von Clients aus. Der letzte Eintrag der Liste muss dabei immer ein Eintrag mit einem leeren oder weggelassenen Filter sein, der auf alle Clients zutrifft.

Die Einträge der Liste werden in der konfigurierten Reihenfolge getestet. Der erste Eintrag, dessen Filter auf einen Client passt wird verwendet um diesen Client zu konfigurieren. Danach werden keine weiteren Einträge mehr geprüft.

Im folgenden Beispiel können alle Clients die Session-Liste abfragen. Jedoch nur ein Client mit dem Benutzer Administrator kann Nachrichten senden und den Aktivitätsstatus sehen.

<List name="clientConfiguration">
    <ListEntry>
        <Value name="filter"><![CDATA[
            <Value name="userName">
                <Matches>Administrator</Matches>
            </Value>
        ]]></Value>
        <Value name="enabledFeatures">
            ReadSessionList
            ReadIdleState
            SendMessage
            ManageScheduledMessages
        </Value>
    </ListEntry>
    <ListEntry>
        <!-- The last entry matches every client and defines the default configuration. -->
        <Value name="enabledFeatures">
            ReadSessionList
        </Value>
    </ListEntry>
</List>

Der Wert filter

Mit dem optionalen Wert filter wählst du eine Gruppe von Clients aus. Lässt du den Filter weg, betrifft der Eintrag automatisch alle Clients.

Falls du den Wert angibst, muss es sich dabei um einen Filterausdruck handeln, so wie er im Kapitel Filterausdrücke beschrieben wird. Die möglichen Werte für den Filter findest du im Kapitel Client Filter.

<List name="clientConfiguration">
    <ListEntry>
        <Value name="filter"><![CDATA[
            <Value name="userName">
                <Matches>Administrator</Matches>
            </Value>
        ]]></Value>
        <Value name="enabledFeatures">
            ReadSessionList
            ReadIdleState
            SendMessage
            ManageScheduledMessages
        </Value>
    </ListEntry>
    <ListEntry>
        <!-- The last entry matches every client and defines the default configuration. -->
        <Value name="enabledFeatures">
            ReadSessionList
        </Value>
    </ListEntry>
</List>

Der Wert enabledFeatures

Der optionale Wert enabledFeatures limitiert die verfügbaren Funktionen eines Clients. Lässt du diesen Wert weg, kann der Client alle Funktionen verwenden.

Als Wert gibst du eine Liste der folgenden Bezeichner an, welche du mit Whitespace trennst.

Bezeichner

Beschreibung

ReadSessionList

Die Session-Liste kann gelesen werden.

ReadIdleState

Der Aktivitätsstatus ist in der Session-Liste sichtbar.

SendMessage

Nachrichten können versendet werden.

ManageScheduledMessages

Es können Zeitgesteuerte

<List name="clientConfiguration">
    <ListEntry>
        <Value name="filter"><![CDATA[
            <Value name="userName">
                <Matches>Administrator</Matches>
            </Value>
        ]]></Value>
        <Value name="enabledFeatures">
            ReadSessionList
            ReadIdleState
            SendMessage
            ManageScheduledMessages
        </Value>
    </ListEntry>
    <ListEntry>
        <!-- The last entry matches every client and defines the default configuration. -->
        <Value name="enabledFeatures">
            ReadSessionList
        </Value>
    </ListEntry>
</List>

Der Wert sessionFilter

Mit dem optionalen Wert sessionFilter limitierst du die Sessions welche ein Client abfragen kann. Lässt du diesen Wert weg, können alle Sessions abgefragt werden.

Gibst du diesen Wert an, muss es sich um einen Filterausdruck handeln, wie er im Kapitel Filterausdrücke beschrieben wird. Im Kapitel Die Filter findest du alle Details zu den Feldern welche du in einem Filter verwenden kannst.

Lässt du den Wert weg, können alle Session abgefragt werden.

Der Wert beeinflusst auch an welche Sessions Nachrichten gesendet werden können.

<List name="clientConfiguration">
    <ListEntry>
        <Value name="filter"><![CDATA[
            <Value name="userName">
                <Matches>Administrator</Matches>
            </Value>
        ]]></Value>
        <Value name="enabledFeatures">
            ReadSessionList
            ReadIdleState
            SendMessage
            ManageScheduledMessages
        </Value>
    </ListEntry>
    <ListEntry>
        <!-- The last entry matches every client and defines the default configuration. -->
        <Value name="enabledFeatures">
            ReadSessionList
        </Value>
        <Value name="sessionFilter"><![CDATA[
            <Not>
                <Value name="userName">
                    <Matches>Administrator</Matches>
                </Value>
            </Not>
        ]]></Value>
    </ListEntry>
</List>

Beispielkonfiguration

Die folgende Beispielkonfiguration konfiguriert den Server mit Zugangsdaten für Clients, Agents und der Raptor Integration. Die Prozessüberwachung wird für alle Agents aktiviert und eine Logdatei geschrieben.

 1<?xml version="1.0" encoding="utf-8"?>
 2<Configuration version="1" xmlns="http://educateit.ch/software/BlueStone/Configuration/1"
 3               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 4    <Module name="Application">
 5        <List name="network">
 6            <ListEntry>
 7                <Value name="interface">Agent</Value>
 8                <Value name="protocol">Message</Value>
 9                <Value name="scope">Any</Value>
10            </ListEntry>
11            <ListEntry>
12                <Value name="interface">Client</Value>
13                <Value name="protocol">Message</Value>
14                <Value name="scope">Any</Value>
15            </ListEntry>
16        </List>
17        <List name="secrets">
18            <ListEntry>
19                <Value name="label">Agents</Value>
20                <Value name="key">tB*OsLDo(...)@T40v</Value>
21                <Value name="secret">p~#S6O{(...)StN/xqWRg==</Value>
22                <Value name="authorizedProtocols">Message</Value>
23            </ListEntry>
24            <ListEntry>
25                <Value name="label">Client</Value>
26                <Value name="key">XiV6Cy_(...)q,vu|Dw{</Value>
27                <Value name="secret">(m[iVG(...)8MesglfeoQ==</Value>
28                <Value name="authorizedProtocols">Message</Value>
29                <Value name="enabledFeatures">
30                    ReadSessionList
31                    ReadIdleState
32                    SendMessage
33                    ManageScheduledMessages
34                </Value>
35            </ListEntry>
36            <ListEntry>
37                <Value name="label">RaptorIntegration</Value>
38                <Value name="key">R%mhUf(...)_h#E</Value>
39                <Value name="secret">EGAEC;|(...)sUNY</Value>
40                <Value name="authorizedProtocols">Message</Value>
41                <Value name="enabledFeatures">
42                    ReadSessionList
43                    ReadIdleState
44                    SendMessage
45                    ManageScheduledMessages
46                </Value>
47            </ListEntry>
48        </List>
49        <List name="agentConfiguration">
50            <ListEntry>
51                <!-- The last entry matches every agent and defines the default configuration. -->
52                <List name="monitoredProcesses">
53                    <ListEntry>
54                        <Value name="namePattern">.*</Value>
55                        <Value name="problemDuration">1</Value>
56                        <Value name="userCpuThreshold">0</Value>
57                        <Value name="systemCpuThreshold">0</Value>
58                        <Value name="memoryThreshold">50mb</Value>
59                    </ListEntry>
60                </List>
61            </ListEntry>
62        </List>
63        <List name="clientConfiguration">
64            <ListEntry>
65                <Value name="filter"><![CDATA[
66                    <Value name="userName">
67                            <Matches>Administrator</Matches>
68                    </Value>
69                ]]></Value>
70                <Value name="enabledFeatures">
71                    ReadSessionList
72                    ReadIdleState
73                    SendMessage
74                    ManageScheduledMessages
75                </Value>
76            </ListEntry>
77            <ListEntry>
78                <!-- The last entry matches every client and defines the default configuration. -->
79                <Value name="enabledFeatures">
80                    ReadSessionList
81                    SendMessage
82                    ManageScheduledMessages
83                </Value>
84            </ListEntry>
85        </List>
86    </Module>
87    <Module name="Log">
88        <List name="FileWriter">
89            <ListEntry>
90                <Value name="LogFilePath">c:\Logs\SessionMonitor\SessionMonitor.log</Value>
91            </ListEntry>
92        </List>
93    </Module>
94</Configuration>

Die Filter

An verschiedenen Stellen in der Konfiguration, sowie bei Anfragen über die HTTPS/JSON Schnittstelle kannst du Filter verwenden um nur bestimmten Sessions abzufragen. Dabei handelt es sich bei diesen Filtern um einen Filterausdruck wie er im Kapitel Filterausdrücke beschrieben wird. Falls du noch nie mit Filterausdrücken gearbeitet hast, lies zuerst dieses Kapitel.

Session Filter

Die folgende Tabelle zeigt dir alle gültige Werte welche du in einem Filterausdruck für Sessions verwenden kannst.

Name

Typ

Beschreibung

hostName

Text

Der Name des Computers auf dem die Session läuft.

hostDomain

Text

Der Name der Domain in der die Session läuft.

userName

Text

Der Name des Benutzers der Session.

userDomain

Text

Der Name der Domain des Benutzers der Session.

operatingSystemName

Text

Der Name des Betriebssystems der Session.

operatingSystemVersion

Text

Die Version des Betriebssystems der Session.

operatingSystemDetails

Text

Weitere Details zum Betriebssystems der Session.

connectionSource 1

Text

Die Quelle, wie die Session erfasst wurde.

idleState 1

Text

Der aktuelle Aktivitätsstatus der Session.

idleTime 1

Datum/Zeit

Die Zeit, seit wann die Session ohne Aktivität ist.

created

Datum/Zeit

Die Zeit, wann die Session gestartet wurde.

1(1,2,3)

Verwende dieses Feld nicht in einem Anzeigefilter. Der Inhalt dieser Felder ändert so schnell, dass diese Werte in einem Anzeigefilter zu einem undefinierten Verhalten führen können.

Agent Filter

Um eine bestimmte Gruppe von Agents auszuwählen hast du nur einen eingeschränkten Satz von Feldern zur Verfügung. Die folgende Tabelle zeigt dir alle gültige Werte welche du in einem solchen Filterausdruck verwenden kannst.

Name

Typ

Beschreibung

hostName

Text

Der Name des Computers auf dem die Session läuft.

hostDomain

Text

Der Name der Domain in der die Session läuft.

userName

Text

Der Name des Benutzers der Session.

userDomain

Text

Der Name der Domain des Benutzers der Session.

operatingSystemName

Text

Der Name des Betriebssystems der Session.

operatingSystemVersion

Text

Die Version des Betriebssystems der Session.

operatingSystemDetails

Text

Weitere Details zum Betriebssystems der Session.

Client Filter

Um eine bestimmte Gruppe von Clients auszuwählen hast du nur einen eingeschränkten Satz von Feldern zur Verfügung. Die folgende Tabelle zeigt dir alle gültige Werte welche du in einem solchen Filterausdruck verwenden kannst.

Name

Typ

Beschreibung

hostName

Text

Der Name des Computers auf dem die Session läuft.

hostDomain

Text

Der Name der Domain in der die Session läuft.

userName

Text

Der Name des Benutzers der Session.

userDomain

Text

Der Name der Domain des Benutzers der Session.