基于Ansible的磁盘空间巡检技术

2021-04-20 02:23黄旭东刘洁周文粲张东湖
电子技术与软件工程 2021年2期
关键词:开源命令运维

黄旭东 刘洁 周文粲 张东湖

(北京大学人民医院 北京市 100044)

1 引言

自从电子计算机诞生以来,信息技术的发展日新月异,短短几十年,IT 技术已经普及到人们的工作和生活中,各行业的电算化变革已是昨天的故事,如今各行各业都在积极投入信息化建设,IT 信息系统犹如人体的神经一样重要,成为开展业务不可或缺的重要组成部分。

医院的信息化建设也是紧跟时代步伐,先后建立了HIS、EMR、LIS、PIS、PACS 等多个系统,用计算机系统替代了纸质单据流转,让医疗业务和配套的物资、财务、决策等业务更加高效[1];而随着医院向数字医疗的转型,信息系统的侧重点从服务于医院内部管理向服务于患者倾斜,信息系统的数量达到几十个、上百个[2];同时,医院在经历了药品零加成、耗材零加成等医疗改革后,需要强化内部管理,借助信息系统对各项工作进行优化以便提高经营效益,对信息系统按业务特性进行打包组合,建设了医疗业务、区域医疗协同、运营管理、后勤保障、科研、教学等多个业务系统集群[3]。业务系统扩建和新增的背后,是服务器数量的急剧增长,从几十台增长到数百台,其中大型医院在一千台左右。

数字医疗转型带来的服务器数量剧增,给服务器的运维工作提出了新的挑战——如何在不增加运维工程师的情况下,有效管理大量服务器?

2 调研过程

2.1 转型思路

传统的手工运维,是运维工程师登录一台服务器进行运维操作,完成之后再登录下一台服务器;熟练的工程师可以同时操作多台服务器,但同时操作的服务器数量也很有限;即便每个工程师都变成熟练工,也是把运维工程师变成了流水线上拧螺丝的工人,大量时间花在简单、重复的工作上,没有发挥出运维工程师的价值。因此,需要转变思路,寻找自动化的运维工具,让计算机程序代替人来做简单重复的工作,让工程师把节省下来的时间用在其他有技术含量的工作上。

2.2 技术方案选型

软件行业有商业软件和开源软件两大分支。开源软件一直是软件行业的一支重要力量,为软件技术的发展做出了不可磨灭的贡献,例如知名的开源软件Linux、Java、MySql、Eclipse、Apache、Hadoop、Android 等[4]。开源的自动化运维工具也有不少,例如Zabbix、SaltStack、Fabric、Ansible 等。开源软件具有源代码开放、支持二次开发、可以免费使用等优点[5],因此本文的首选是对开源工具进行二次开发。

医院的信息系统,既有运行在Windows 上的,也有运行在Linux 上的,选择自动化运维工具首先考虑的因素,是工具对这两大操作系统阵营提供了良好的支持[6]。按照这个标准,调研到的开源工具有Chef、Puppet、Ansible、Terraform、saltstack 等,其中Ansible 是这些工具里非常出色的[7],本系统选择了Ansible 并对其进行二次设计和开发。

2.3 Ansible简介

Ansible 是Red Hat 公司出品的开源自动化运维工具,基于Python 语言开发,可管理Windows 和Linux 等多种操作系统;具有配置管理、应用程序部署、远程命令执行、复杂任务编排等功能;可管理数千台服务器,有良好的并发管理;使用是免费的,不需要给任何公司或机构支付费用;提供了二次开发的API 接口[7],在遵守GPL 3.0 协议的前提下可以任意修改Ansible 的代码、进行二次开发、免费使用或分发修改后及二次开发后的程序。

2.4 试点功能选择

本系统设计和建设的思路,是使用软件开发的螺旋模型,每一次迭代实现一些功能,经过多次迭代开发出功能丰富的系统。

经过运维小组内部讨论,本文选择实现的首个功能是磁盘空间自动巡检,原因如下:

2.4.1 常见痛点

