最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

解读 ChatOps:开源聊天机器人 Hubot 如何协助运维?

  • 2016-11-03
  • 本文字数:4042 字

    阅读完需:约 13 分钟

ChatOps 通常是指依靠群组聊天室进行管理运维工作的一种。在 ChatOps 领域,我是一个新人,通过学习与运用,再回过头来看,对 Github、Apple 这样的一些先行者更是崇拜。

在现在这个概念为王的时代,ChatOps 更像是一个“弱建筑”定义,低调不失优雅。希望通过我的分享,和大家一起来发现其生态建设(以我熟悉的 Hubot 为例)、基本设计,为后续更好的实践提供一个参考。

背景,何为 ChatOps?

先看看实验室截图,我在聊天室中通过与某机器人沟通,获取容器云的测试环境的 top5 资源以及主机健康信息表。

(点击放大图像)

直观的感受就是 ChatOps 给了一个全新的工作环境,让我们可以在聊天室中,通过聊天的方式,获取想要的反馈。

说到 ChatOps,自然会想到 DevOps。市场上这两年在“疯狂”的传递着 DevOps 的理念,那我们有没有考虑过 DevOps 的核心是什么?有哪些实现分支?又存在一些什么问题?很多人都像我一样,会习惯的去说,DevOps 有四大核心,包括技术、组织、流程、文化;实现 DevOps 可以从 CI/CD 着手,以自助自动为指导思想;DevOps 要落地很难,因为有太多历史债务,有太多规章制度…

那该怎么正确看待 ChatOps 呢?机器人?聊天室?机器人聊天运营?先看看 SneakyCode 上的总结:“At the heart of DevOps is CAMS …… ChatOps is an extension of DevOps and enhances it with and extreme focus on CAMS”。这里,CAMS 是指 a culture of automation, measurement and sharing,认为 ChatOps 是对 DevOps 的一个实现与加强。

一直以来,运维的工作方式给大家的感觉就是脚本,部署要执行脚本、变更要执行脚本;或者进阶一层来看,运维会用各种小工具,比如 Puppet、SaltStack 等,对脚本形成统一管理、下发、执行。很多人都在讲:要把繁重且重复的劳动交给机器人,让人做更有趣更创新的事情。比如运维同学所做的日常巡检、故障处理,则可以由这些机器人伙伴来协助处理。而作为运维同学的伙伴机器人,一个很好的参与工作方式是加入到我们的日常聊天组,一起共事、一起学习。----- 这就是 ChatOps,但不局限于 Ops。

低调,互联网时代的另类

现在市场上 ChatOps 的开源实现,呈三足鼎立之势:

  1. Hubot:CoffeeScript 实现,Github 提供且自用
  2. Lita:Ruby 实现,支持容器部署,依赖 redis
  3. Err:Python 实现,笔者目前还没有用过

以 Hubot 为例,这是 Github 在 5 年多前开发的一套用于管理 Github 自己的软硬件的机器人,中间历经了自用、开源、重写再开源三个阶段,现在俨然成为 Github 上最火热的项目之一:

在过去的 5 年多时间中,其宣传相比 DevOps、微服务、容器这些概念来说,少的可怜;但是最近 ChatOps 更像是被推出到了风口,被越来越多的提及到了。

开源生态讲究的是横纵连横,单向集成是生态建设的最大阻力。在第一次使用 Hubot 时,其生态建设的完备性相当让我出乎意料,在出向上,Hubot 本身已适配很多:

而在入向上,我使用的 Slack、HipChat 都默认地做了对 Hubot 的集成。以 Slack 为例,进入应用管理后,直接就可以集成 Hubot、Lita,而不需要自己通过 API 做集成了。

除了上面提到的与 chat 软件的集成,在部署环境上,Unix、Windows 都可支持,而且 Hubot 支持了 Azure、Bluemix、Heroku 等云环境的快速部署(虽然还没全自动化)。这让我不由地想到:国内的一朵朵公有云,天天在谈生态,为什么不考虑去做这些事情呢……

机器人,说的少做的很多

现阶段,机器人像是你团队里刚来的新人,更多的是在有序的安排下一步步做事(这里当然不包括 AlphaGo 这些高端的东西)。最常规的工作方式如下:

  • 通过给予 command,由机器人伙伴去实际云中操作,人和机器人伙伴的通信走私有通道,机器人伙伴会将信息回复到聊天室中。
  • 机器人伙伴同样分公共与私人的,最简单的方式就是用不同聊天室来隔离(不同的圈子嘛)。

机器人伙伴作为聊天室的一个成员,表象上它和所有人是一样的。

但机器人就像是很多团队里都存在的那种个性员工,说的少做的多:

说的少——一个聊天室里,大部分时间机器人伙伴是沉默的,或者默默在后面做事的;说话的都是我们这些喜欢“闲扯”的人,真有事情来了,才想起机器人伙伴能不能帮忙给做了,这时候他才会被逼着跟你“说”两句。

