Stackstorm快速开始

Stackstorm快速开始

Posted by Lerko on September 21, 2020

Stackstorm

基本介绍

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

动作

表示一个操作,我们可以通过命令查看对应的动作

$root@2a95cfad87bc:/opt/stackstorm# st2 action list --pack=linux
+-----------------------+-------+------------------------------------+
| ref                   | pack  | description                        |
+-----------------------+-------+------------------------------------+
| linux.check_loadavg   | linux | 检查主机上的CPU平均负载              |
| linux.check_processes | linux | 检查有趣的过程                      |
| linux.cp              | linux | 复制文件                            |
| linux.diag_loadavg    | linux | 高负载的诊断工作流程                 |
|                       |       | 警报                                |
| linux.dig             | linux | 挖掘动作                            |
| linux.file_touch      | linux | 触摸文件                            |
| linux.lsof            | linux | 运行lsof                           |
| linux.lsof_pids       | linux | 对一组PID运行lsof					 |
| linux.mv              | linux | 移动文件							 |
| linux.netstat         | linux | 运行netstat						 |
| linux.netstat_grep    | linux | Grep Netstat结果                   |
| linux.pkill           | linux | 使用pkill杀死进程                   |
| linux.rm              | linux | 删除文件                           |
| linux.rsync           | linux | 将文件从一个地方复制到               |
|                       |       | 另一个w /rsync                      |
| linux.scp             | linux | 安全复制文件                        |
| linux.service         | linux | 停止,启动或重新启动,服务            |
| linux.traceroute      | linux | 路由主机                            |
| linux.vmstat          | linux | 运行vmstat                         |
| linux.wait_for_ssh    | linux | 等待SSH的操作                       |
|                       |       | 服务器变得可访问。通过               |
|                       |       | 默认,如果没有凭据                   |
|                       |       | 提供,此操作将尝试                   |
|                       |       | 使用系统用户进行身份验证              |
|                       |       | 用户名和密钥文件。                   |
+-----------------------+-------+------------------------------------+

如果我们要执行动作的话我们可以使用下面的命令执行动作

# 通过 -- 指定命令
st2 run core.local -- ls -al

# 通过cmd指定命令
st2 run core.local cmd="ls -al"

# 复杂命令通过cmd
st2 run core.remote hosts='localhost' cmd="for u in bob phill luke; do echo \"Logins by \$u per day:\"; grep \$u /var/log/secure | grep opened | awk '{print \$1 \"-\" \$2}' | uniq -c | sort; done;"

规则

我们可以定义一个规则

---
    name: "sample_rule_with_webhook" //规则名称
    pack: "examples" //规则对应的包
    description: "Sample rule dumping webhook payload to a file." //规则描述
    enabled: true // 是否开启规则

    trigger: //对应触发器
        type: "core.st2.webhook" //触发器类型
        parameters: //参数
            url: "sample"

    criteria: //条件
        trigger.body.name:
            pattern: "st2"
            type: "equals"

    action: //动作
        ref: "core.local"
        parameters:
            cmd: "echo \"\" >> ~/st2.webhook_sample.out ; sync"

本例中的 webhook 设置为在 https://{ host }/api/v1/webhooks/sample 监听 sample 子 url。当对此 URL 生成 POST 时,触发器将触发。如果条件匹配(在这种情况下,payload 中的值为 st2) ,那么该有效负载将被附加到 st2.webhook _ sample.out 文件中 StackStorm 系统用户的 home 目录中。默认情况下,这是 stanley,因此文件位于/home/stanley/st2。样本。出去。详细规则解剖见规则。

触发器有效负载由 trigger引用。如果触发器有效负载是一个有效的 JSON 对象,那么将对其进行解析,并且可以像{ trigger.path.to.parameter }那样进行访问。

规则中可用的触发器是什么?就像操作一样,使用 CLI 浏览触发器,了解触发器的作用,如何配置它,以及有效负载结构是什么:

# List all available triggers
st2 trigger list

# Check details on Interval Timer trigger
st2 trigger get core.st2.IntervalTimer

# Check details on the Webhook trigger
st2 trigger get core.st2.webhook

如何部署一个规则?

# 创建一个规则
st2 rule create /usr/share/doc/st2/examples/rules/sample_rule_with_webhook.yaml

# 查看规则列表
st2 rule list

# 列出示例包的规则
st2 rule list --pack=examples

# 获取刚刚创建的规则
st2 rule get examples.sample_rule_with_webhook

我们可以通过这样来触发这个rule

20201012205651

20201012205625