磁盘空间不足是一个常见的生产问题,一旦发生会影响正常的业务使用,是运维工作日常的一个关注点。依靠人工对服务器的磁盘空间进行巡检,工作量大、单调重复、效率低、容易遗漏或误报。如果能自动化巡检磁盘空间并预警,在节省人工、结果准确性等方面收到的效果会很明显,自动化运维系统的后续建设工作容易得到各方的支持。

2.4.2 涵盖Windows 和Linux

Windows 磁盘分区与Linux 有很大差异,但是容量、可用容量等逻辑概念是相同的。本系统通过调用Ansible 的API 的方式远程执行命令,获取Windows 和Linux 的磁盘信息。

2.4.3 便于验证

人工对比数据,数据量小了不足以验证有效性,数据量大了费时费力不易操作,因此需要设计一个快速对比大量数据的方法,用来检验系统运行情况。某医院现有一套虚拟化平台[8],虚拟化平台提供的工具可以导出所有虚机的磁盘空间数据,包括分区名称、总容量、可用容量等。用虚拟化平台导出的数据和本系统的数据进行大量数据进行比对,验证本系统采样的结果是否准确,非常方便,省时省力又高效。如果两个系统的数据出现较大偏差时,可以人工登录到操作系统中查看数据,确认哪个系统的数据是准确的。

2.4.4 无入侵性

Linux 和Windows 获取磁盘空间是从操作系统的文件中读取数据,进行格式转换等操作。即获取磁盘空间数据是一个读取操作,不会在磁盘上写入内容引起磁盘空间的数据发生变化,也不会更改操作系统里的磁盘空间数据,这样既避免了操作失误影响生产环境,又便于比较本系统采样到的数据和原始数据。

2.4.5 资源消耗低

如前所述“df”命令和“wmic logicaldisk”是从几个系统文件中读取数据并进行简单的运算,对客户机的性能消耗极低;Ansible对单个客户机发送命令,以及回传结果,加起来总共不超过2000字节,对网络带宽占用极低;Ansible 默认的并发数量是一个批次5个客户机,对网络吞吐量占用很低。

3 系统设计和实现

3.1 设计思路

Ansible 提供了配置管理、远程命令执行等非常有用的功能,但是只有命令行界面,所有的功能都是输入命令和参数、或者编写复杂的playbook 才能实现。对于零基础的人来说,需要花不少时间先学习Ansible 的模块、配置项等基础知识,再学习各种命令和playbook,学习周期很长,记住命令和参数的难度较大,对初学者不太友好。

另一方面,按照等级保护的要求,在生产环境中,信息系统需要有用户管理、权限控制、审计等功能,而原生的Ansible 没有提供这些功能。

因此,需要对Ansible 进行二次开发,将常见功能变成web 图形化界面,运维人员用鼠标操作就能进行自动化运维,这样能大幅降低使用门槛、减少编写Ansible 命令或脚本出错的概率;同时,增加用户管理、权限控制、审计等功能,以便符合等级保护的要求,让本系统适用于企业环境。

3.2 系统设计

系统架构设计如图1所示。

图1

主机即服务器,是指部署在医院的物理服务器和虚拟服务器,包括Windows 系统和Linux 系统。

Ansible 管理主机,是指安装了Ansible 程序的服务器,一个企业中有一个Ansible 管理主机即可(为避免歧义,下文使用“管理主机”指代安装了Ansible 的管理主机,“主机”或“服务器”指代其他服务器)。

基础服务层,根据功能划分为多个模块:

(1)资源管理模块是指在系统中登记服务器的信息。标签管理是根据业务特点设置的标签列表,有业务系统、操作系统版本等,便于在后续的操作中通过标签快速选择一批服务器。服务器的信息有IP 地址、操作系统名称、标签等,其中标签是从标签列表中选择,不能手工输入。

(2)任务管理模块的功能是创建、修改、查看任务。脚本管理用于选择要执行的脚本、设置执行时间、设置执行周期等。临时命令是编写并执行Ansible 的ad-hoc 命令。