做的很多——如果你愿意,机器人伙伴可以帮你做所有事。当然这里有一个度的问题,不是所有的事情都应该让机器人伙伴去做。机器人伙伴本质上是一种有规律下的封装,只有事情是稳定的、可持续的,才考虑招聘机器人来做。但是,千万不要无限的去招聘机器人,即使是私人的。因为和你招聘其他团队成员一样,想象一下你的团队无限扩展,有些方面自然有好处,但带来的问题也不言而喻。

那一般我们怎么招聘机器人呢?再以 Hubot 举例,前面提到这是基于 CoffeeScript 的,需要一定的脚本基础,不过从我的使用情况来看(我脚本基础也很一般),关系也不大(具备 node,npm 相关的知识就可以),因为真正和 CoffeeScript 相关的工作很少,一般就两步(当然,这个是 Slack 适配后做了易用性,默认可不是这么简单的,后面会提到如何适配):

  1. 定义 robot:每个机器人的定义方式基本上是一模一样的;
  2. 匹配 command:发送返回信息,上面只是截取的示例,一般会在匹配后,发送 http rest 请求实际去工作(这个就有很大的可操作空间了),将结果 format 后再发到聊天室中。

如果你的公司用的是没有与 Hubot 集成的 chat 软件,还需要做一次 client 的封装,这个稍有点复杂,需要一定的脚本基础,可参考 hubot-slack 项目: https://www.npmjs.com/package/@slack/client ,我用一张图来说明 Hubot 的扩展架构,其集成时的插件点很明确(注:下图只标识了最重要的几个方法):

通过实现 Adapter 的必要方法,完成机器人的生命周期管理。在与 Slack 集成时,稍有特殊性在于:run 方法中,注册了 Slack 的 message 事件(当 Slack 有消息时触发),在 message 方法里,通过消息类型、发送人、channel 等上下文信息,将具体消息封装后 dispatch 给机器人。

避免误区

我认为在接纳 ChatOps 这个理念的过程中,容易存在三种思想误区,会在一定程度上阻碍 ChatOps 的落地。

误区 1:ChatOps 纯粹是为了好玩。大家体验过人工智能,或者指挥过机器人做事,当时是持着什么样的心态去做的呢?我在一开始用 Hubot 的时候,兴冲冲的拉着部门同学分享,很直观的反馈就是:大家觉得很新颖,却真心不觉得有实际作用,感觉就是在我们聊天室里发发指令,用来看看数据图表等,运维门户上同样可以做。

误区 2:聊天室里做事很不规范。企业用 IM,比如钉钉、Slack、HipChat,也有用微信、QQ 的,但很少有企业会把 IM 工具及内容纳入到标准管理体系中,很多时候就是纯粹的聊天工具。在这类工具中做事,大家会觉得无法保障规范性、可审计性等。

误区 3:Command 让工作不再专业。就像我们公司的产品 EOS(SOA 下的开发运行平台),自出生就饱受技术人员争议,原因是封装了太多底层实现。而 ChatOps 中的 Command 工作方式,同样会让我们觉得专业技能受到挑战。

上面这三种看法真的有道理吗?其实不然,在我看来这种误解的本质上来源于:

  1. 不同层面上的认知偏差。很多同学都在广用开源和工具,但从来没有觉得这些屏蔽了底层实现,为何对于 ChatOps 中的机器人伙伴做事,就有这个感觉呢?比如说大家用 Eclipse 开发代码,很少有人关心 Eclipse 工具本身屏蔽的内容,但一旦在 Eclipse 加了些插件辅助,很多人就觉得不直观了;再比如很多前端同学使用 React、Bootstrap 这些框架,是否关心过它屏蔽了 prototype、闭包这些基础知识呢?这其实是不同层次的对问题的认知,说的直白些,我觉得是是惯性让人变得封闭,不想跳出习惯的工作方式。
  2. 责任心的缺失,或者叫个人主义。在 ChatOps 领域中,我们都说要机器人,但有时候会发现团队里就你在贡献,这当然是个很不好的体验,让人很受打击;再者,聊天室里去工作,让新同学看着聊天窗口就能学到你的工作方法,这个会让一些人觉得不爽,仿佛侵犯了一些个人信息,他宁可去写文档或手把手的教,就是不想在一个好像被“监视”的环境下做事。这个其实涉及到了 Freedom & Responsibility 的问题,如何权衡相信大家自有评判。

总结

