基于语言交互的自动化运维系统一ChatOps

前言

目前运维发展到现在经历了好几代

1.0 单机时代

手敲命令时代,写shell时代。写一大堆shell去管理服务器

2.0 自动化工具时代

随着Puppet、Ansible、fabric等基于命令行的批量管理服务器工具的出现,方便运维去管理大量服务器

3.0 平台化时代

这个时代真是百花齐放,各种基于2.0时代工具开发的系统,基于Web界面,鼠标点点就能完成各种操作,真的相当方便!

下个时代肯定是基于AI实现的真正无人运维时代。

我经历了这三个时代,同时我也在不断探索怎么减轻运维人的工作压力。不用周六日去哪儿都还要带着电脑,全靠手机就能解决问题,想了很久,才想试着做一套基于语言交互的自动化运维系统,这样只需要一个手机,通过文字告诉系统该做什么。
这个系统暂定叫做ChatOps
基于语言交互的自动化运维系统一ChatOps

ChatOps

fature

  • 语言交互
  • 统一认证
  • 网关服务
  • 事件决策

语言交互

就字面意思,处理各个模块的消息,转发给谁。

统一认证

各个模块之间不提供认证服务,这样保持身份一致性,不然在每个模块维护一个身份很不友好。

网关服务

不仅仅是语言交互,还要提供一些页面展示。毕竟有的时候还是需要看一些图表什么的。网关服务提供给各个模块热注册,这样对客户端来说只有1个地址,不用记下各个模块的地址

事件决策

这个系统的核心,也是最难实现的部分。因为各个模块的消息都经过ChatOps,ChatOps 可以通过NLP(自然语言处理)转换成各个模块需要的消息。

例1:

mail模块等到事件决策开发完毕之后,就不需要自身用正则匹配邮件内容,只需要把来邮件了这个时间发送到ChatOps,ChatOps转发给用户的时候,会对邮件内容进行处理。

例2:

当监控模块产生报警时候,ChatOps分析报警内容,然后可以通知响应的模块做出哪些处理,例如磁盘满了,可以告诉Commond模块去删除一些东西,或者对磁盘进行扩容

这样做的好处,各个模块就是纯工具人,让干嘛就干嘛,不具有自主处理事情能力。前期还是需要各个模块遇到问题自己去找对应的模块去处理。