StackStorm自动化平台


1. StackStorm概述

1.1 StackStorm介绍

  • StackStorm是一个开源的事件驱动自动化平台,它允许开发者和系统管理员自动化IT和网络操作。StackStorm结合了IT运维、DevOps和网络安全团队的需求,提供了一个集中式的工作流自动化解决方案,包括事件响应、运行书自动化、配置管理和编排。

  • StackStorm 有助于自动执行常见的操作模式。一些例子是:

    • 便于故障排除 - 触发 Nagios、Sensu、New 捕获的系统故障 Relic 和其他监控系统,在物理节点上运行一系列诊断检查, OpenStack 或 Amazon 实例,以及应用程序组件,并将结果发布到共享的 通信上下文,例如 Slack 或 JIRA。

    • 自动修复 - 识别和验证 OpenStack 计算上的硬件故障 节点,正确撤离实例并向管理员发送电子邮件以了解可能的停机时间,但如果 任何事情都会出错 - 冻结工作流并调用 PagerDuty 来唤醒人类。

    • 持续部署 - 使用 Jenkins 构建和测试,预置新的 AWS 集群,开启 负载均衡器的一些流量,以及基于 NewRelic 应用的前滚或后滚 性能数据。

  • StackStorm 可帮助您将这些模式和其他操作模式组合为规则、工作流或操作。 这些规则和工作流 - StackStorm 平台中的内容 - 被存储为代码,这些代码 意味着它们支持您现在用于代码开发的相同协作方法。

1.2 StackStorm的主要特点

  • 事件驱动:能够响应来自各种源的事件,包括监控系统、日志、时间触发等。

  • 集成性:可以与多种工具和系统集成,例如Ansible、Puppet、Docker、Kubernetes等。

  • 工作流:使用YAML或Python编写工作流,实现任务的自动化和编排。

  • API驱动:提供REST API,允许通过编程方式触发和控制自动化流程。

  • 社区支持:作为一个开源项目,StackStorm拥有活跃的社区,提供持续的更新和支持。

1.3 StackStorm工作原理

image-20240728201751253

  • 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)

      • StackStorm 记录和存储手动或自动操作执行的审计跟踪。

      • 审计日志包含触发上下文和执行结果的详细信息,并可以与外部日志记录和分析工具集成(如LogStash、Splunk、statsd、syslog)。

    • 架构(Architecture)

      • StackStorm 采用模块化架构,由松散耦合的服务组件组成。

      • 这些组件通过消息总线进行通信,并可以水平扩展以支持大规模自动化。

      • StackStorm 提供 Web UI、CLI 客户端、REST API 和 Python 客户端绑定,以方便开发和操作。

2. StackStorm安装部署

2.1 基于RHEL 7/CentOS 7

2.1.1 系统要求

  • StackStorm 需要 Ubuntu、RHEL、RockyLinux 或 CentOS Linux。任何其他 Linux 发行版都不支持它。 下表列出了受支持的 Linux 版本,以及 Vagrant Boxes 和 Amazon AWS 我们用于测试的实例。

Linux (64-bit) Vagrant Box Amazon AWS AMI
Ubuntu 18.04 bento/ubuntu-18.04 Ubuntu Server 18.04 LTS Bionic
Ubuntu 20.04 bento/ubuntu-20.04 Ubuntu Server 20.04 LTS Focal
RHEL 8 / RockyLinux 8 bento/rockylinux-8.5 Red Hat Enterprise Linux (RHEL) 8 (HVM)
RHEL 7 / CentOS 7 bento/centos-7.4 Red Hat Enterprise Linux (RHEL) 7.2 (HVM)
  • 测试和部署 StackStorm 的建议最小大小:

测试 生产
双 CPU 四核 CPU
2GB内存 >16GB 内存
10GB存储空间 40GB存储空间
  • 默认情况下,StackStorm 和相关服务使用以下 TCP 端口:

服务 端口 备注
nginx 80, 443 Web服务器
mongodb 27017 数据库
rabbitmq 4369, 5672, 25672 消息队列
redis 6379 缓存数据库
zookeeper 2181, 2888, 3888 分布式协调服务
st2auth 9100 StackStorm认证服务
st2api 9101 StackStorm API服务
st2stream 9102 StackStorm流服务

如果任何其他服务当前正在使用这些端口,StackStorm 可能无法正确安装或运行。

2.1.2 调整SELinux

[root@StackStorm ~]# getenforce 
Disabled 

2.1.3 安装环境依赖包

2.1.3.1 安装 MongoDB、RabbitMQ 和 Redis
  • [root@StackStorm ~]# yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
    
    # Add key and repo for the latest stable MongoDB (4.0)
    [root@StackStorm ~]# rpm --import https://www.mongodb.org/static/pgp/server-4.0.asc
    [root@StackStorm ~]# bash -c "cat <<EOT > /etc/yum.repos.d/mongodb-org-4.repo
    [mongodb-org-4]
    name=MongoDB Repository
    baseurl=https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.0/x86_64/
    gpgcheck=1
    enabled=1
    gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc
    EOT"
    
    # 安装crudini命令行工具
    [root@StackStorm ~]# yum install crudini -y
    
    # 安装MongoDB 
    [root@StackStorm ~]# yum install mongodb-org -y
    
    [root@StackStorm ~]# curl -sL https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash
    [root@StackStorm ~]# curl -sL https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | sudo bash
    
    [root@StackStorm ~]# yum -y install erlang
    [root@StackStorm ~]# yum -y install rabbitmq-server
    [root@StackStorm ~]# yum -y install redis
    [root@StackStorm ~]# systemctl enable mongod rabbitmq-server redis --now
2.1.3.2 验证 python3-devel
  • CentOS/RHEL 7.x 上默认的 python 是 python 2,StackStorm 使用 python3,需要 python3-devel 包。如果 st2 包在已启用的仓库中可用,则安装 st2 包将自动安装 python3-devel。在 CentOS 发行版上,相关的仓库通常是启用的

[root@StackStorm ~]# yum info python3-devel
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * epel: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
Available Packages
Name        : python3-devel
Arch        : i686
Version     : 3.6.8
Release     : 21.el7_9
Size        : 217 k
Repo        : updates/7/x86_64
Summary     : Libraries and header files needed for Python development
URL         : https://www.python.org/
License     : Python

2.1.4 设置存储库

  • 检测您的平台和体系结构,并设置适当的 StackStorm 存储 库。它还将添加用于包签名的 GPG 密钥。

[root@StackStorm ~]# curl -s https://packagecloud.io/install/repositories/StackStorm/stable/script.rpm.sh | sudo bash

2.1.5 安装 StackStorm 组件

[root@StackStorm ~]# yum install -y st2
  • RabbitMQ 连接位于/etc/st2/st2.conf

  • MongoDB 位于/etc/st2/st2.conf

  • Redis 在协调部分的连接/etc/st2/st2.conf

2.1.6 设置数据存储加密

  • 键值存储允许用户存储加密值(机密)。这些是 使用对称加密 (AES256) 存储。

[root@StackStorm ~]# DATASTORE_ENCRYPTION_KEYS_DIRECTORY="/etc/st2/keys"
[root@StackStorm ~]# DATASTORE_ENCRYPTION_KEY_PATH="${DATASTORE_ENCRYPTION_KEYS_DIRECTORY}/datastore_key.json"

[root@StackStorm ~]# mkdir -p ${DATASTORE_ENCRYPTION_KEYS_DIRECTORY}
[root@StackStorm ~]# st2-generate-symmetric-crypto-key --key-path ${DATASTORE_ENCRYPTION_KEY_PATH}