虽然接触 ChatOps 领域时间不长,但已深刻感受了其独特魅力:

  1. 聊天室不再是聊天,随着伙伴角色的丰富与能力提升,聊天室会成为为一个协作、学习的基础支撑平台。当然,不同于现在很多微课堂,这里会让你看到高手的实操方式、让每个成员可拥有很酷的机器人拍档。
  2. 生态从小团队做起。以前一说生态就被放得很大,即使企业里面说生态,也时常会放到基线平台的概念里;现在我们真的可以快速去建立小生态了,你只要在一些基础上招聘一些机器人,就可以为你的团队生态提供一份贡献,相信每个企业的可优化空间都很大吧。
  3. 合理处理人与机器的关系,不要再是 e-e 关系 ,而把他作为团队里的成员,最吃苦耐劳的成员来看待,这才是 ChatOps 所期望的。
  4. 止于至善,这是我的校训,在 IT 这个领域,尤其是现在的 DevOps、ChatOps 领域更为适用,这些都是点滴积累,精益求精的建设过程,不可能有万能钥匙(标准产品)。

这里讨论的知识初步做一些基础运维的事情,但是正如文章之前所提,ChatOps 不局限于运维,后续的一些更高阶做法,会在团队实践后再做分享。

作者简介

顾伟,毕业于东南大学,现任普元公司主任架构师;先后参与和带领了华为 BME、中信银行 CBJUP、工商银行 CTP、中航信 RI、阿里云 ACE、普元云计算平台、普元 The Platform 等大型项目的交付;长期致力于 IT 技术研究、产品设计、架构咨询等工作,擅长 Web、OSGI、CI/CD、服务治理、云计算等领域技术;对 DevOps、自动化运维、微服务架构有着浓厚的兴趣。

如果你对 ChatOps、DevOps 相关话题感兴趣,欢迎扫码加入由顾伟主持的“普元云计算研发开放群”,讨论更多微服务、DevOps、容器相关内容,加群暗号“ChatOps”。


感谢木环对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016-11-03 18:3112433

评论

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

2021年Android程序员职业规划,小白勿进

android 面试 移动开发

2021年Java面试心得,整理出这份8万字Java性能优化实战解析

Java 面试 后端

2021年Android社招面试题精选,附答案解析

android 面试 移动开发

对比会声会影与剪映哪个制作转场效果更专业

懒得勤快

Github上线仅六天,收获Star超55K+,这套笔记足够你拿下90%以上的Java面试!

Java 架构 面试 后端 计算机

2021年一起努力应对互联网寒冬吧,Java程序员面试笔试宝典答案

Java 面试 后端

2021年Java常见面试题,面试官让我回家等通知

Java 面试 后端

2021年Android笔试题总,详解Android架构进阶面试题

android 面试 移动开发

2021年Java笔试题总,教你抓住面试的重点

Java 面试 后端

2021年Java者未来的出路在哪里,Java开发校招面试题

Java 面试 后端

2021年Java面经分享,程序员必备技能:时间复杂度与空间复杂度的计算

Java 面试 后端

2021年互联网大厂Java笔经,Java程序员如何有效提升学习效率

Java 面试 后端

2021年Java开发突破20k有哪些有效的路径,JVM发生内存溢出的8种原因

Java 面试 后端

2021年Java程序员职业规划,华为Java面试题目

Java 面试 后端

2021年Java面经分享,别再说你不会JVM性能监控和调优了

Java 面试 后端

2021年Java技术下半场在哪,35岁技术人如何转型做管理

Java 面试 后端

2021年Android网络编程总结篇,retrofit面试

android 面试 移动开发

2021年一起努力应对互联网寒冬吧,字节跳动Java高级工程师

Java 面试 后端

IT运维和自动化运维以及运维开发有啥不同?能解释下吗?

行云管家

互联网 运维 IT运维 自动化运维 云运维

谁是中国最受赞赏的创投机构?

创业邦

2021年Android程序员职业规划,阿里P7大牛亲自讲解

android 面试 移动开发

【等保知识】十个等保常见问题解答汇总

行云管家

网络安全 信息安全 等级保护 过等保 数据审计

2021年Java高级面试题总结,2021最新大厂高频微服务面试总结

Java 面试 后端

2021年Java开发突破20k有哪些有效的路径,2021Java面试笔试总结

Java 面试 后端

2021年Android社招面试题,阿里蚂蚁金服五面

android 面试 移动开发

2021年Java开发前景如何,大厂Java面试真题精选

Java 面试 后端

2021年Java网络编程总结篇,红黑树详细分析(图文详解)

Java 面试 后端

代码检查规则背景及总体介绍

百度开发者中心

最佳实践 代码规则

2021年Java者未来的出路在哪里,让人抓狂的Nginx性能调优

Java 面试 后端

2021年Android开发陷入饱和,又是一年金九银十

android 面试 移动开发

2021年Java开发者常见面试题,初级Java面试题及答案

Java 面试 后端

解读ChatOps:开源聊天机器人Hubot如何协助运维?_语言 & 开发_顾伟_InfoQ精选文章