<<HOME <TechDocs

Alexander von Boguszewski

TIBCO Hawk Architektur


TIBCO Hawk ist ein Tool zum Überwachen und Verwalten von verteilten Anwendungen und Systemen. Systemadministratoren können Verhalten, Anwendungs- und Systemparameter für alle Knoten in einem Netzwerk überwachen und automatisierte Aktionen ausführen lassen wenn definierte Bedingungen eintreten. Im Gegensatz zu den meisten anderen Management Lösungen ist HAWK als verteiltes System konzipiert. Es gibt daher keinen zentralen Server, der Informationen von den anderen Knoten sammelt. Daher gibt es keinen Single Point of Failure, wenn der Server aus irgendeinem Grund ausfällt. Die Hawk-Agents werden auf jedem Knoten ausgeführt, sammeln und verarbeiten Information und können anhand von Regeln Skripte starten durch oder Alarm Nachrichten innerhalb des Hawk Netzes versenden. Der Hawk Agent dient als Schnittstelle zu dem Hawk Data Transport über den mehrere Agents miteinander verbunden sind. Innerhalb des Agents dienen Microagents dazu den System- oder Programmstatus zu überwachen. Die Überwachung selbst wird über Rulebases realisiert. Diese fassen eine oder mehrere Regeln (Rules) zusammen, mit denen beschrieben wird was, wie überwacht wird. Mit der Datasources der Rule wird die Mikroagent Methode die regelmäßig Daten liefert bezeichnet. Über Tests werden die gelieferten Daten der Datasource überprüft und bei einem positiven Test kann eine Aktion (Action) ausgeführt werden. Beispielsweise kann eine Alert Nachricht versendet werden. Die Nachrichten der einzelnen Agents können mit dem Hawk Display oder dem HawkWebdisplay angezeigt werden. Mit Hilfe des Schedule (Zeitplans / Kalenders) kann festgelegt werden, wann eine Regel gilt. Ein Schedule kann auch verwendet werden um zu unterschiedlichen Zeiten unterschiedliche Aktionen auszuführen. Zum Beispiel soll der Versand einer Warn-E-Mail nur zwischen 06:00 Uhr und 22:00 Uhr stattfinden. Hierbei gilt:
Rulebase → Rule(s) → Test(s) → Action(s)

Dislay

TIBCO Hawk Display ist eine Java-Anwendung über die mit Hawk Agents interagiert werden kann. Hawk Events, die ein Agent verschickt, können mit dem Display angezeigt werden. Rulebases, Regeln und Schedules können mit dem Display editiert werden. TIBCO Hawk Display läuft unabhängig innerhalb einer Hawk Domain, dass heist dass eine oder mehrere Instanzen vom Hawk Display auf jedem Rechner im Netzwerk ausgeführt werden können, die dann jeweils die gleiche Ansicht der Objekte und Ereignisse anzeigen.

Gestartet wird das Hawk Display im Folder
cd <TIBCO_HOME>/hawk/<VERSION>/bin/ oder <TIBCO_CONFIG_HOME>/hawk/<VERSION>/bin/
./tibhawkdisplay

die Konfigurationsdateien sind tibhawkdisplay.tra und <TIBCO_CONFIG_HOME>/hawk//bin/hawkdisplay.cfg

Agent

Konfiguriert wird ein Hawk Agent in der Datei <TIBCO_HOME>/hawk//bin/hawkagent.cfg oder für den Agent einer Domain in der Datei <TIBCO_HOME>/domain//hawkagent.cfg Es kennel auf einem Host mehrere Hawk Agents mit verschiedenen Konfigurationsdateien gestartet werden. Die Konfigurationsdatei ist ganz gut Dokumentiert, die wichtigsten Parameter sind:

Gestartet wird der Hawk Agent mit den Konfigurationsdateien sind tibhawkagent.tra und <TIBCO_CONFIG_HOME>/hawk//bin/hawkagent.cfg

cd <TIBCO_HOME>/hawk/<VERSION>/bin/ oder <TIBCO_CONFIG_HOME>/hawk/<VERSION>/bin/
./tibhawkagent