(3)Ansible 接口模块包括了特定功能的脚本、调用Ansible的API、解析Ansible 结果、将解析结果写入数据库或返回上层等功能。

(4)其他模块包括了Ansible 的连接参数、密钥文件以及审计功能等。Ansible 连接参数是指Ansible 连接服务器使用的端口、用户名、通信协议、身份认证方式等。Ansible 既支持用户名+密码的方式连接主机,也支持用户名+密钥文件的方式连接主机;本系统采用了RSA 密钥文件的方式,安全性更高,也便于统一部署、管理。审计管理主要是记录用户登录、用户操作等信息,用于事后审计。

业务展示层是可视化的WEB 网站,提供用户操作的界面、权限管理等功能。用户登录WEB 后,在网页上进行任务管理、密钥管理、主机管理等各种操作,以及查看任务结果。用户管理是用户账号的创建、启用、禁用等。权限管理是给用户账号分配权限,允许使用哪些功能。

3.3 Ansible部署

本系统的功能依赖于Ansible,需要在服务器环境中部署Ansible 才能运行。狭义的Ansible 部署是在管理主机上安装并配置好Ansible 程序。广义的Ansible 部署还包括更改主机的设置。不管是Windows,还是Linux,操作系统默认的设置无法与Ansible 通信,需要修改系统设置才能让主机和Ansible 通信,实现自动化运维。

3.4 主要功能的实现

定期巡检和手工发起单次巡检的工作流程和具体实现完全相同,除了定期巡检有额外的定时任务管理。流程中各节点功能如下:

第一步,用户在web 页面上选择服务器,发起巡检任务。

第二步,根据服务器的操作系统,生成对应的命令。Linux的命令是“df”;Window 的命令是“wmic logicaldisk get name,filesystem,size,freespace”。接着调用Ansible 的API 将命令发送到服务器上执行。

第三步,将Ansible 返回的命令结果,解析并转换为一个数据集,格式为,写入数据库。

第四步,对比本次数据和历史数据,根据一定的规则,生成预警信息。

第五步,在web 页面上提示用户巡检已完成。如有预警信息,在web 页面上提示用户。

第六步,用户查看巡检结果或预警信息。

3.5 试点效果

本文第一批试点,选择了某医院不同版本的Linux 和Windows共50 台,其中大部分是虚拟化服务器,也有少量的物理服务器,;设置了每周四自动运行一次磁盘空间巡检任务。待巡检完成后,人工查看任务的执行时长,以及对比巡检数据和虚拟化平台导出的数据、对比巡检数据和物理服务器的数据。

经过8 周的试验,自动巡检50 台服务器的平均时间在20 秒以内;本系统的巡检数据和虚拟化平台的数据、和物理服务器的数据相差在万分之一以下,考虑到两组数据的采样存在时间差,可以认为两组数据完全一致,本系统获取的数据完整、准确。

第二批试点,将某医院的几百台服务器全都添加到本系统。经过半年以上的运行,在很大程度上替代了人工巡检磁盘空间的工作,大幅减少了运维人员花在磁盘空间巡检上的时间;每周预警10-20次,全面性和准确性都高于人工巡检;借助本系统,运维多次化解了磁盘空间不足的风险,将事故消灭在了萌芽阶段。

4 小结

本系统经过半年以上的运行,能够稳定、高效、准确地对数以百计的服务器进行磁盘空间巡检,既涵盖了物理服务器和虚拟服务器,又涵盖了主流的Linux 和Windows 系统,可用于医院环境的自动化运维;本系统提高了运维工作的效率,降低了服务器的故障率,增强了基础架构的稳定性,有力保障了医院业务的顺利开展。

猜你喜欢
开源命令运维
只听主人的命令
五毛钱能买多少头牛
运维技术研发决策中ITSS运维成熟度模型应用初探
移防命令下达后
大家说:开源、人工智能及创新
开源中国开源世界高峰论坛圆桌会议纵论开源与互联网+创新2.0
基于ITIL的运维管理创新实践浅析
这是人民的命令
开源计算机辅助翻译工具研究
对卢沟桥事变期间一份“作战命令”的考析