[root@StackStorm ~]# chgrp st2 ${DATASTORE_ENCRYPTION_KEYS_DIRECTORY}
[root@StackStorm ~]# chmod o-r ${DATASTORE_ENCRYPTION_KEYS_DIRECTORY}
[root@StackStorm ~]# chgrp st2 ${DATASTORE_ENCRYPTION_KEY_PATH}
[root@StackStorm ~]# chmod o-r ${DATASTORE_ENCRYPTION_KEY_PATH}

[root@StackStorm ~]# crudini --set /etc/st2/st2.conf keyvalue encryption_key_path ${DATASTORE_ENCRYPTION_KEY_PATH}

[root@StackStorm ~]# st2ctl restart-component st2api

2.1.7 配置 SSH 和 SUDO3

  • 为了运行本地和远程 shell 操作,StackStorm 使用特殊的系统用户(默认情况下)。 对于远程 Linux 操作,使用 SSH。我们建议在所有设备上配置基于公钥的 SSH 访问 远程主机。我们还建议配置对 localhost 的 SSH 访问以运行示例和 测试。stanley

    • 创建 StackStorm 系统用户,启用无密码 sudo,并设置对“localhost”的 ssh 访问,以便 基于 SSH 的操作可以在本地进行测试。您需要提升的权限才能执行此操作:

    # Create an SSH system user (default `stanley` user may already exist)
    [root@StackStorm ~]# sudo useradd stanley
    [root@StackStorm ~]# sudo mkdir -p /home/stanley/.ssh
    [root@StackStorm ~]# sudo chmod 0700 /home/stanley/.ssh
    
    # Generate ssh keys
    [root@StackStorm ~]# sudo ssh-keygen -f /home/stanley/.ssh/stanley_rsa -P ""
    
    # Authorize key-based access
    [root@StackStorm ~]# sudo sh -c 'cat /home/stanley/.ssh/stanley_rsa.pub >> /home/stanley/.ssh/authorized_keys'
    [root@StackStorm ~]# sudo chown -R stanley:stanley /home/stanley/.ssh
    
    # Enable passwordless sudo
    [root@StackStorm ~]# sudo sh -c 'echo "stanley    ALL=(ALL)       NOPASSWD: SETENV: ALL" >> /etc/sudoers.d/st2'
    [root@StackStorm ~]# sudo chmod 0440 /etc/sudoers.d/st2
    
    # Make sure `Defaults requiretty` is disabled in `/etc/sudoers`
    [root@StackStorm ~]# sudo sed -i -r "s/^Defaults\s+\+?requiretty/# Defaults +requiretty/g" /etc/sudoers

2.1.8 启动服务

[root@StackStorm ~]# st2ctl start

# 注册传感器、规则和操作
[root@StackStorm ~]# st2ctl reload

2.1.9 验证

  • 查看版本

[root@StackStorm ~]# st2 --version
st2 3.8.1, on Python 3.6.8
  • 输出 RFC 2822 格式的日期和时间。

[root@StackStorm ~]# st2 run core.local -- date -R
.
id: 66a64cdd02a8613577722802
action.ref: core.local
context.user: stanley
parameters: 
  cmd: date -R
status: succeeded
start_timestamp: Sun, 28 Jul 2024 13:51:25 UTC
end_timestamp: Sun, 28 Jul 2024 13:51:27 UTC
result: 
  failed: false
  return_code: 0
  stderr: ''
  stdout: Sun, 28 Jul 2024 09:51:27 -0400
  succeeded: true
  • 列出了操作的执行状态、执行时间和其他相关信息

[root@StackStorm ~]# st2 run core.remote hosts='localhost' -- uname -a
.
id: 66a64d0702a8613577722805
action.ref: core.remote
context.user: stanley
parameters: 
  cmd: uname -a
  hosts: localhost
status: succeeded
start_timestamp: Sun, 28 Jul 2024 13:52:07 UTC
end_timestamp: Sun, 28 Jul 2024 13:52:09 UTC
result: 
  localhost:
    failed: false
    return_code: 0
    stderr: ''
    stdout: 'Linux StackStorm 3.10.0-1160.71.1.el7.x86_64 #1 SMP Tue Jun 28 15:37:28 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux'
    succeeded: true
  • 安装软件包

