红帽白皮书新鲜出炉!点击获取,让你的云战略更胜一筹! 了解详情
写点什么

解读 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:3112396

评论

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

基于 Flink ML 搭建的智能运维算法服务及应用

Apache Flink

大数据 flink 实时计算

长安信托:拥抱数字信托,探索多项目管理新路径

万事ONES

Excelize 入选 2022 中国开源创新大赛优秀项目

xuri

golang 开源 Go 语言 Excelize OOXML

物联网核心套件IoTCore:设备状态数据存储到时序数据库TSDB

百度开发者中心

物联网

LeetCode题解:136. 只出现一次的数字,哈希表,JavaScript,详细注释

Lee Chen

JavaScript LeetCode

目前led显示屏厂家存在的问题

Dylan

制造 行业 LED显示屏

AI开发实践:关于停车场中车辆识别与跟踪

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号 4 月 PK 榜 车辆检测

Apache Paimon 在同程旅行的探索实践

Apache Flink

大数据 flink 实时计算

Flink SQL 在美团实时数仓中的增强与实践

Apache Flink

大数据 flink 实时计算

2023年成都.NET线下技术沙龙来了!大咖分享,报名从速

MASA技术团队

.net dapr MASA

2023 年金三银四最新版 Java 面试八股文教程,涵盖 25 大专题:Java 基础 +spring 全家桶 + 大数据 + 网络 + 设计模式 + 算法

三十而立

阿里工作10年,我总结出了这份1071页Spring全家桶核心笔记

三十而立

从零学习SDK(2)SDK的基本概念和组成部分

MobTech袤博科技

建木在 Rainbond 上使用实践

北京好雨科技有限公司

云原生 CI/CD #Kubernetes# rainbond 企业号 4 月 PK 榜

Higress GitHub star 突破 1k,来自社区开发者和用户的寄语

阿里巴巴云原生

阿里云 云原生 Higress

autodesk maya 2023最新中文版 Maya动画和建模软件

魔仙苹果mac堡

Autodesk Maya maya破解版 玛雅2023下载

从Spring的AOP看Synchronized锁失效和事务失效的情况

做梦都在改BUG

深度学习基础入门篇[二]:机器学习常用评估指标:AUC、mAP、IS、FID、Perplexity、BLEU、ROUGE等详解 1.基础指

汀丶人工智能

人工智能 机器学习 深度学习 算法评价指标

【干货】验证码的常见类型总结

宙哈哈

php html 验证码 短信验证码

恶意爬虫?能让恶意爬虫遁于无形的小Tips

宙哈哈

Python html nginx 爬虫

深入探索Go语言的unsafe包,揭秘它的黑科技和应用场景!

王中阳Go

golang 高效工作 面试题 黑科技 Go 语言

2023Java岗面试,进互联网大厂必备Java面试八股文真题解析

程序知音

Java java面试 后端技术 八股文 Java面试八股文

解决Parallels Desktop 18.2.0提示“由于临界误差,不能启动虚拟机”的问题

魔仙苹果mac堡

Parallels Desktop 18 pd18虚拟机 PD虚拟机不能联网

关于验证码,你不知道的一些问题!

宙哈哈

php html 记录 验证码

远程调试为何要亲历现场,也许也可以这样解决

石臻臻的杂货铺

远程调试

局域网IP扫描软件:IP Scanner Pro激活版

真大的脸盆

Mac IP 局域网管理 IP扫描工具 局域网扫描

基于 Nginx&Lua 实现自建服务端埋点系统

亚马逊云科技 (Amazon Web Services)

Amazon

一文快速了解火山引擎A/B测试平台

字节跳动数据平台

大数据 AB testing实战 A/B 测试 企业号 4 月 PK 榜

从逻辑到硬件:如何转换PCB布局?

华秋PCB

工具 电路 PCB PCB布局 PCB设计

JetBrains CLion 2023中文版安装教程CLion 2023新功能

魔仙苹果mac堡

C/C++ CLion 2023 JetBrains CLion破解版

Autodesk AutoCAD 2024 Mac(cad2024) v2024.3 支持M1 兼容Mac13系统

魔仙苹果mac堡

mac软件下载 M1芯片 cad2024激活版 Autodesk AutoCAD

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