运维工程师(SRE)必须掌握的技能有哪些?
偶尔在知乎上刷到的一个问题,浏览量和回答量都非常巨大,看来很多人都关注。我也写一篇文章,分享一下个人的看法。我会尽量言简意赅。
整体技能分类
首先,我们可以将运维工程师的技能分为以下几个大类:
- 个人素养
- 职业素养
- 基础技术
- 业务技术
- 横向技术
- 体系思考
各个类别具体含义以及如何提升,我们将在下面详细介绍。
个人素养
即个人软素质,所有岗位都需要,并不局限在运维工程师。比如:
- 沟通能力:逻辑清晰的表达能力至关重要,说了半天对方也 get 不到你的重点,就比较尴尬了,推荐书籍《金字塔原理》;沟通时容易带上个人好恶、个人情绪,不就事论事、容易评价别人,别人会非常反感跟你沟通,导致合作出问题,推荐书籍《非暴力沟通》等。(我也在努力改进中…)
- 学习能力:快速学习一门新知识的能力,问问题获取别人帮助的能力,推荐阅读著名黑客 Raymond 编写的短文《提问的智慧》,这个能力极为关键。
- 抗压能力:其实就是逆商。不抱怨,面向未来面向解法思考问题,时刻检视自己的情绪,保持积极的心态。
有一本书叫《商业至简》,副标题是:60天在早餐桌旁读完商学院。非常非常非常建议大家读一读。个人素养看起来挺虚的对吗?其实这才是决定一个人最终高度的东西。
职业素养
在父母面前你要做一个好孩子,在老婆面前你要做一个好丈夫,在儿女面前你要做一个好父亲,在不同的角色上是有不同的素养要求的。想象一下,公司、同事希望看到一个什么样的你?这个就是职业素养。
个人素养中提到的关键能力,是职业素养的基础。在此基础上,我们还需要:
- 有章法有条理:交代给你的事情你要搞清楚轻重缓急,搞清楚步骤逻辑,运维工程师可能经常面对很多杂项,这个能力非常重要。
- 主动汇报:要有主动汇报的意识,周报是一个典型的手段,要认真写,让别的同事和上级了解你的工作,呈现你的工作成果,有时还要考虑主动当面找上级沟通进展,提出一些方案让上级决策,给上级一些存在感。
- 管理预期:管理上级、下级、客户、伙伴的预期,实际执行时要尽量符合预期,甚至超越预期,尤其不要有过度承诺,这样会让别人对你失去信任。
- 主观能动性:或称为 ownership,即主人翁精神,别推一推动一动,不推不动,老板同事都会很反感这类人。
这里我只是罗列了我个人即时能想到的比较关键的点,当然,还有很多其他的点,不经一番寒彻骨,很难认可别人给你的大道理,这个是需要自己去持续体会和总结的。
基础技术
网络基础技术、Linux 基础技术、数据库基础技术、性能问题排查工具,是运维工程师必备技能。高级工程师和新手工程师在这些能力上差异明显,来,看看这张图:
常见的性能问题排查工具,就有如此之多,而且要能看懂这些工具的输出,必然是要懂得相关原理的,这个知识储备就相当大了。这些知识的学习,没有尽头,怎么学习?
- 对于入门而言,从 B 站找几个培训机构的视频来看基本就够了。
- 对于进阶,可以持续阅读一些经典书籍,比如《TCP/IP 详解》、《Linux 内核设计与实现》等。
- 优先学习工作中可以实践的技术,工作中用不到的技术时间久了就忘了,浪费时间。
这里我也王婆卖瓜一下,我曾经录制过一一套视频:《面向研发工程师的 Linux 进阶知识》,对于研发人员、初级运维人员都会有很大的帮助,这些知识在我看来都是工作必备基础,大家可以对照这个目录查漏补缺学习:
- 第1个:课程介绍和讲师介绍
- 第2个:课程大纲介绍
- 第3个:学习方法和理念,道的层面,肺腑之言
- 第4个:查看发行版和内核版本,uname、hostnamectl等
- 第5个:查看CPU信息,socket、core、thread、cpu.steal
- 第6个:查看内存信息,total不够、free、available的关系等
- 第7个:查看硬盘分区信息,tmpfs、快速找到大文件等技巧
- 第8个:查看网络信息,hostname、ifconfig、ip a、route
- 第9个:查看机器时间并校准,ntpdate和chronyd
- 第10个:yum配置,yum源
- 第11个:安装数据库并调优
- 第12个:安装redis,配置认证
- 第13个:wget 和 curl 命令的小技巧
- 第14个:环境变量配置,自动执行.bash_profile的原理
- 第15个:vim 使用技巧和前后台进程切换的方法
- 第16个:simplehttpd的讲解
- 第17个:nohup 的详细解释,stdout、stderr、stdin 详细解
- 第18个:使用systemd在生产环境运行进程
- 第19个:ulimit基本介绍,演示句柄超限的报错
- 第20个:配置ulimit的方法,两个地方都要注意
- 第21个:进程查看类的操作:ps、pgrep、ss等
- 第22个:端口探测的几种方式以及nc的使用技巧
- 第23个:lsof的介绍,查看进程的日志路径的技巧
- 第24个:杀死进程,kill的注意点
- 第25个:进程的 proc 目录,这是一个宝藏目录
- 第26个:查看某个进程的资源占用情况
- 第27个:top命令使用技巧
- 第28个:vmstat需要关注的点
- 第29个:容易被误解的iostat,有哪些字段会坑人
- 第30个:查看单个进程的io情况
- 第31个:ifstat命令介绍,配合watch命令使用
- 第32个:iftop的使用讲解
- 第33个:iptraf统计网络流量情况
- 第34个:dstat资源性能数据查看的集大成者
- 第35个:机器免密登录
- 第36个:利用pssh批量执行命令
- 第37个:利用pscp批量分发文件
- 第38个:使用Python工具的几个小场景
- 第39个:crontab入门,如何解决找不到命令的问题
- 第40个:crontab定义方式,给出一些生产样例
- 第41个:crontab第一天条,自行检查上次调度是否退出
网上资料很多,不过比较零散,如果你想省事,可以直接看我的视频,加入星球即可免费查看:
业务技术
运维其实也分很多细分领域,我这里所谓的业务技术就是指你所在的细分领域要重点攻克的领域知识。比如:
- 接入层的运维要重点攻克 Nginx、HAProxy、LVS、Keepalived 等技术。
- MySQL 的 DBA 就要重点攻克 MySQL、InnoDB、MyISAM、SQL 优化、索引优化等技术。
- Kafka 的运维要重点攻克 Kafka、Zookeeper、Kafka 集群的搭建、Kafka 的高可用等技术。
- 等等。
显然,MySQL 的 DBA 不需要对 Kafka 那么熟悉,反之亦然。所以眉毛胡子一把抓没有侧重点是不可取的。当然,这是大厂的做法,大厂通常喜欢专精的人才,一厘米宽度一公里深度,这些人工资高。小公司反倒是喜欢全栈工程师,每个方向不需要特别精通,但是要都能懂一些。
横向技术
运维领域里有些方向是横向的,DBA 需要关注,Kafka 的运维也需要关注,比如 监控/可观测性、容量管理和规划、变更、配置管理、混沌工程、安全、自动化等等。
高阶的运维工程师,对这些横向知识和技术也要有相当的理解。比如监控/可观测性方向,公司可能有专人来搭建相关的平台,但是作为具体某个运维人员,你要知道如何接入数据、如何更快发现问题、如何做数据运营、如何利用平台提升故障定位能力,甚至要制定一些规范和最佳实践。
这些横向技术,几乎每个方向都可以单独写一本书,内容驳杂,我个人的职业生涯中花费了极多时间在监控/可观测性方向,之前在极客时间出过一个专栏,有兴趣的可以看看。
你也可以读书来获取这些监控知识,推荐《Prometheus 监控实战》这本书,作者是:詹姆斯·特恩布尔。
体系思考
站在运维全局思考,比如下面这些问题:
- 运维给公司带来的价值是什么
- 运维和其他团队的职能边界和合作模式是什么
- 运维的发展方向是什么
- 运维的工作重点是什么
- 运维的工作效率如何提升
诸如此类一些稍微显得会比较虚的问题,其实一点都不虚。实际在大厂晋升述职的时候,高阶晋升的时候,这些问题都是要考虑的。我之前写过一篇文章,大家可以读读找找感觉:《从CTO视角来看,如何搭建运维/SRE能力》。
本文作者:秦晓辉,开源项目 Open-Falcon、Nightingale 创始人,快猫星云联合创始人,极客时间《运维监控系统实战笔记》专栏作者。