[root@StackStorm ~]# st2 pack install st2
​
For the "st2" pack, the following content will be registered:
​
actions   |  24
rules     |  0
sensors   |  0
aliases   |  12
triggers  |  0
​
Installation may take a while for packs with many items.
​
        [ succeeded ] init_task
        [ succeeded ] download_pack
        [ succeeded ] make_a_prerun
        [ succeeded ] get_pack_dependencies
        [ succeeded ] check_dependency_and_conflict_list
        [ succeeded ] install_pack_requirements
        [ succeeded ] get_pack_warnings
        [ succeeded ] register_pack
​
+-------------+----------------------------------------+
| Property    | Value                                  |
+-------------+----------------------------------------+
| ref         | st2                                    |
| name        | st2                                    |
| description | StackStorm utility actions and aliases |
| version     | 2.0.1                                  |
| author      | StackStorm, Inc.                       |
+-------------+----------------------------------------+
  • st2命令帮助

[root@StackStorm ~]# st2 -h
参数/选项 说明
-h, --help 显示帮助信息并退出
--version 显示程序的版本号并退出
--url BASE_URL API服务器的基础URL。假设所有服务器使用相同的基础URL,默认端口。默认从环境变量获取ST2_BASE_URL
--auth-url AUTH_URL 认证服务的URL。默认从环境变量获取ST2_AUTH_URL
--api-url API_URL API服务器的URL。默认从环境变量获取ST2_API_URL
--stream-url STREAM_URL 流端点的URL。默认从环境变量获取ST2_STREAM_URL
--api-version API_VERSION 要使用的API版本。默认从环境变量获取ST2_API_VERSION
--cacert CACERT SSL端点的CA证书捆绑路径。默认从环境变量获取ST2_CACERT。如果不提供,则不验证SSL证书。
--basic-auth BASIC_AUTH 用于认证的可选附加基本认证凭据。
--config-file CONFIG_FILE CLI配置文件的路径。
--print-config 解析配置文件并打印值。
--skip-config 不解析和使用CLI配置文件。
--debug 启用调试模式。
命令 说明
run 手动调用一个操作。
action 作为对外部事件响应而发生的活动。
action-alias 操作别名。
auth 认证用户并获取访问令牌。
login 认证用户,获取访问令牌,并更新CLI配置目录。
whoami 显示当前认证的用户。
apikey API密钥。
execution 一个操作的调用。
inquiry Inquiry提供在工作流中提问并等待响应的机会。
key 键值对用于存储常用配置,以便在传感器、操作和规则中重复使用。
pack 一组相关的集成资源:操作、规则和传感器。
policy 强制执行的策略。
policy-type 可以应用于资源的策略类型。
rule 基于某些标准选择性地在“触发器”上调用“操作”的规范。
webhook Webhooks。
timer 定时器。
runner 运行器是特定类别操作的处理程序。
sensor 允许将StackStorm与外部系统集成的适配器。
trace 相关的执行、规则和触发实例的一组。
trigger 映射到st2输入的外部事件。它是st2的调用点。
trigger-instance st2接收到的实际触发器实例。
rule-enforcement 表示规则强制执行的模型。
workflow 工作流编写相关操作的命令。仅支持orquesta工作流。
service-registry 服务注册组和成员相关的命令。
role RBAC角色。
role-assignment RBAC角色分配。

2.1.10 配置身份验证

  • 于文件的提供程序设置身份验证

# 使用密码创建用户
[root@StackStorm ~]# yum -y install httpd-tools
​
# 创建密码文件
[root@StackStorm ~]# echo 'Ch@ngeMe' | sudo htpasswd -i /etc/st2/htpasswd st2admin
  • 在以下位置启用和配置身份验证:/etc/st2/st2.conf

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值