Open woodywuuu opened 6 years ago
StackStorm(以下简称ST2)是一个时下非常流行的事件驱动型自动化引擎,擅长处理自动化流程,支持各种服务及工具的自动化和集成。可以轻松实现故障诊断和自动修复,利用st2来实现故障自动诊断以及修复是不错的选择。
以上算是ST2最为简单的流程应用了,其中可定制化的东西非常多,在数据量足够大时,可以考虑使用机器学习等方法进行进一步的智能化。
搭建ST2环境,推荐比较干净的64位Linux环境,官方推荐生产环境配置为4核CPU,16GB以上内存,40G硬盘。可定制化东西非常多,目前只是测试,使用一键脚本安装。具体参考
搭建zabbix环境,为了方便我把server和agent扔在一部机器上,顺便装了一个redis用于监控,由于不是本实验重点,略过不提。
ST2需要认证使用,可以使用token或是API key进行认证,区别是API key不会自动过期,token默认一天过期。 使用前先登录:
st2 login "st2admin" -p "Ch@ngeMe" 当然我感觉这种方式更方便:
export ST2_AUTH_TOKEN=st2 auth -t -p 'Ch@ngeMe' st2admin 也可以远程请求:
st2 auth -t -p 'Ch@ngeMe' st2admin
curl -X POST -k -u yourusername:'yourpassword' https://myhost.example.com/auth/v1/tokens
st2 action/trigger/rule/pack list
st2 action/trigger/rule/pack get XXXX
st2 run core.remote hosts='localhost'
st2 execution list -n 10
关于zabbix,ST2社区已有相关的工具包,具体参考。需要注意的点:
在ST2中已有zabbix.event_handler触发器,不过研究了很久,这个触发器写得非常简单,应该是需要定制化的。不过查看社区提供zabbix用的告警脚本,直接将信息post到ST2,最终也是webhook处理。这里我自己写了一条简单的规则,用钩子监听某接口的信息,如果payload匹配我写的规则,那么就远程执行命令把redis再调起来。
rule.yaml如下:
--- name: "redis_restart" pack: "test" description: "just a test" enabled: true trigger: #必选 type: "core.st2.webhook" parameters: url: "test" #此处配url criteria: #可选 trigger.body.name: pattern: "st2" type: "equals" action: #必选 ref: "core.remote" parameters: cmd: "redis-server&" hosts: "XXXXXXX" password: "XXXXXXXX" username: "root"
非常简单的监控脚本:
#!/usr/bin/env python import requests import simplejson #头部包括类型&认证token headers = { 'x-auth-token': 'Token_Here', 'Content-Type': 'application/json', } #传递数据 payload = { "you": "too", "name": "st2" } payload = simplejson.dumps(payload) requests.post("https://($ip)/api/v1/webhooks/test",data=payload,headers=headers,verify=False)
将这个脚本放入zabbix服务器器的某目录下,在zabbix_server.conf中指定目录:
grep 'AlertScriptsPath' /etc/zabbix/zabbix_server.conf // Option: AlertScriptsPath // AlertScriptsPath=${datadir}/zabbix/alertscripts AlertScriptsPath=/usr/lib/zabbix/alertscripts
重启zabbix_server即可。
Webhook与Sensors都可以接收信息,不同之处在于:
Webhook只能通过POST接收json格式/url编码的表单数据,而且只能由外部系统发起请求到ST2。优点是容易使用&修改。
Webhook提供两种认证方式,API key和tokens,认证时将st2-api-key / x-auth-token参数写入headers即可。
仅提供两种类型 application/json 或是 application/x-www-form-urlencoded
在trigger中添加url,如上述yaml文件中:
trigger: type: "core.st2.webhook" parameters: url: "test" #此处配url
无法确保执行动作:(英文翻译)ST2中的Webhooks无法确保其执行。这依赖于规则的配置。基于Webhooks的内容,他可能不执行任何动作,也可能执行多种动作。
校验规则由三个元素组成,上面demo中的简单例子:
criteria: trigger.body.name: # 元素 pattern: "st2" # 参数 type: "equals" # 匹配类型
校验的所有类型在st2/st2common/st2common/operators.py中定义,节选部分如下表:
动作是ST2执行的最小单元,可以使用任意编程语言撰写。每个动作基本由两个文件组成:动作描述文件(yaml),执行文件(类型不定)。
找了个ST2内置的发邮件的动作,其描述文件如下:
--- name: sendmail description: This sends an email entry_point: send_mail/send_mail runner_type: "local-shell-script" enabled: true parameters: from: description: Sender email address. position: 0 required: false type: string default: "stanley" to: description: Recipient email address. position: 1 required: true type: string subject: description: Subject of the email. position: 2 required: true type: string send_empty_body: description: Send a message even if the body is empty. position: 3 required: false type: boolean default: True content_type: type: string description: Content type of message to be sent default: "text/html" position: 4 body: description: Body of the email. position: 5 required: true type: string sudo: immutable: true attachments: description: Array of attachment file paths, comma-delimited. position: 6 required: false type: "string"
由以下几部分组成:
执行文件可以支持任何编程语言,不过推荐还是用官方喜欢的PY或是bash。
ST2触发的动作可能涉及到跨系统的多个原子操作,为了自动化&准确性,引入了工作流的概念。
官方文档中在动作链开头就放了一句话:
一个动作链需要两个文件组成,描述文件&执行文件,均采用yaml语法。描述文件定义了名称、入口文件、参数和通知。而执行文件列了一系列的动作,并且提供了每一步成功或是失败的回调。简单执行文件如下:
--- chain: - name: "c1" ref: "core.local" parameters: cmd: "echo c1" on-success: "c2" on-failure: "c4" - name: "c2" ref: "core.local" parameters: cmd: "echo \"c2: parent exec is {{action_context.parent.execution_id}}.\"" on-success: "c3" on-failure: "c4" - name: "c3" ref: "core.local" parameters: cmd: "echo c3" on-failure: "c4" - name: "c4" ref: "core.local" parameters: cmd: "echo fail c4" default: "c1"
只是做了些简单的了解,其中能自定义的部分非常多,我个人有几点想法:
参考:
https://sdk.cn/news/7548
http://os.51cto.com/art/201801/563769.htm
https://github.com/StackStorm-Exchange/stackstorm-zabbix
赞
图看不到了
简介
概述
StackStorm(以下简称ST2)是一个时下非常流行的事件驱动型自动化引擎,擅长处理自动化流程,支持各种服务及工具的自动化和集成。可以轻松实现故障诊断和自动修复,利用st2来实现故障自动诊断以及修复是不错的选择。
优势
结构&流程
基础结构
流程
以上算是ST2最为简单的流程应用了,其中可定制化的东西非常多,在数据量足够大时,可以考虑使用机器学习等方法进行进一步的智能化。
尝试
前期准备
搭建ST2环境,推荐比较干净的64位Linux环境,官方推荐生产环境配置为4核CPU,16GB以上内存,40G硬盘。可定制化东西非常多,目前只是测试,使用一键脚本安装。具体参考
搭建zabbix环境,为了方便我把server和agent扔在一部机器上,顺便装了一个redis用于监控,由于不是本实验重点,略过不提。
ST2
认证
ST2需要认证使用,可以使用token或是API key进行认证,区别是API key不会自动过期,token默认一天过期。 使用前先登录:
st2 login "st2admin" -p "Ch@ngeMe" 当然我感觉这种方式更方便:
export ST2_AUTH_TOKEN=
st2 auth -t -p 'Ch@ngeMe' st2admin
也可以远程请求:curl -X POST -k -u yourusername:'yourpassword' https://myhost.example.com/auth/v1/tokens
基础操作
列出所有动作/触发器/规则/包
st2 action/trigger/rule/pack list
某个动作/触发器/规则/包的详情
st2 action/trigger/rule/pack get XXXX
执行某个操作,可以传入参数
st2 run core.remote hosts='localhost'
查看执行历史
st2 execution list -n 10
ST2-Zabbix通道搭建
关于zabbix,ST2社区已有相关的工具包,具体参考。需要注意的点:
在ST2中已有zabbix.event_handler触发器,不过研究了很久,这个触发器写得非常简单,应该是需要定制化的。不过查看社区提供zabbix用的告警脚本,直接将信息post到ST2,最终也是webhook处理。这里我自己写了一条简单的规则,用钩子监听某接口的信息,如果payload匹配我写的规则,那么就远程执行命令把redis再调起来。
rule.yaml如下:
非常简单的监控脚本:
将这个脚本放入zabbix服务器器的某目录下,在zabbix_server.conf中指定目录:
重启zabbix_server即可。
执行
Further
关于Webhook
Webhook与Sensors都可以接收信息,不同之处在于:
Webhook只能通过POST接收json格式/url编码的表单数据,而且只能由外部系统发起请求到ST2。优点是容易使用&修改。
认证
Webhook提供两种认证方式,API key和tokens,认证时将st2-api-key / x-auth-token参数写入headers即可。
请求内容
仅提供两种类型 application/json 或是 application/x-www-form-urlencoded
添加Webhook
在trigger中添加url,如上述yaml文件中:
trigger: type: "core.st2.webhook" parameters: url: "test" #此处配url
Webhook缺点
无法确保执行动作:(英文翻译)ST2中的Webhooks无法确保其执行。这依赖于规则的配置。基于Webhooks的内容,他可能不执行任何动作,也可能执行多种动作。
校验规则
校验规则由三个元素组成,上面demo中的简单例子:
criteria: trigger.body.name: # 元素 pattern: "st2" # 参数 type: "equals" # 匹配类型
校验的所有类型在st2/st2common/st2common/operators.py中定义,节选部分如下表:
动作
动作是ST2执行的最小单元,可以使用任意编程语言撰写。每个动作基本由两个文件组成:动作描述文件(yaml),执行文件(类型不定)。
动作描述文件:
找了个ST2内置的发邮件的动作,其描述文件如下:
由以下几部分组成:
执行文件
执行文件可以支持任何编程语言,不过推荐还是用官方喜欢的PY或是bash。
工作流
ST2触发的动作可能涉及到跨系统的多个原子操作,为了自动化&准确性,引入了工作流的概念。
ActionChain
官方文档中在动作链开头就放了一句话:
一个动作链需要两个文件组成,描述文件&执行文件,均采用yaml语法。描述文件定义了名称、入口文件、参数和通知。而执行文件列了一系列的动作,并且提供了每一步成功或是失败的回调。简单执行文件如下:
Mistral
feat
只是做了些简单的了解,其中能自定义的部分非常多,我个人有几点想法:
参考:
https://sdk.cn/news/7548
http://os.51cto.com/art/201801/563769.htm
https://github.com/StackStorm-Exchange/stackstorm-zabbix