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:
- hawkdomain - Name der HawkDomain in der der Agent sich befindet. Dient zum separieren verschiedener Aufgaben. Bsp: technisches Domain Monitoring und Management vs. fachliches/business Monitoring
- cluster - Dient zur Gruppierung verschiedener Agents innerhalb einer Domain, bsp: ProjectA/ProjectB oder BW/BE/AMX. Wird auch im Display zur Gruppierung verwendet.
- agent_name - lesbarer Name des Agents, wird auch im Display so angezeigt
- rd_session|as_session|ems_transport definiert das Medium über der die Hawk Agents miteinander kommunizieren. Es kann nur einer der Parameter aktiv sein.
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
- Self - sammelt die Versionsinformationen für die lokalen Agenten
- Custom - führt über die Befehlszeile Kommandos aus. Als Rückgabewert liefert der MicroAgent Text- oder numerische Ergebnisse des Kommandos.
- Logfile - jedes Mal, wenn eine Log-Datei eine neue Zeile hinzugefügt wird erzeugt der MircoAgent ein Event
- Prozess - Fragt die Instanzen eines Prozesses und Nutzungs-Statistiken ab.
- FileStat - sammelt Informationen über Dateien.
- SysInfo - grundlegende Informationen über das Betriebssystem, Hardware-Architektur, Computername und IP-Adresse.
- Rendezvous - Aktivität des Rendezvous Damon.
- RuleBaseEngine - Führt Aktionen auf der Rulebases, wie Load und Unload der Regeln aus.
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
- Action 1
- Action 2
if Condition 2 - Action 3
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
Rulebases konfigurieren
Neue Rulebase anlegen
Neue Regel anlegen
Datasource konfigurieren
Process Microagent konfigurieren
Test konfigurieren
Überprüfe ob BWENGINE Process aktiv ist
Action anlegen
Sende Hawk Alert Nachricht falls Prozess mit dem String ..sampleProj-Process_Archive-1.tra.. nicht gestartet ist
Erweiterte Optionen konfigurieren
Alert löschen, wenn der Prozess wieder gestartet wurde
Nächste Regel konfigurieren
Speichern und Regel im Agent aktivieren
Export der Rulebase
Vom Hawk Display aus kann die Rulebase als XML Datei exportiert werden:
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>