写点什么

StackStorm 框架的浅析 (一)

  • 2019-11-15
  • 本文字数:2232 字

    阅读完需:约 7 分钟

StackStorm框架的浅析(一)

故障自愈作为运维领域的热门话题之一,各个公司都会投入大量的人力来开发不同的组件,如何正确、有序的调用不同组件以及避免相同功能组件的开发,是一件亟待解决的问题。StackStrom 是一个基于事件流并自动执行的系统框架,基于此,可以让外部系统产生的事件,有序的、可编排的集合到一起,作为一个完整的事件流去执行,从而解决一些高频次的运维难题。

1 StackStorm 简介

StackStorm 是一个将服务和工具集成在一起的自动化平台,它将现有的基础架构和应用程序环境联系在一起,因此使用者可以更轻松的自动化调用,把注意力集中在需要执行的操作上。



stackstorm 中包含 sensor,rule,action,workflow 等组件,环境内的数据都统一的存在 MongoDB 中,组件之间消息的通信是利用 RabbitMQ 实现的。将各个组件组合在一起并加之依赖文件以及配置文件就形成了一个包,st2 包的结构如下所示:



由包的结构可以看出,每个组件各自形成一个独立的目录,每个组件由一个配置文件以及一个执行文件共同构成。各个组件的具体作用如下:


  • Sensors: 监听和接收外部系统的事件,当某个外部事件出现,trigger 被触发执行,现在只支持 py 文件;

  • Trigger: 是外部事件的具体表现,简单理解为就是事件触发器,衔接 sensor 和 rule,由用户自行定义;

  • Rule: 映射着所有 trigger 到 action 的规则,记录着 criteria 匹配的规则,映射 trigger 实例到 action 的 input;

  • Action: 是 st2 的具体执行动作和步骤,可以使用 py 脚本、执行指定命令;

  • Workflow: 多个 action 的集合,这些 action 被有序的、按照预先定义好的规则先后执行,现在支持 Orquesta 和 Mistral 两种格式;


各个组件之间实际的交互作用如下图所示:


2 st2 中的 packs

packs 是 stackstorm 中最小的部署单元,Pack 中包含 Action,Workflow,Rule 和 Sensor 等等的配置文件,StackStorm 通过 Pack 进行部署和归类。

packs 的查询

通过命令 st2 pack list 可以查询已经安装在环境中的 packs,效果如下:


packs 的安装

在 StackStorm Exchange 中存在很多可用的包,它是 stackstorm 的一个社区,你可以从上面下载你需要的包,当然你也可以自行编写自己的包上传到社区中。stackstorm 的 packs 安装后会将 packs 的文件下载到/opt/stackstorm/packs/<your_pack>目录下。st2 的 packs 的安装方式有很多种。


# 安装某个包的具体的commitst2 pack install cloudflare=776b9a4# 安装某个包的某个具体版本st2 pack install cloudflare=0.1.0# 利用url安装某个包st2 pack install https://github.com/emedvedev/chatops_tutorial=testing
复制代码


下面重点说一下安装自己编写的包,也就是如何安装本地包。


首先自己编写的包必须传到 git 上才能成功安装 其次利用命令 st2 pack install file:/// + 文件目录可以安装本地包,安装效果如下:



可以看到 packs 的安装需要 4 个步骤,第一是下载 packs,事实上虽然我们称之为从本地安装 packs,其实 st2 还是会从 packs 所在的 git 上将代码拉下来,因此这就是为什么我刚刚说自己编写的包必须传到 git 上才能成功安装的原因了;第二步是预览检查包是否有明显的错误;第三步是安装包的依赖环境,st2 对于每个包都会设定一个运行环境,packs 所需要的依赖可以写在 requirements.txt 中,并安装包的过程中一并安装;第四步是注册包,实际上是将包中的各个组件的信息,包中的配置信息以及参数写入 MongoDB 中。

packs 的卸载

st2 中 packs 的卸载十分容易,通过命令 st2 pack remove + < packname>就可以完成,卸载的效果如下:



可以看出 packs 的卸载主要由两个步骤,第一将 packs 的注册信息删除;第二步删掉 packs 的文件;实际上 packs 的安装和卸载是运行了两个相应的 workflow,具体的将在后续专题中讨论。

packs 的注册

是不是安装上 packs 以后就可以直接运行 packs 了呢??当然不是啦(想得美!)还需要手动注册一下 packs 才能执行。具体的操作如下:


