Stackstorm 入門介紹
- 2020 年 1 月 21 日
- 筆記
一句話概況:stackstorm是一個事件驅動的自動化引擎。StackStorm 是一坨功能強大的開源自動化平台,可將通過使用插件封裝API的方式,將所有應用程式,服務和工作流程連接起來。這裡的所有包括了目前我們常用Gitlab、Zabbix、ELK、AWS 等服務。
Stackstorm 具有很好的可擴展性,靈活性,完美支援 ChatOps 和全操作的API實現。通過Stackstorm 可以將您現有的基礎架構和應用程式環境聯繫在一起,以便您可以更輕鬆地自動化操作該環境。它特別專註於針對事件採取行動。
便利的故障排除 – 觸發由Nagios,Sensu,New Relic和其他監控系統捕獲的系統故障,在物理節點、OpenStack或Amazon實例和應用程式組件上運行一系列診斷檢查,並將結果發布到IM中,比如 HipChat、JIRA 或者 Slack 等。 自動修復 – 識別和驗證OpenStack計算節點上的硬體故障,正確排空實例並向管理員發送關於潛在停機時間的電子郵件,但如果出現任何問題 – 凍結工作流程並呼叫PagerDuty喚醒人員。 持續部署 – 與Jenkins一起構建和測試,配置新的AWS群集,基於NewRelic的應用程式性能數據,打開負載均衡器的一些流量,以及前滾或回滾。
Stackstorm工作原理

主要組件角色:
感測器(Sensors) 用於分別接收或監視事件的入站或出站集成的Python插件。 當來自外部系統的事件發生並由感測器處理時,StackStorm觸發器將發射到系統中。 觸發器(Triggers)外部事件的StackStorm表示形式。 有通用觸發器(例如定時器,webhooks)和集成觸發器(例如,Sensu告警,JIRA問題更新)。 通過編寫感測器插件可以定義新的觸發器類型。 動作(Actions)StackStorm出站集成。 有通用動作(ssh,REST調用),集成(OpenStack,Docker,Puppet)或自定義操作。 動作是Python插件或任何腳本,通過添加幾行元數據將其消耗到StackStorm中。 動作可以由用戶通過CLI或API直接調用,或者作為規則和工作流程的一部分使用和調用。 規則(Rules)將觸發器映射到動作(或工作流),應用匹配條件並將觸發器載入到動作輸入中。 工作流(Workflows)將動作拼接成「超級動作」,定義順序,轉換條件以及傳遞數據。 大多數自動化不止一步,因此需要多個動作。 工作流就像「原子」動作一樣,可在Action庫中使用,並且可以手動調用或由規則觸發。 包(Packs)是內容部署的單位。 它們通過對集成(觸發器和動作)和自動化(規則和工作流)進行分組,簡化了StackStorm可插拔內容的管理和共享。 StackStorm Exchange上有越來越多的包可用。 用戶可以創建自己的包,在Github上共享它們,或者提交給StackStorm Exchange. 審計跟蹤(Audit Trail)記錄並存儲手動或自動操作執行的審計跟蹤,並存儲觸發上下文和執行結果的全部細節。 它還被記錄在審計日誌中,用於集成外部日誌記錄和分析工具:LogStash,Splunk,statsd,syslog
StackStorm 通過包含 sensors 和 actions 的可擴展套件,與你的基礎環境交互,執行流程如下:
- 從各個服務系統通過push或pull的方式把event傳給sensors, sensors會產生一個trigger
- 到規則配置中查詢該trigger對應的動作或者工作流
- 將來自工作流的Action發送到消息隊列(內置rabbitmq)中
- Actions到達外部的系統後就執行相應的動作
- 日誌和審計歷史被推送到資料庫進行存儲(Mongodb)
- 處理後的結果被發送回規則引擎進行進一步處理
Stackstorm的更新非常活躍,最新的發布資訊從官方網站上可以看到。目前最新的版本是 2.10.1。