当运维做到第二年,我开始意识到一个扎心的事实:很多排障时间不是花在敲命令上,而是花在跟人解释“我们现在到底哪段链路不通”上。无论是网络拓扑、服务依赖,还是故障处理的时序关系,没有一张图,光靠嘴和聊天记录,根本讲不清楚。这也是我后来把“找好用的免费在线画图工具”这件事,正经当成了一个效率项目来做的原因。
这篇文章不是我随便翻几个软文总结出来的,而是把过去几年在运维实战中用过的画图工具做了次彻底盘点和梳理。我会直接告诉你哪些工具能真正提升效率,哪些功能看起来花哨但实际用不上,以及我在画网络拓扑图、故障链路图、架构说明图时踩过的坑。如果你也是运维工程师,或者经常需要给团队、领导画图说明问题,这篇文章值得你花几分钟看完。
1. 运维人的一天,图到底卡在哪个环节
1.1 那些“画不出来就说不清楚”的时刻
运维这个岗位有个很微妙的特点:平时没人觉得你重要,一出故障全公司都盯着你。而真正出故障的时候,你会发现最要命的不是不会修,而是没办法在短时间内让所有人明白“哪里坏了、影响范围多大、我们现在要做什么”。
我有过几次印象特别深刻的经历。一次是办公室网络整体变慢,排查了一上午,最后发现是二层广播风暴,但当时要跟领导说清楚什么是广播风暴,我只能在白板上画了个极其潦草的星型拓扑,画完自己都有点看不下去。另一次是微服务之间的调用链出问题,开发同事说A服务调用B服务超时,运维说网关那边流量异常,网络组说交换机端口有丢包,三方各执一词。如果当时有一张清晰的调用链路图,把服务、端口、防火墙策略、交换机链路都标出来,问题早就定位了。
还有一个高频场景是交接。老员工离职或者转岗,口头交代了一遍系统怎么部署的、网络怎么规划的,新人听得一头雾水。没有图,整个团队的运维知识就只存在于几个人的脑子里,这是很危险的事情。
1.2 为什么在线工具比Visio和PPT更适合运维
很多人的第一反应是:画图用Visio不就行了?Visio确实功能强大,但它有几个问题:第一,正版授权费用不便宜,公司不一定愿意给运维团队每个人都买;第二,本地安装意味着你在机房、在客户现场、在临时借用的电脑上没法随手打开;第三,Visio的协作能力偏弱,画完发给别人,别人改一版再发回来,版本管理全靠文件名。
用PowerPoint画图就更痛苦了。画个矩形还要手动对齐,连线拐个弯要调半天,改一个节点的位置旁边的线全乱了,画完一张像样的架构图至少一个小时。
在线画图工具解决的恰恰是这几个痛点:浏览器打开就能用,不需要安装;自动保存到云端或者本地,换设备也能继续;支持多人同时编辑,运维和开发可以实时改一张图;最关键的是,绝大多数优秀的在线画图工具对个人用户免费,或者免费额度完全够用。
2. 亲测保留的四款免费在线画图工具
工具这东西,不是越多越好,而是要找对场景。我陆陆续续试过不下十款,最后真正留下来并且高频使用的就是下面四款。它们各有侧重,覆盖了我日常运维工作中几乎所有的画图需求。
2.1 diagrams.net:日常主力,没有它我早疯了
diagrams.net就是大家常说的draw.io,目前我的主力工具,没有之一。它是一款完全开源的在线绘图工具,桌面端和网页端都有,用起来完全一样。我最看重它的一点是:不需要注册账号,打开网页就能画。对运维来说,这太重要了。公司内网环境、客户现场、临时的新电脑,任何一台能上网的设备都可以直接打开干活。
它内置的形状库非常丰富,尤其是网络设备相关的图标,这个后面我会专门讲。另外它支持把文件保存到本地、GitHub、GitLab、OneDrive等多个位置,灵活度极高。对我个人来说,最常用的组合是本地文件加公司内部的Wiki目录,画完直接嵌入到文档里,整个团队都能看。
免费、无限制、功能强大,这三个词加在一起,它就是免费画图工具里的六边形战士。我在之前的公司带团队的时候,要求团队里所有新人都必须学会用draw.io画拓扑图和流程图,因为它没有任何使用门槛,不用申请授权,不用等IT开通账号。
2.2 Excalidraw:手绘风救急神器
Excalidraw是一款走手绘风格的在线画图工具,它的画风就像在纸上用马克笔随便画的,歪歪扭扭但特别有亲和力。可能有人会觉得这种风格不专业,但在实际工作中,它的“不专业感”反而是优势。
举个例子,你在排查一个故障,需要拉一个临时的多人会议,大家要快速在同一个白板上梳理思路。如果用draw.io,操作起来还是有点“正式”,谁负责拖图标、谁负责连线,配合起来有点乱。但Excalidraw特别轻,打开页面就能画,而且支持多人实时协作,只需要分享一个链接,所有人就能同时在画布上写写画画。它的这种草图风格让参与者更有“临时讨论”的感觉,不会被精致的图标带偏思路。
所以我对Excalidraw的定位是:快速表达、临时沟通、多人脑暴。正式文档里的架构图它干不了,但在“把话说清楚”这件事上,它是我用过最快的工具。
2.3 Mermaid Live:用代码画图,文档一次成型
Mermaid不是传统意义上的在线画图软件,它是一门用文本描述图表的语言,配合在线编辑器,写代码的同时自动生成图表。对于运维来说,这个工具的价值在于:图表可以和文档一起维护。
什么意思呢?比如你的应急预案里有一段流程图,用传统工具画好之后,如果流程改了,你得打开画图软件重新调整,然后重新导出图片,再替换到文档里,非常繁琐。但如果用的是Mermaid,你只需要改几行文本代码,图和文档同步更新,整个过程都在同一个文件里完成。
我用Mermaid画得最多的是两类图:流程图和时序图。告警处理流程、变更操作流程、服务调用时序,用代码写出来之后,描述得非常精确,而且可以直接放进Markdown文档或者GitLab的Wiki里。在线编辑器mermaid.live也非常好用,左边写代码右边实时看效果,确认没问题了再粘贴到文档里。适合有一定代码基础的运维同学,如果你平时写脚本、看代码,上手Mermaid大概只需要十分钟。
2.4 ProcessOn:模板丰富,适合给领导快速出图
ProcessOn是国内用户比较熟悉的一款在线画图工具,思维导图、流程图、原型图、网络拓扑图都支持。它最大的优势是模板社区做得很好,里面有大量现成的运维相关模板,比如机房网络拓扑图、K8s架构图、监控系统架构图等,直接搜索“网络拓扑”就能找到一堆可以参考的成品。
它的免费版限制是只能创建9个文件,这个额度对重度用户来说不够用。我的使用策略是把ProcessOn当成“灵感库”和“快速出图站”:需要给领导做汇报材料时,先在ProcessOn模板库里找找合适的样式,觉得合适就直接用它的模板改,因为免费版文件数量有限,所以我不会把它当成数据存储的地方,重要文件还是导出图片或者用draw.io重绘一遍。
对于一个免费在线工具来说,ProcessOn的模板质量和数量确实值得称赞。如果你的公司没有采购专业的绘图软件,领导又经常要图,它是最快出成果的方案。
3. 网络拓扑图实战:从草图到能交付的架构图纸
画图工具的选型说完了,下面进入实操环节。运维这边最高频的绘图任务就是画网络拓扑图,我以draw.io为例,完整走一遍从需求梳理到最终出图的流程。这套方法是个人经验总结,不一定是最优解,但照着做大概率能少走弯路。
3.1 画拓扑前先理清三层信息
很多人画拓扑图画得一塌糊涂,不是工具用得不好,而是动手画之前根本没想清楚。我自己的经验是,画任何一张拓扑图之前,先梳理三层信息:
第一层是设备层。机房里有哪些核心设备,路由器、核心交换机、汇聚交换机、防火墙、负载均衡、服务器、存储,先把清单列出来。这一步是为了不遗漏关键节点。
第二层是链路层。哪些设备之间物理上是有线缆连接的,走的是什么链路,带宽多少,是否做了链路聚合,有没有冗余线路。这一步决定图上的连线怎么画。
第三层是业务层。这些设备承载了什么业务,哪台服务器跑的是数据库,哪台跑的是应用,哪些设备处于同一VLAN,哪些服务通过防火墙策略放行。这一步决定图的层次和标注怎么加。
建议大家不要上来就拖图标。先在旁边用纯文本把这三层信息列出来,等确认差不多了再进画布。我见过很多同事画到一半发现少了一个核心交换机,所有连线都要重排,非常浪费时间。
3.2 在draw.io里使用网络拓扑相关的关键操作
打开draw.io之后,新建一个空白图,接下来要做的事情是加载网络设备形状库。很多新手不知道这一点,直接在默认形状里找路由器、交换机图标,找了半天都找不到。正确做法是点击左侧边栏底部的“More Shapes”按钮,在弹出的窗口里勾选“Networking”分类,确定后左边就会出现完整的网络设备图标库,包括路由器、交换机、防火墙、无线控制器、服务器等等。
图标准备就绪后,按照设备层的清单先把所有节点拖到画布上。我习惯把整个画面分成几个区域:最上面是外网和边界设备,中间是核心交换区,下面按业务划分服务器区。大致摆好位置之后,统一选中所有节点,用工具栏里的“Arrange”功能做对齐和等间距分布,这一步做完了图纸立刻看着就舒服了。
连线的时候注意几个细节。第一,连接线尽量使用正交方式(默认就是),不要出现斜线,斜线会显得图纸很不专业。第二,用不同颜色的连线表示不同链路,比如橙色表示千兆链路,蓝色表示万兆链路,红色表示故障或备用链路,这个习惯在后续排障时特别有用。第三,尽量把线连在节点的中心点,不要连在边缘任意位置。
把设备和链路都画完之后,最后一步是加标注。每个节点下面标注设备名称和IP地址,每条链路上标注接口编号和带宽。线上可以点击连接线中间自动生成的标签框输入内容。一个经验是设备命名一定要规范,比如“SW-Core-01”、“FW-Edge-01”这种格式,在后续做CMDB或者资产盘点时会对得上,避免图是图、库是库。
3.3 导出的三种姿势对比
拓扑图画完,接下来面临的是交付问题。不同场景需要的导出方式不一样,我给大家整理一下我常用的三种方式以及适用场景。
第一种是导出为PNG图片,适用于日常文档、聊天群里快速分享。注意draw.io导出PNG时有个选项叫“Zoom”,如果只是放到Word文档里,100%就够了;如果要放到大屏上演示,调成200%再导出,避免模糊。第二种是导出为PDF,适用于打印和正式汇报。PDF是矢量格式,放大缩小都清晰,而且适合打印出来贴在工位旁或者放在机房里做参考。第三种是直接嵌套到在线文档或Wiki里,把draw.io的图和文档进行关联存储。对于公司内部知识库来说,这种方式最好用,后续拓扑有变化,双击图片就能直接进入编辑器修改。
另外很多人忽略的是draw.io的“File -> Embed”功能,它会生成一个HTML片段,复制到支持iframe的Wiki或网站在线显示。在团队内部知识归档时,这个功能比贴一张图片好用十倍。
4. 故障链路图与应急预案流程图:另一种硬需求
拓扑图画的是系统“正常时候”的样子,但运维还有一个高频需求是把“异常时候”的样子画出来。比如故障发生时,请求是怎么走的、在哪一环出了问题、影响面有多大。这种图画出来之后,不仅方便复盘,也能让非技术背景的同事快速理解。
4.1 事件链图:让故障影响一目了然
画事件链图,我一般用的是纵向的链路表达方式。最上面是用户入口,然后一层一层往下画到数据库,哪些环节出现故障就用红色标出来,哪些环节是正常的用绿色标出来。这样一张图发到故障群里面,所有人都能一眼看出当前是哪个组件出了问题、影响了几层服务。
这类图用draw.io画就足够了。我的操作习惯是先把正常状态下的调用链路画出来,然后复制一份,在复制的副本上把故障节点标红,旁边加一个文本框说明故障现象和发生时间。为什么要复制一份而不是直接改原图?因为故障消除了之后,这张带标注的故障图是复盘文档的重要素材,你要保留原始链路图作为对照。直接在原图上改,复盘的时候就找不到“正常是什么样”了。
这里有个小技巧:把不同层次的服务用不同底色的大框框起来,比如接入层是浅蓝色,应用层是浅绿色,数据层是浅橙色。这样一张图上即使有几十个节点,读者依然能靠颜色快速定位层次,比纯靠线和文字说明高效得多。
4.2 用Mermaid把流程图写进运维文档
除了画布式的工具,我现在越来越习惯用Mermaid来画流程性质的图。它最大的好处是“图随文走”。比如我写告警处理预案时,直接在文档里嵌入一段Mermaid代码,比贴一张截图干净得多,而且后续修改流程只需要改文本再提交一次,不用重新打开画图软件。
举个例子,一段典型的告警分流流程,Mermaid代码是这样的:
flowchart TD A[收到告警] --> B{优先级判断} B -->|P0/P1| C[创建紧急事件群] B -->|P2| D[创建普通工单] B -->|P3| E[记录日志,次日处理] C --> F[通知相关负责人] D --> G[进入SLA计时] F --> H{15分钟内响应?} H -->|是| I[开始排障] H -->|否| J[升级告警] I --> K[定位故障原因] K --> L{是否可自动恢复?} L -->|是| M[执行恢复脚本] L -->|否| N[手工介入处理]维护这种图,你不需要打开特别的编辑软件,在任何文本编辑器、在GitLab、在Markdown文档里都能直接改。在线版的mermaid.live还可以把生成的SVG直接下载下来。用Mermaid画图,本质上是在训练一种“流程思维”:每一步必须描述清楚分支条件是什么、流向哪里,写出来的图才不会有逻辑漏洞。
5. 踩坑合集:这些“隐形雷”我替你们趟过了
工具好归好,但用久了总会遇到各种问题。这部分我把自己和团队踩过的坑整理一下,希望大家看到后能少走弯路。
5.1 在线存储选错,数据差点没找回来
draw.io在线版在保存的时候会让用户选择存储位置,我早期图省事直接选了浏览器本地存储,结果有次清理浏览器缓存,画了一个下午的拓扑图差点没找回来,后来靠浏览器的历史记录才勉强恢复。这个教训告诉我:重要文件每次画完必须确认保存到了可控的位置,要么是本地文件夹,要么是公司的GitLab或网盘,千万别依赖浏览器本地存储。
另外一个安全方面的建议是,涉及公司内部IP地址、服务器清单、网络架构这类敏感信息的图,尽量使用桌面版绘制并加密保存到公司内部系统,不要随意上传到公网网盘或共享链接。很多在线工具虽然方便,但数据安全等级不一定满足公司的合规要求,这一点运维自己要把好关。
5.2 导出图片模糊、字体错乱
用draw.io导出PNG时,最容易出现的问题就是导出的图片文字发虚。原因很简单:导出时缩放比例没调。如果你在画布上用了很长的段落文字,导出为100%的PNG时,字体渲染往往不如SVG清晰。解决办法有两个:要么把画布放大到200%再导出,要么直接导出SVG格式。SVG是矢量格式,放大多少倍都清晰,基本上现在我做拓扑图和架构图,需要展示时就导出PNG,需要归档时一律用SVG或PDF。
还有一个常见坑是换电脑打开文件时字体变了。draw.io文件里记录的字体,如果新设备没有安装,会自动替换成别的字体,导致图中的文字排版错乱。我的经验是画图时尽量用系统通用字体,不要为了好看选择生僻字体,不然下次打开就是一场灾难。
5.3 大图卡顿和协作冲突
当一张图的节点超过两三百个,层级又多的时候,draw.io在线版的编辑体验会明显下降,拖动节点会有延迟。我的应对方案是把大图拆成多个小图,比如把全网拓扑拆成“核心层拓扑”“业务区拓扑”“网络出口拓扑”三张图,然后在总览图里面通过超链接把子图串联起来。这样既保证了细节,又不会让单张图卡到无法操作。
多人实时协作也有坑。draw.io在网页里支持多人同编辑一张图,但在实际使用中,如果两个人同时拖动同一个节点,后保存的会把先保存的覆盖掉。我的经验是协作的时候做好分工,比如一个人负责设备布局,另一个人负责连线标注,子任务完成后立刻另存为一个带时间戳的版本,互相之间不要在同一片区域同时操作。
5.4 别把时间花在“画得好看”上
这条算是我最想对所有运维新人说的“心法”。很多人一开始接触画图工具,容易陷入一个误区,就是花大量时间去美化图纸:加阴影、调渐变、选图标风格、调整配色,一张图画了三小时还觉得不够完美。但对于运维来说,图的目的是传递信息,不是参加设计比赛。
我的原则是:只要别人能一眼看懂这张图在表达什么,那就够了。与其把时间花在美化上,不如多花时间确认信息是否准确、链路是否遗漏。如果后续有正式汇报需求,再基于已有版本花十分钟做一次美化即可,不要在画图工具里追求一步到位。
6. 画图能力的长期价值:从应付任务到构建沟通优势
6.1 三个一定要养成画图习惯的运维环节
我自己总结下来,运维工作里有三个环节特别值得养成画图习惯,长期坚持收益极大。
第一个是故障复盘。每次线上故障处理完,不管大小,都画一张事件链路图,把发生时间、现象、排查过程、根因、恢复动作全部串起来。这比写一大段文字总结有用得多,复盘会上投到屏幕上,每个人都能立刻看清楚问题出在哪里。坚持下去,你就拥有了一套属于自己的故障知识库,新同事来了一看就懂,比单独培训高效太多。
第二个是变更方案。做变更之前先画流程图,把每一步操作、判断点、回滚条件都写清楚。画完之后你大概率会发现原方案里有些分支没考虑周全,比如回滚点设在这里行不行、如果中间某一步失败怎么处理。在变更这种高风险场景里,一份画在纸面上的流程,比脑子里拍脑袋的流程靠谱得多。
第三个是系统交接。运维团队流动是常态,交接文档里如果没有图,新人光是理解系统架构就要花好几周。如果你能把网络拓扑、服务架构、部署流程都画得清清楚楚,新人的上手时间至少缩短一半。
6.2 给新人的练习路径,别走弯路
如果你刚入行运维,或者画图能力还很薄弱,我建议你按这个路径来练习。第一阶段,先拿自己的测试环境练手,把当前系统的大致架构画出来,不追求好看,只要节点和连线表达清楚就算及格。第二阶段,尝试给这张图加上IP、端口、服务名等标注,让它能直接当成交接文档使用。第三阶段,在遇到一次完整故障后,独立画出从告警到恢复的全流程事件链图,并在团队里做一次分享。第四阶段,把常用的应急流程用Mermaid等代码形式固化到文档里,实现图与文档一体化维护。
你会发现这几个阶段走完之后,画图对你来说就不再是“需要刻意去做的任务”,而变成了一种条件反射般的表达方式。遇到问题,脑子里会自动把一个复杂的调用关系拆成几个节点和几条线,然后就自然知道该在什么时候、用什么工具、画出什么样的图。
这种能力在面试、晋升答辩、跨部门沟通中都很加分。运维这个岗位的很多人吃了“说不清楚”的亏,而会画图的人,天然在沟通上多了一个杀手锏。
如果你已经有一些画图习惯,建议复盘一下自己常用的工具链,看看是不是过度纠结于工具的华丽程度,忽略了图本身要传递的信息。工具是拿来解决问题的,不是拿来折腾人的,能用最快速度把信息表达清楚,就是好工具。我个人的体会是,坚持用draw.io做主力、Mermaid做文档内嵌、Excalidraw做临时协作,再把ProcessOn当成模板参考,这套组合基本覆盖了运维日常所有画图场景,成本为零,效率却很高。