MicroAgent

Der Hawk Agent stellt das Interface zum Hawk Netzwerk her, der MicroAgent stellt alle verfügbaren Methoden, die auf dem Host ausgeführt werden können zur Verfügung. Jeder Hawk Agent enthält plattformspezifische und plattformunabhängig Standard-Microagents, die geladen werden wenn der Agent gestartet wird. Daneben gibt es noch MicroAgent Plugins, bsp. für EMS und spezifische MicroAgents, wie HKAM für AMX oder der integrierte MicroAgent der BW Prozesse. Plugins werden wie die Standard MicroAgents beim Start des Agents gestartet. Die spezifischen MicroAgents werden eigenständig, bsp. mit dem BW Prozess, gestartet. Das bedeutet, dass Microagents dynamisch hinzugefügt werden können, wenn ein Adapter oder eine Anwendung gestartet wird.

Gestartet wird der Hawk Agent mit den Konfigurationsdateien sind tibhawkhma.tra und <TIBCO_CONFIG_HOME>/hawk//bin/hawkhma.cfg cd <TIBCO_HOME>/hawk/<VERSION>/bin/ oder <TIBCO_CONFIG_HOME>/hawk/<VERSION>/bin/ ./starthma

Folgende MicroAgents werden per Default mit Hawk gestartet

Im Ordner <TIBCO_HOME>/hawk//plugin/ finden sich die mit der default Installation mitgelieferten Plugins. Zu jedem Plugin gehört ein JAR File und eine .hma Konfigurationsdatei. Um ein Plugin zu verwenden muss die .hma Datei direkt unterhalb des plugin Ordners der HAWK Agent Instanz kopiert werden. Beispielsweise um in einen Domain Hawk Agent den JVM MicroAgent zu aktivieren muss die Datei hawkvm.hma nach <TIBCO_HOME>/tra/domain//plugin kopiert werden. Je nach Plugin muss die Datei noch angepasst werden. Es kann ein Plugin auch mehrfach installiert werden. Dies ist beispielsweise für die Überwachung mehrerer EMS Instanzen mit dem EMS MicroAgent notwendig. Jede Microagent enthält einen Satz von Methoden um Informationen zu sammeln und Aktionen auszulösen. Beispielsweise können Microagents eine Anwendung instrumentieren. Unterschieden wird zwischen Invoce und Subscribe der Methode.

Rulebases

Die meisten Überwachungsaufgaben bestehen regelmäßige Überprüfung für einige System-Zustände. Wenn das Problem erkannt wird, wird ein Alarm gesendet oder automatische Korrektur durchgeführt. Beispielsweise wenn ein BW Prozess ausfällt, wird er wieder gestartet. Wenn zu viel Speicherplatz verbraucht wird, werden temporären Dateien gelöscht.

Ein Hawk Agent kann mehrere Rulebases ausführen, die Rulebases müssen aber eindeutige Namen haben. Eine Ruhebase besteht aus mehreren Regeln. Hawk speichert die Rulebases im XML Format als .hrb Datei im Ordner autoconfig. Jede Regel hat folgenden Aufbau

Check Datasource
if Condition 1

Datasource

Die Datasource einer Regel fragt den aktuellen Zustand einer Hawk Mikroagent Methode in regelmäßigen Abstand von einem Konten ab. Nachdem Informationen empfangen wird, werden eines oder mehrerer Tests ausgeführt, um diesen Zustand zu bewerten. Der Intervall in denen die Datenquelle abgefragt wird kann definiert werden.

Condition

Eine Datasource kann entweder einen Rückgabewert oder mehrere in einer N x M Tabelle zurückliefen. In einem einfachen Test kann entweder ein einzelner Wert oder ein Wert per Zeile der Rückgabe abgefragt werden. In einem zusammengesetzter Test können mehrere Werte der mehrere Ausdrücke mit den logischen Operatoren AND, NOT, und OR verknüpft werden.

Actions

