Vorbei sind die Zeiten, in denen sich Infrastrukturen manuell verwalten ließen. Hier setzen verschiedene Tools an. Mit StackStorm steht Unternehmen eine quelloffene, Event-basierte Plattform für die Runbook-Automatisierung zur Verfügung. Der Artikel beschreibt den Grundaufbau und den praktischen Einsatz des Tools.
Wenn wir der Corona-Krise etwas Gutes abgewinnen wollen, so ist es der Umstand, dass diese wie ein Katalysator auf die Digitalisierung aller Lebensbereiche wirkt. Doch genau dies stellt IT-Administratoren vor neue Herausforderungen, denn die Umgebungen werden nicht nur immer komplexer, sondern auch vielfältiger. Damit einhergeht ein erhöhter Verwaltungsaufwand. Dank moderner Umgebungen zu Infrastrukturmanagement verringern sich fehleranfällige Anpassungen.
Kenner handeln Infrastructure-as-Code (IaC) schon länger als den Schlüssel für das Infrastrukturmanagement von morgen. IaC ist als Abstraktionskonzept für die Verwaltung von Hard- und Softwarekomponenten einer IT-Infrastruktur zu verstehen. Dabei kommen maschinenlesbare Definitionsdateien anstelle der physischen Hardwarekonfiguration oder spezieller Konfigurationstools zum Einsatz.
StackStorm auf einen Blick
StackStorm [1] wird häufig in einem Atemzug mit Ansible oder dem von VMware akquirierten SaltStack genannt. Doch der Vergleich hinkt, denn StackStorm fokussiert das Durchführen von Managementaufgaben beziehungsweise das Ausführen von Workflows auf Event-Basis. Das Werkzeug definiert insbesondere Trigger und Ereignisse, um dann auf diese beziehungsweise Statusänderungen zu reagieren. StackStorm beherrscht die automatische Korrektur von Systemeinstellungen, Sicherheitsreaktionen, die regelbasierte Fehlerbehebung und das Deployment. Das Tool verfügt weiterhin über eine Rules Engine und einen Workflow-Manager.
Wenn wir der Corona-Krise etwas Gutes abgewinnen wollen, so ist es der Umstand, dass diese wie ein Katalysator auf die Digitalisierung aller Lebensbereiche wirkt. Doch genau dies stellt IT-Administratoren vor neue Herausforderungen, denn die Umgebungen werden nicht nur immer komplexer, sondern auch vielfältiger. Damit einhergeht ein erhöhter Verwaltungsaufwand. Dank moderner Umgebungen zu Infrastrukturmanagement verringern sich fehleranfällige Anpassungen.
Kenner handeln Infrastructure-as-Code (IaC) schon länger als den Schlüssel für das Infrastrukturmanagement von morgen. IaC ist als Abstraktionskonzept für die Verwaltung von Hard- und Softwarekomponenten einer IT-Infrastruktur zu verstehen. Dabei kommen maschinenlesbare Definitionsdateien anstelle der physischen Hardwarekonfiguration oder spezieller Konfigurationstools zum Einsatz.
StackStorm auf einen Blick
StackStorm [1] wird häufig in einem Atemzug mit Ansible oder dem von VMware akquirierten SaltStack genannt. Doch der Vergleich hinkt, denn StackStorm fokussiert das Durchführen von Managementaufgaben beziehungsweise das Ausführen von Workflows auf Event-Basis. Das Werkzeug definiert insbesondere Trigger und Ereignisse, um dann auf diese beziehungsweise Statusänderungen zu reagieren. StackStorm beherrscht die automatische Korrektur von Systemeinstellungen, Sicherheitsreaktionen, die regelbasierte Fehlerbehebung und das Deployment. Das Tool verfügt weiterhin über eine Rules Engine und einen Workflow-Manager.
Im Konzert der Großen ist StackStorm bislang noch ein recht unbekannter Player, der auf die Integration und Automatisierung von Diensten und Tools zielt. Das Ziel ist die Erfassung einer vorhandenen Infrastruktur und Anwendungsumgebung, um beim Auftreten von bestimmten Ereignissen infrastrukturweit automatisiert reagieren zu können.
Einige Beispiele verdeutlichen das Potenzial, das sich durch den Einsatz von StackStorm ergibt. Angenommen, Sie setzen beim Infrastrukturmonitoring auf Nagios, so können Sie mit StackStorm weitere Diagnoseprüfungen anstoßen und die Ergebnisse Drittapplikationen zur Verfügung stellen. Doch damit nicht genug: Sie können das Werkzeug auch zur automatisierten Korrektur einsetzen. Dazu lassen sich kritische Systeme überwachen und bei der Identifikation von Fehlern Folgemaßnahmen initiieren. StackStorm unterschützt Sie nicht zuletzt beim Deployment. Sie können mit dem Tool etwa einen neuen AWS-Cluster bereitstellen oder den Loadbalancer für die notwendige Lastverteilung bei einer drohenden Systemüberlastung aktivieren.
Vom Event zur Aktion
Um verschiedene Aktionen initiieren zu können, muss das System über entsprechende Zustände beziehungsweise Events informiert sein. Dazu bedient sich StackStorm verschiedener Sensoren, die als Python-Plug-ins für die Integration der verschiedenen Infrastrukturkomponenten sorgen. Registriert ein Sensor ein definiertes Ereignis, gibt er einen StackStorm-Trigger aus. Die Managementumgebung unterscheidet dabei zwischen generischen und Integrationstriggern. Sie können eigene Trigger-Typen in Form eines Sensor-Plug-ins definieren, sollte StackStorm selbst nicht den gewünschten Trigger-Typ bereitstellen.
Ein weiteres wichtiges Element des Konzepts ist die Aktion. Dieser Begriff subsummiert alle Aktionen , die die Managementumgebung an Infrastrukturkomponenten ausführen kann. Die meisten Aktionen kommen automatisiert zur Ausführung, aber grundsätzlich ist auch die Befehlsübergabe über das integrierte CLI oder eine API möglich. Der häufigste Anwendungsfall ist allerdings die Verwendung in Regeln und durch Trigger.
StackStorm zeichnet sich durch ein weiteres Konzept aus: die Workflows. Sie bündeln verschiedene Aktionen zu sogenannten "Uber Actions", definieren die Ausführungsreihenfolge, die Übergangsbedingungen und sorgen für die Datenübergabe. Da es sich bei den meisten Automatisierungsaufgaben um eine Abfolge von zwei oder mehr Aktionen handelt, sind Workflows als das bestimmende Element in der StackStorm-Umgebung zu betrachten. Um Ihnen die Ausführung von wiederkehrenden Aufgaben zu vereinfachen, besitzt das Werkzeug eine Workflow-Bibliothek.
Die Managementumgebung stellt Ihnen mit den sogenannten "Packs" eine weitere Funktion für die Bündelung von Aufgaben zur Verfügung. Sie erlauben das Zusammenfassen von Integrationsfunktionen (Trigger und Aktionen) sowie von Automatisierungsmechanismen (Regeln, Workflows). Über die Plattform "StackStorm Exchange" [2] steht eine wachsende Zahl von Integrationsmodulen für das Active Directory, AWS, Icinga, Jenkins, Exchange, MySQL, Nagios oder OpenStack zur Verfügung.
StackStorm verfügt außerdem über einen Auditierungsmechanismus, der alle relevanten Details zur manuellen oder automatischen Ausführung aufzeichnet. Die Kernfunktion des Tools lässt sich auch durch den Kreislauf von Trigger, Regel, Workflow, Aktion und Ergebnissen beschreiben. Laut der Stack-Storm-Website setzen verschiedene bekannte Unternehmen diese Umgebungen bereits in ihren IT-Infrastrukturen ein, beispielsweise Cisco, NASA und Netflix.
So gelingt der Schnelleinstieg
StackStorm wurde für Linux-basierte Betriebssysteme entwickelt und spielt insbesondere mit Ubuntu, Red Hat Enterprise Linux und CentOS hervorragend zusammen. Besonders einfach gestaltet sich die Installation unter einer Linux-Neuinstallation. Stellen Sie hier sicher, dass Curl vorhanden ist. Als Administrator führen Sie dann zur Installation folgenden Befehl aus:
Dieser Befehl spielt eine vollständige StackStorm-Version auf. Die Entwickler weisen explizit darauf hin, dass bei Linux-Systemen mit bereits installierten (Enter-
prise-)Applikationen Probleme vorprogrammiert sind. Führen Sie die Installation hinter einem Proxy-Server aus, exportieren Sie die Proxy-ENV-Variablen "http_proxy", "https_proxy" und "no_proxy", bevor Sie das Skript ausführen:
export http_proxy = http: //proxy.server.de:port
export https_proxy = http: //proxy.server.de:port
export no_proxy = localhost, 127.0.0.1
Für den Zugriff auf die Web-GUI sind eventuell Anpassungen der Firewalleinstellungen notwendig.
Die Kernfunktion von StackStorm stellt der st2-Service bereit, den Sie unter "/opt/ stackstorm/st2" finden. Die Konfiguration dieses Diensts erfolgt über die zugehörige Konfigurationsdatei "/etc/ st2/st2.conf". StackStorm verfügt über eine eigene Web-GUI, die im Verzeichnis "/opt/stackstorm/ static/webui" zu finden ist und sich über die JavaScript-basierte Konfigurationsdatei "webui/config.js" konfigurieren lässt.
Die Entwickler präferieren beim Einsatz von StackStorm die Verwendung des CLI. Mit Hilfe einiger Basisbefehle können Sie sich in die Umgebung einarbeiten. Der Befehl st2 –version gibt beispielsweise die verwendete Version aus. Um die verfügbaren Trigger, Aktionen und Regeln anzuzeigen, verwenden Sie folgende Kommandos:
st2 action list --pack=core
st2 trigger list
st2 rule list
StackStorm besitzt nicht nur einige Standard-Trigger und -Regeln, sondern auch verschiedene vordefinierte Aktionen. Diese können Sie nach dem gleichen Schema abrufen. Um die Liste aller Aktion in der Bibliothek abzurufen, verwenden Sie st2 action list. Die Metadaten holen Sie mit st2 action get core.http auf den Bildschirm und um die Details und die verfügbaren Parameter einzusehen, verwenden Sie st2 run core.http -help. Um eine Aktion aus dem CLI heraus zu initiieren, verwenden Sie folgendes Kommando:
st2 run Schluessel=Wert '<etwaige Argumente>'
Mit der Aktion "core.remote" können Sie beispielsweise einen Linux-Befehl auf mehreren Hosts via SSH ausführen. Dazu muss lediglich der passwortlose SSH-Zugang auf den verschiedenen Hosts konfiguriert sein. Die Ausführung erfolgt nach folgendem Schema:
st2 run core.remote hosts='<www.beispielhost1.de>, <www.beispielhost2.de>' username='<SSH-Benutzer>' -- ls -l
Die Action-History und Details zur Ausführung rufen Sie mit dem Befehl st2 execution ab. Die Liste der Ausführungen zeigt st2 execution list an. Um die Ausgabe auf die letzten zehn Ausführungen zu beschränken, verwenden Sie st2 execution list -n 10.
Regeln sind ein essenzielles Instrument des StackStorm-Konzepts. Das Werkzeug verwendet Regeln, um Aktionen oder Workflows auszuführen, wenn spezifische Ereignisse in der IT-Infrastruktur eingetreten sind. Ereignisse werden normalerweise von Sensoren registriert. Wenn ein solcher ein Ereignis erfasst, löst er einen Trigger aus, der selbst wieder die Ausführung einer Regel anstößt. Die Konditionen einer solchen Regel bestimmen, welche Aktionen stattfinden.
Eine StackStorm-Installation verfügt standardmäßig über ein Beispiel-Pack, das auch verschiedene Musterregeln umfasst. Eine solche ist die im Kasten abgedruckte "Sample rule with webhook". Bei der Regeldefinition handelt es sich um eine YAML-Datei, die die drei Abschnitte Trigger, Kriterien und Aktion beinhaltet. Dieses Beispiel ist so konzipiert, dass es auf einen WebHook-Trigger reagiert und Filterkriterien auf den Inhalt des Triggers anwendet.
Bild 2: Die Automatisierungsumgebung verfügt über ein übersichtliches Webinterface – allerdings empfehlen die Entwickler die Verwendung des CLI.
Routinepakete vordefinieren
Der Umgang mit StackStorm vereinfacht sich durch die Verwendung der bereits genannten Packs. Diese können Sie als Bereitstellungseinheit für die Integrationen und die Automatisierungen von etablierten Diensten und Applikationen verstehen. Dank dieses Ansatzes ist es einfach, AWS-, Docker-, GitHub- oder vergleichbare Systeme in die Managementumgebung zu integrieren. In einem solchen Paket sind Aktionen, Workflows, Regeln, Sensoren und Aliase gebündelt. Verschiedene Packs erfassen Automatisierungsmuster – die Entwickler sprechen auch von Automatisierungspaketen.
Vordefinierte Integrationspakete stehen insbesondere über die StackStorm-Exchange-Plattform zur Verfügung, lassen sich aber auch selbstständig anlegen. Sie verwalten die StackStorm-Pakete mit dem Befehl st2 pack <Paketname>. Die Standardinstallation verfügt bereits über einige vorinstallierte Pakete, die Sie mit dem list-Befehl abrufen. Sie liegen standardmäßig im Verzeichnis "/opt/stackstorm/packs". Was StackStorm Exchange nicht auf den ersten Blick verrät: Dort stehen weit über hundert StackStorm-Pakete zur Verfügung. Sie können den Bestand bequem aus dem CLI heraus durchsuchen. Dazu verwenden Sie die beiden Befehle st2 pack search und st2 pack show. Wenn Sie ein für sich interessantes Paket identifiziert haben, installieren Sie es über das CLI – dies erfolgt auf Basis der Exchange-Bezeichnung:
st2 pack install <Paketname>
Sie können mehrere Pakete gleichzeitig installieren:
st2 pack install <Paket1> <Paket2>
Verschiedene Pakete sind von der Existenz anderer abhängig. Entsprechende Informationen sind im "dependencies"-Abschnitt der Datei "pack.yaml" hinterlegt. Sie müssen sich nicht weiter mit diesen Abhängigkeiten beschäftigen, denn StackStorm installiert automatisch die betreffenden Pakete.
Mit der Installation allein ist es in der Regel aber nicht getan: Sie müssen diese an die jeweiligen Rahmenbedingungen anpassen. Sieht ein Paket den Versand von Hinweis-E-Mails vor, so ist beispielsweise die Konfiguration des SMTP-Servers notwendig. Eine weitere typische Notwendigkeit: die Angabe von Zugangsdaten für eine Service. Meist verläuft die Paketkonfiguration interaktiv, so etwa mit st2 pack config cloudflare bei der Einrichtung des Cloudflare-Pakets.
Bei diesem Beispiel präsentiert Ihnen das CLI einen interaktiven Dialog mit Standardwerten, Vorschlägen und Eingabefeldern für eigene Einstellungen. Die Paketkonfiguration wird in der Datei "/opt/ stackstorm/configs/<Paketname>.yaml" gespeichert.
Aktionen sind eines der zentralen Konzepte der StackStorm-Umgebung. Dabei handelt es sich um Code-Snippets, die grundsätzlich beliebige Automatisierungs- oder Korrekturaufgaben in Ihrer Umgebung ausführen. Diese können in jeder Programmiersprache geschrieben sein. Mit den Actions implementieren Sie verschiedenste Managementaufgaben; Sie können beispielsweise Dienste auf einem Server neu starten, eine neuen Cloudserver aufsetzen, eine Nagios-Warnung verifizieren, eine Benachrichtigung per E-Mail oder SMS verwenden, einen Docker-Container starten, einen Snapshot einer VM erstellen oder einen Nagios-Check initiieren. Aktionen laufen dann an, wenn eine Regel mit übereinstimmenden Kriterien diese auslöst. Die Ausführung kann über das CPI oder eine API erfolgen.
Um eine Aktion manuell auszuführen, verwenden Sie folgende Befehle:
st2 run <Aktion mit Parameter>
st2 action execute <Aktion mit Parameter>
Um eine eigene Aktion anzulegen, müssen Sie wieder eine YAML-basierte Metadatei mit den relevanten Informationen und ein Skript erstellen, das die Aktionslogik implementiert. Den Einstieg vereinfacht die Verwendung von vordefinierten Aktionen, die Teil des Core-Pakets sind. Mit der Aktion "core.local" können Sie beliebige Shell-Kommandos ausführen. Ein einfaches Beispiel:
st2 run core.local cmd='ls -l'
Die Aktion "core.remote" erlaubt die Ausführung von Befehlen auf Remote-Systemen, etwa
st2 run core.remote cmd='ls -l' hosts='host1,host2' username='user1'
Mit "core.http" führen Sie einen HTTP-Request aus:
st2 run core.http url="http://www.server.de/get" method="GET"
Die folgende Aktion ähnelt "curl" und erlaubt die Authentifizierung auf einem Remote-System mittels Zugangsdaten:
st2 run core.http url="http://www. server.de/get" method="GET" username=user1 password=pass1
Diese Aktionen decken nicht nur die Standardaufgaben ab, sondern eignen sich auch hervorragend, um sich in die StackStorm-Umgebung einzuarbeiten. Die vollständige Liste der "core"-Pakete rufen Sie mit folgendem Befehl ab:
st2 action list --pack=core
StackStorm hat eine weitere Besonderheit zu bieten: Wenn Sie bereits über Skripte in einer beliebigen Programmier- oder Skriptsprache verfügen, können Sie diese mit Hilfe von StackStorm in eine Aktion konvertieren. Zunächst müssen Sie dazu sicherstellen, dass das Skript den Konventionen der StackStorm-Entwickler entspricht. Wichtig ist insbesondere, dass es nach erfolgter Ausführung einen Statuscode von Null liefert und bei einem Fehler ungleich Null beendet wird. Das Werkzeug verwendet die Exit-Codes, um festzustellen, ob das Skript erfolgreich abgeschlossen wurde. Außerdem müssen Sie eine Metadatendatei generieren, die neben dem Skriptnamen eine Beschreibung, den Einstiegspunkt, den zu verwendenden Runner und die Skriptparameter aufführt.
Sensoren und Trigger nutzen
Die Aufgaben der Sensoren bestehen in der Integration von externen Systemen und Ereignissen in eine StackStorm-Umgebung. Diese fragen entweder externe Systeme auf spezifische System- und Umgebungsvariablen ab oder aber warten, bis sie ein auffälliges beziehungsweise kritisches Ereignis registrieren. Erkennt StackStorm dies aufgrund einer Sensorkonfiguration, so wird ein Trigger ausgelöst und auf Grundlage eines Regelwerks mögliche Aktionen ausgeführt. Das Werkzeug besitzt eine Sensorenschnittstelle, die die Daten abfragt beziehungsweise erfasst. In den meisten Fällen findet ein Zusammenspiel von Sensoren und Triggern statt, allerdings gibt es auch Trigger, die ohne Sensoren auskommen, beispielsweise der WebHooks-Trigger.
StackStorm kommt bei einer Neuinstallation ab Werk mit verschiedenen internen Triggern, die Sie in Ihrem Regelwerk anwenden können. Diese lassen sich von Nicht-System-Triggern dadurch unterscheiden, dass ihnen "st2" vorangestellt ist:
- core.st2.generic.actiontrigger: Dies ist ein generischer Trigger für die Aktionsausführung.
- core.st2.generic.notifytrigger: Löst eine Benachrichtigung aus.
- core.st2.action.file_written: Diesen Trigger benötigen Sie, um auf Dateien auf dem Zielsystem zu schreiben.
- core.st2.generic.inquiry: Führt eine neue Statusabfrage aus, nachdem ihm der Zustand "Pending" zugewiesen wurde.
Sie finden in einer StackStorm-Installation verschiedene sensorspezifische Trigger. So zeigt der Trigger "core.st2.sensor. process_spawn" an, dass ein Sensorprozess aktiviert wurde. Der Trigger "core.st2. sensor.process_exit" informiert darüber, dass ein Sensorprozess angehalten wurde. Sensoren laufen als separate Prozesse und können dabei verschiedene Operationen ausführen. Bevor sich diese ausführen lassen, ist eine Registrierung mit "strctl" notwendig. Nach der erfolgreichen Registrierung startet der Sensor automatisch.
Bild 3: In der kommerziellen StackStorm-Variante "Extreme Workflow Designer" steht Ihnen ein visueller Workflow-Editor zur Verfügung, der die Konfiguration und Verwaltung von Abläufen vereinfacht.
Workflows generieren
Die Automatisierungs- und Managementaufgaben sind in der Regel durch eine Abfolge von mehr oder minder vielen Aktionen gekennzeichnet. Nun ergibt es in der Praxis wenig Sinn, nur eine Aktion zu initiieren und eine darauf aufbauende zu einem späteren Zeitpunkt auf den Weg zu bringen. Um verschiedene Aufgaben zu bündeln, verwendet StackStorm Workflows. Diese ordnen Aktionen einer höheren Automatisierungsebene zu und koordinieren deren Ausführung, indem die richtige Aktion zur richtigen Zeit mit der richtigen Eingabe abläuft. In einem solchen Ausführungsstrang lassen sich Informationen weiterreichen und -verarbeiten. Wie die Aktionen verwalten Sie die Workflows in der Automatisierungsbibliothek und können bei Bedarf auf die dort hinterlegten Konfigurationen zurückgreifen. Grundsätzlich kann ein Workflow sogar aus verschiedenen Workflows aufgebaut sein.
StackStorm kennt zwei Workflow-Varianten: ActionChain und Orquesta. Action-Chain ist die ältere Variante, die eine einfache Syntax für die Definition einer Aktionskette verwendet. Der Nachteil dieser Variante: Hier ist kein komplexes Workflow-Handling möglich. Orquesta ist eine neue Workflow-Engine, die sequenzielle Workflows oder komplexe Workflows mit Gabelungen, Verknüpfungen sowie ausgefeilte Datentransformationen und Abfragen kennt. Die Entwickler raten zur Verwendung von Orquesta.
StackStorm stellt Ihnen verschiedene Instrumente für das Erzeugen von Workflows zur Verfügung. In der Open-Source-Variante müssen Sie sich der konsolenbasierten Entwicklung bedienen. Die kommerzielle StackStorm-Variante trägt die Bezeichnung "Extreme Workflow Composer" [3]. Hier ist auch ein visueller Editor integriert, mit dem Sie die Aktionen und deren Abfolge per Drag&Drop gestalten.
StackStorm befindet sich im aktiven Entwicklungsprozess und soll eine kontinuierliche Weiterentwicklung erfahren. Die Roadmap [4] fasst geplante Neuerungen zusammen. Allerdings gehen die Vorankündigungen nicht über die der aktuellen Version 3.3.0 hinaus. Unsere Anfrage zu kommenden Features ist bis zum Redaktionsschluss leider unbeantwortet geblieben.
Fazit
Keine Frage: StackStorm verfolgt ein hochinteressantes Konzept, das die Automatisierung von komplexen IT-Infrastrukturen deutlich vereinfacht. Als Nachteil kann sich dabei die Beschränkung auf Events und Service-Zustände erweisen. Hier wären Ansätze, die ereignisabhängig und unabhängig agieren können, womöglich die bessere Lösung.