首先将.yaml 文件复制到/opt/stackstorm/configs/目录下,注意在安装 packs 前该文件不能存在于/opt/stackstorm/configs/目录下,否则会导致安装失败。


设置该文件的权限为 775。


执行命令 sudo st2ctl reload --register-configs 就可以运行 packs 了。

packs 的编写

这里面我们主要讲解一下 packs 中配置文件的编写方式,对于各个模块的编写规范,将在后续讨论。


packs 除了各个模块外还有 4 个文件需要编写,分别是:requirements.txt,pack.yaml,packname.yaml 以及 config.schema.yaml


requirements.txt


requirements.txt 是依赖文件,在其中记录的是 packs 需要运行的环境中的依赖包,包括包的版本


pack.yaml


pack.yaml 中定义了 pack 的一些基础信息,包括 packname,版本,描述以及作者信息等,具体效果如下:



packname.yaml


对于 packname.yaml 请注意,该文件的名字并不是”packname.yaml“,而是在 pack.yaml 中定义的包的名字作为”packname“,请大家不要误解。这个文件中主要记录着 packs 的一些默认参数,参数可以是整数,小数,字典,数组以及字符串,具体的形式如下:



config.schema.yaml


config.schema.yaml 是默认参数的具体信息,包括参数名称,类型以及描述等,参数类型包括 string,integer,number,list,object,具体形式如下:



其中 required 字段表示该参数是否是必要参数,非必要参数将不会存入 MongoDB 中,secrect 字段表示该参数是否可见的,若为 true 则用户不可见。


本文转载自公众号 360 云计算(ID:hulktalk)。


原文链接:


https://mp.weixin.qq.com/s/VD026IukUNrL5olEFkCtFg


2019-11-15 10:572578

评论

发布
暂无评论
发现更多内容

YashanDB数据库支持的访问控制策略详解

数据库砖家

YashanDB数据库的备份与恢复策略详解

数据库砖家

HDC2025华为视频高品质影音赛道新突破 技术革新打造品质观影中枢

最新动态

【HarmonyOS 5】应用更新功能详解

深海的鲸同学 luvi

AppGallery Connect HarmonyOS SDK应用服务 应用更新

YashanDB数据库的API接口使用指南

数据库砖家

YashanDB数据库支持的多种数据模型解析

数据库砖家

YashanDB数据库支持的跨平台部署优势

数据库砖家

YashanDB数据库智能索引管理功能介绍与应用

数据库砖家

YashanDB数据库的安全性与数据保护措施

数据库砖家

YashanDB数据库的安装与配置常见问题解答

数据库砖家

YashanDB数据库支持的实时交易系统架构设计

数据库砖家

36小时代码交锋!HarmonyOS极客马拉松2025圆满收官

最新动态

普通人用AI切水果视频8天涨粉17万,这个赚钱机会你还不知道?

田威AI

创业 赚钱 AI 图像生成 +AI

鸿蒙系统级AI能力全面赋能,华为阅读为生态伙伴和开发者带来效率提升

最新动态

YashanDB数据库支持的多种数据模型介绍

数据库砖家

YashanDB数据库支持的高并发处理能力解析

数据库砖家

YashanDB数据库支持的开发语言及接口介绍

数据库砖家

YashanDB数据库支持的容器编排与自动伸缩方案

数据库砖家

YashanDB数据库支持的异地多活架构设计与实践

数据库砖家

YashanDB数据库的安全性如何保障用户数据隐私?

数据库砖家

YashanDB数据库的安装与配置步骤详解

数据库砖家

YashanDB数据库的备份和恢复策略指南

数据库砖家

1688图片搜索接口攻略

tbapi

1688图片搜索接口 1688拍立淘接口

YashanDB数据库支持的多种连接协议及性能比较

数据库砖家

地平线高效 backbone: HENet - V1.0

地平线开发者

自动驾驶; 算法工具链 地平线征程6

YashanDB数据库的API设计原则与最佳实践

数据库砖家

YashanDB数据库的常见数据模型与实现方式

数据库砖家

YashanDB数据库支持的时序数据处理能力解析

数据库砖家

YashanDB数据库智能监控与预警系统构建

数据库砖家

华为云CloudDevice亮相HDC 2025:以新一代云终端驱动行业智能应用创新

业界

字节的prompt优化平台限时免费开放

大林

AI 提示词

StackStorm框架的浅析(一)_服务革新_刘毅_InfoQ精选文章