Alert und Notification Messages Mit diesen Execute Actions werden ein Alerts innerhalb der Hawk Domain versendet. Die Nachrichten werden in der Hawk-Webkonsole oder dem Display angezeigt. Wichtig ist, dass ein Alert nicht manuell im Display gelöscht wird. Innerhalb der Regel, die den Alert auslöst muss definiert werden, unter welchen Bedingungen eine Clearing Nachricht für diesen Alert gesendet wird. Dies kann eine Zeitspanne oder das eintreten einer neuen Bedingung sein.

Execute Mit der Execute Action wird ein Script auf der Machine ausgeführt auf dem der HawkAgent ausgeführt wird.

Method Mit dieser Action wird eine andere Mikroagent Methode auf diesem Agent aufgerufen

Email Mit dieser Action wird eine Email gesendet. Die Konfiguration des SMTP Servers erfolgt in der hawkagent.cfg

PostCondition Eine PostCondition ist eine interne Statusmeldung, ähnlich wie ein Alert. Eine PostCondition kann aber in anderen Regeln verwendet werden. Da jede Regel nur eine einzelne Datenquelle als Eingabe verwendet, können PostConditions als Bindeglied zwischen Regeln mit verschiedenen Datenquellen dienen. Die Test Expression in der Regel wäre Beispielsweise

((Process Count == 1) AND (${Posted.TEST} postedConditionExists ))

Im Hawk Display werden die in der Rulebase enthaltenen PostConditions automatisch im Compound Test Editor hinzugefügt.

Erzeugen einer Rulebase Bild für Bild

1. Selektiere den Hawk Agent wähle Rulebases im Kontextmenü

Rulebases konfigurieren

2. Lege eine neue Rulebase an

Neue Rulebase anlegen

3. Eindeutigen Namen für die Rulebase setzen und eine neue Regel anlegen

Neue Regel anlegen

4. Datasource für die Regel festlegen

Datasource konfigurieren

5. Im Process Microagent alle BWEngines abfragen

Process Microagent konfigurieren

6. Neuen Test anlegen

Test konfigurieren

7. Test ob der BWEngineProzess sampleProj-Process_Archive-1.tra läuft.

Überprüfe ob BWENGINE Process aktiv ist

8. Neue Action anlegen

Action anlegen

9. Send Alert Message “sampleProj-Process_Archive-1.tra” nicht gestartet senden

Sende Hawk Alert Nachricht falls Prozess mit dem String ..sampleProj-Process_Archive-1.tra.. nicht gestartet ist

11. Advanced Test Options

Erweiterte Optionen konfigurieren

11. Clear Action konfigurieren

Alert löschen, wenn der Prozess wieder gestartet wurde

12. Advanced Test Options

Nächste Regel konfigurieren

13. Apply Changes

Speichern und Regel im Agent aktivieren

Export der Rulebase

Vom Hawk Display aus kann die Rulebase als XML Datei exportiert werden:

Export Rulebase

Export Rulebase

Beispiel XML Datei

