写点什么

基于 StackStorm 的 ChatOPS 方案 - 监控报警的自愈

2019 年 11 月 15 日

基于StackStorm的ChatOPS方案-监控报警的自愈

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


1 背景介绍

目标

基于报警事件,进行收敛和自愈处理。


  • 收敛:合并报警,减少报警数量。

  • 自愈:根据预先设定好的规则库进行根因分析,命中后对报警进行自处理。


愿景

打造企业级云服务的医疗中心、自愈中心。


整体架构图:



2 StackStorm 介绍

StackStorm 是一个基于事件流的自动执行开源项目。它可以基于现有的流程、平台工作流、API、和其他一切可执行的应用环境。让这些外部系统产生的事件,有序的、可编排的集合到一起,作为一个完整的事件流去执行,从而解决一些高频次的场景。


这些执行流程中的每个动作称为一个 action(原子),不同项目中的 action 可以共享。


官方描述支持的场景:


  • 故障排查:捕获 Nagoios、zabbix 等监控系统报警,然后组合排查 action。

  • 自动执行:比如自动解决 OpenStack compute node 的硬件故障,自动编排和发送邮件等。

  • CI/CD:结合 jenkins、aws 等,进行持续部署、持续集成。


官方提供的 StackStorm 架构图:




StackStorm 组件介绍

  • Sensors: 监听和接收外部系统的事件,当一个从外部系统过来的事件出现并被接受, trigger 被触发执行;

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

  • Rule: 映射着所有 trigger 到 action 的规则(或者到 workflow 的对应关系),记录着 criteria 匹配的规则,映射 trigger 实例到 action 的 input,简单理解就是规则匹配配置记录;

  • Action: 是 st2 的具体执行动作和步骤,可以使用脚本、调用 API 或者其他任何自定义的 action。如 ssh、API call、OpenStack、Docker、salt、puppe、jenkins 等的调用;

  • Workflow: 多个 action 的集合,这些 action 被有序的、按照预先定义好的规则先后执行;

  • Pack: st2 的内容单元集合,简单理解为一个项目就是一个 pack;


官方开放的 pack"应用商店"截图:



StackStorm 流程说明


sensor 通过 pull\push 方式接受外部系统的(事件流)数据,通过 trigger 触发器将数据注射到 st2 体内,并通过 rule 模块接收,同时 rule 模块记录着基于事件的匹配规则,当数据进来的时候根据匹配规则进行匹配,如果命中的话执行 action 的集合 workflow,并按照 workflow 预先定义好的流程去执行。


pack 的结构


workflow 的结构


Sensor:yaml 配置文件+Py 脚本文件组成

yaml 配置文件示例:



py 脚本文件示例:



Rule 示例:



Workflow 示例图:



关于 StackStorm 的更多示例这里不做详细解释,有兴趣的可以参考官方文档。


3 应用实例

workflow 结构


workflow 流程


st2 web 平台记录的结果示例


4 总结

目前我们基于这套流程已经完成了团队内 70~80%的通用运维场景,大部分日常报警都已经满足了可自愈的状态,此服务大大节省了运维人员的精力、提高了工作效率,并最大限度的降低了服务故障的时间。


通常每个 Server 端的服务都有自己的问题排查流程和技巧,结合这些流程、丰富运维场景(troubleshooting 流程、止损动作),并最终结合到我们的 StackStorm 自愈平台上,一个无需人肉干预、可自愈的云服务打造完成。


未来:结合业务拓扑图、调用链关系去完善和丰富平台,同时基于监控、日志数据等结合 AI 算法做到故障预警、预知,可以先于故障提前发现问题。最大限度的减少业务中断带来的损失。


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


原文链接:


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


2019 年 11 月 15 日 14:43867

评论

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

WireGuard 教程:使用 DNS-SD 进行 NAT-to-NAT 穿透

米开朗基杨

wireguard

领域的边界,一个小讨论

李小腾

领域驱动设计 DDD

重点人员管控系统开发,智慧公安系统搭建解决方案

WX13823153201

重点人员管控系统开发

第二章作业二

LouisN

运动健身市场越来越大,你的客户却越来越少?

IoT云工坊

人工智能 App 物联网 健身房 智能健身房

最基础的3道java面试题,你真的答得上来吗

田维常

面试

面试杀手锏!2021最新Android常用开源库总结,Android校招面试指南

欢喜学安卓

android 程序员 面试 移动开发

博文视点算法书单|让算法学习不再难

博文视点Broadview

单例模式原来是这么简单?!

后台技术汇

28天写作 2月春节不断更

k8s-client-go源码剖析(三)

LanLiang

golang Kubernetes Kubernetes源码

科普篇:新冠疫苗解读

石云升

28天写作 2月春节不断更 新冠疫苗

分盘存储:实现数据库备集群备份文件分散存储

华为云开发者社区

数据库 数据 容灾 集群 分盘存储

Java 多线程上下文传递在复杂场景下的实践

vivo互联网技术

Java 架构 编程语言 多线程高并发

两个高频设计类面试题:如何设计HashMap和线程池

yes的练级攻略

面试 hashmap 线程池

话题讨论 | 你现在还会推荐亲朋做程序员吗?

石云升

话题讨论 2月春节不断更

MySQL字段类型最全解析

Simon

MySQL 数据库数据类型

软件架构模式之事件驱动架构

架构精进之路

软件架构 七日更 28天写作 2月春节不断更

智能对联模型太难完成?华为云ModelArts助你实现!手把手教学

华为云开发者社区

人工智能 modelarts mindspore Seq2Seq

工业互联网平台:将为“补链”“优链”“强链”提供有力保障

浪潮云

工业互联网

Java之五种遍历Map集合的方式

华为云开发者社区

Java 对象 Iterator map合集

💻 一文读懂两台计算机之间是如何通信的

飞天小牛肉

面试 计算机网络 2月春节不断更

DIY一款能随周围环境变化的智能灯泡,求婚必备!

IoT云工坊

人工智能 物联网 人脸识别 sdk IoT App

面试看这个就够了!6年菜鸟开发面试字节跳动安卓研发岗,学习路线+知识点梳理

欢喜学安卓

android 程序员 面试 移动开发

这一年,像踏码进货一样!

小傅哥

Java 小傅哥 技术成长 平台羊毛

任务悬赏系统软件开发

v16629866266

如何理解Linux系统SSH协议和原理

Changing Lin

Linux 2月春节不断更

勿让 Docker Volume 引发 Terminating Pod

黄久远

Docker 云计算 Kubernetes 容器 云原生

专访京东科技张亮:本土开源需形成吸纳开发者的靶心

京东科技开发者

开源

PowerApps画布应用编码规范和指南

Changwei™

低代码 企业应用 Power Platform PowerApps

GitHub星标数超4.2万的火爆之作!

博文视点Broadview

谁再把IDEA的Project比作Eclipse的Workspace,我就跟谁急

YourBatman

eclipse IntelliJ IDEA Project Workspace

演讲经验交流会|ArchSummit 上海站

演讲经验交流会|ArchSummit 上海站

基于StackStorm的ChatOPS方案-监控报警的自愈-InfoQ