<?xml version="1.0" encoding="UTF-8" ?>
<ruleBase>
	<version>5.1.0</version>
	<name><![CDATA[MeineRulebase]]></name>
	<schedule></schedule>
	<author>tibco on host linuxAgent(127.0.0.1) at 19:16 Mon, Apr 4, 2016</author>
	<lastModification>tibco on host linuxAgent(127.0.0.1) at 19:58 Mon, Apr 4, 2016</lastModification>
	<comment><![CDATA[]]></comment>
	<rule>
		<name><![CDATA[COM.TIBCO.hawk.hma.Process:getInstanceCount(Process Name=bwengine):60]]></name>
		<schedule></schedule>
		<overRuling>0</overRuling>
		<dataSource>
			<microAgentName><![CDATA[COM.TIBCO.hawk.hma.Process]]></microAgentName>
			<methodName>getInstanceCount</methodName>
			<dataElement name="Process Name">
				<dataObject class="java.lang.String" ><![CDATA[bwengine]]></dataObject>
			</dataElement>
			<interval>60000</interval>
		</dataSource>
		<test>
			<name><![CDATA[(Process Count == 0)]]></name>
			<schedule></schedule>
			<operator class="COM.TIBCO.hawk.config.rbengine.rulebase.operators.EqualsNumber" >
				<operator class="COM.TIBCO.hawk.config.rbengine.rulebase.operators.RuleData" >
					<dataObject class="java.lang.String" ><![CDATA[Process Count]]></dataObject>
				</operator>
				<dataObject class="java.lang.Integer"  value="0" />
			</operator>
			<consequenceAction>
				<name><![CDATA[sendAlertHigh(alertMsg=NO BWENGINE PROCESSES RUNNING)]]></name>
				<schedule></schedule>
				<microAgentName>COM.TIBCO.hawk.microagent.RuleBaseEngine</microAgentName>
				<methodName>sendAlertMessage</methodName>
				<dataElement name="message">
					<dataObject class="COM.TIBCO.hawk.config.rbengine.rulebase.util.AlertHigh" ><![CDATA[NO BWENGINE PROCESSES RUNNING]]></dataObject>
				</dataElement>
				<properties>
				</properties>
				<performOnceOnly/>
				<escalationTime>0</escalationTime>
			</consequenceAction>
			<trueConditionPolicy>
				<trueCountThreshold>1</trueCountThreshold>
			</trueConditionPolicy>
			<clearOn>
				<clearOnFirstFalse/>
			</clearOn>
		</test>
	</rule>
	<rule>
		<name><![CDATA[COM.TIBCO.hawk.hma.Process:getProcess(Process Name=bwengine):60]]></name>
		<schedule></schedule>
		<overRuling>0</overRuling>
		<dataSource>
			<microAgentName><![CDATA[COM.TIBCO.hawk.hma.Process]]></microAgentName>
			<methodName>getProcess</methodName>
			<dataElement name="Process Name">
				<dataObject class="java.lang.String" ><![CDATA[bwengine]]></dataObject>
			</dataElement>
			<interval>60000</interval>
		</dataSource>
		<test>
			<name><![CDATA[(Command !Contains sampleProj-Process_Archive-1.tra)]]></name>
			<schedule></schedule>
			<operator class="COM.TIBCO.hawk.config.rbengine.rulebase.operators.NotContains" >
				<operator class="COM.TIBCO.hawk.config.rbengine.rulebase.operators.RuleData" >
					<dataObject class="java.lang.String" ><![CDATA[Command]]></dataObject>
				</operator>
				<dataObject class="java.lang.String" ><![CDATA[sampleProj-Process_Archive-1.tra]]></dataObject>
			</operator>
			<consequenceAction>
				<name><![CDATA[sendAlertHigh(alertMsg=BWEngine Prozess  ${Command} nicht gestartet! )]]></name>
				<schedule></schedule>
				<microAgentName>COM.TIBCO.hawk.microagent.RuleBaseEngine</microAgentName>
				<methodName>sendAlertMessage</methodName>
				<dataElement name="message">
					<dataObject class="COM.TIBCO.hawk.config.rbengine.rulebase.util.AlertHigh" ><![CDATA[BWEngine Prozess  ${Command} nicht gestartet! ]]></dataObject>
				</dataElement>
				<properties>
				</properties>
				<performOnceOnly/>
				<escalationTime>0</escalationTime>
			</consequenceAction>
			<trueConditionPolicy>
				<trueCountThreshold>1</trueCountThreshold>
			</trueConditionPolicy>
			<clearOn>
				<clearOnFirstFalse/>
				<clearAction>
					<name><![CDATA[sendNotification(alertMsg= BWEngine ${Command} recoverd)]]></name>
					<schedule></schedule>
					<microAgentName>COM.TIBCO.hawk.microagent.RuleBaseEngine</microAgentName>
					<methodName>sendAlertMessage</methodName>
					<dataElement name="message">
						<dataObject class="COM.TIBCO.hawk.config.rbengine.rulebase.util.Notification" ><![CDATA[ BWEngine ${Command} recoverd]]></dataObject>
					</dataElement>
					<properties>
					</properties>
					<clearAction>true</clearAction>
				</clearAction>
			</clearOn>
		</test>
	</rule>
</ruleBase>