符嘉成,黄安妮,冯淞耀,潘俊冰,廖邓彬,陈柏龄,莫晓盈
(广西电网有限责任公司 信息中心,广西 南宁 530023)
随着计算机虚拟化技术与网络技术的高速发展,云计算技术[1]也随之蓬勃发展。云计算依托于大量的主机集群,为用户提供可靠的计算服务。在主机运维巡检方面,传统的物理机房可能只有为数不多的几台物理机器,运维巡检难度不大。但随着信息化进程的推进,企事业单位对计算服务的需求越来越多,随之而来的是大规模的云平台集群。相比较传统机房,云平台集群可能有成千上万台机器,对它们进行运维巡检较为复杂烦琐。传统巡检的方式是通过人工的方式登录每一台需要巡检的机器,而后执行相应的脚本代码获取结果,再进一步人工分析结果来判断主机状态是否正常,这种方式效率较低且操作烦琐。本文设计了一种高效的云平台巡检系统,系统实现部署后效果良好。
SpringBoot 是为简化Spring 框架复杂的配置而出现的一种技术栈,其基于Java实现,具有安全可靠、高效的特点[2]。在SpringBoot技术未出现之前,维护一个Spring项目需要各式各样的配置文件,管理难度大,利用SpringBoot 技术可能将众多的配置文件综合为一个[3]。统一的配置文件入口,内部通过配置文件依赖的方式已配置与版本最匹配的参数,执行效率高。本方案实现利用SpringBoot技术。
传统的网络传输协议如ftp、telnet 等都是明文传输口令与数据,不法分子可以通过链路监听的方式窃取传输的数据,此类传输协议不安全。SSH是一种建立在应用层上的专门为了远程登录操作运维的安全协议[4]。该协议可以有效防止数据传输过程中的数据泄露。SSH 协议提供两种验证方式,一种是口令方式,另外一种是公私钥方式。口令方式是通过用户提供口令,SSH服务器端判断提供的用户是否有登录权限以及提供的口令是否正确,如果二者均正确,则提供一个可以远程操作的窗口供用户使用[5]。公私钥方式则是将客户端机器生成的公钥放置在目标主机的known_hosts文件中,之后客户端机器可以直接通过公私钥方式登录目标主机。考虑到安全性,本方案使用口令方式登录系统。
一方面,Shell 是类Unix 操作系统下传统的用户和计算机的交互界面。用户通过shell 输入各种命令可以控制操作系统完成相应的工作。另一方面,Shell是一种脚本语言。按照不同的脚本解释器,Shell可以分为bash、sh、csh与zsh等,它们都支持完成操作系统的各类任务。不同的任务需求可以通过编写不同的shell 脚本来实现,一份shell 脚本是多条shell 命令的集合[6]。本方案通过编写bash脚本采集各个待巡检项目的信息。脚本统一放置在管理平台,通过管理平台将巡检脚本分发到各台受检机器并执行,执行完毕后回传结果到管理平台进行进一步分析。
系统采用B/S 架构,云平台运维巡检人员通过浏览器访问系统管理平台,管理平台通过ssh 协议访问各台受检设备。设计的云平台运维巡检系统主要包括用户管理模块、云平台管理模块、脚本管理模块、结果分析模块、报表展示模块、日志模块、系统工具模块等。系统模块结构图如图1所示。
图1 系统模块图
系统各模块简述如下:
用户管理模块:该模块用于管理系统账号,提供系统账户密码修改、密保问题修改、密保邮箱修改以及验证账户信息等功能。
云平台管理模块:通过该模块管理系统运维巡检过程中涉及的众多设备。主要提供云平台信息添加、云平台信息修改、主机远程连接、主机远程身份认证等功能。在主机远程登录信息正确的情况下,通过该模块可以获取远程主机的访问权限。
脚本管理模块:该模块用于管理系统中各类运维巡检脚本。该模块实现了运维巡检脚本添加、运维巡检脚本分类、运维脚本存储等功能。当系统获取到远程主机访问权限时,可以通过该模块获取巡检脚本的内容并传输到远程主机中执行。
结果分析模块:该模块用于分析远程主机执行巡检脚本后的结果。通过正则表达式、字符串分割与字符串匹配等方式搜集目标设定项目,然后与系统预设的指标值进行比对,分析巡检结果。
报表展示模块:该模块用于展示结果分析模块产生的结果。该模块提供Excel 结果表生成、Excel 结果表导出、在线报表展示等功能。
日志模块:日志模块用于系统的日志管理。提供日志记录、日志按条件查找、日志归档等功能。
系统工具模块:该模块提供众多系统运行过程中频繁使用的工具。例如系统时间获取工具、字符串匹配工具、正则表达式匹配工具与远程云平台连接工具等。
系统部署完成后,系统开始监听指定端口。管理人员通过浏览器访问指定链接与端口进入后台登录页面,管理员输入正确的用户信息后进入系统管理后台。首次使用巡检系统需要配置待巡检机器。管理员添加待巡检机器后,可以选择待巡检机器与巡检项目进行巡检。系统通过SSH 协议登录远程待巡检机器,在SSH 验证通过后,远程巡检机器执行系统传输的命令,执行对应的巡检shell 脚本,系统接收巡检结果后进行进一步分析,从反馈结果中解析出管理员需要的字段值,并根据系统设置的告警阈值判断巡检结果。巡检结果提供Excel 报表与在线报表两种形式。报表中根据巡检结果的不同标注不同的颜色,结果清晰、准确。图2是系统流程图。
图2 系统流程图
在整个工作流程中,巡检子流程最为重要。其主要步骤如下:在用户选择巡检主机之后,系统依次调用被选择的巡检主机,利用SSH 协议,按照管理员提供的口令尝试登录,在登录成功之后,返回一个可远程的可执行命令的通过供巡检平台执行命令。系统判断管理员选择的巡检脚本,读取脚本内容,将脚本内容作为命令在远程主机上执行,如果执行成功,则将执行结果通过输出重定向的方式返回给巡检系统。如果执行失败,则给出提示信息。巡检系统接收到巡检结果之后,根据系统预设的字段、阈值信息通过正则表达式匹配、字符串分割与字符串匹配等方式解析出巡检结果的各个字段并记录。结果解析完成后,系统再依次判断巡检值是否在正常指标内,如果指标在范围内则结果正常,否则提示异常。巡检结果按照用户选择的方式进行展示,可选Excel 报表或在线报表方式。选择Excel报表方式系统将巡检结果生成一个Excel供用户下载,用户下载之后可以离线查看,如果选择在线报表的方式则系统在线展示巡检结果。巡检流程图如图3所示。
图3 巡检流程图
系统数据存储使用MySQL 数据库。MySQL 数据库具有技术成熟、存取效率高,是一款使用非常频繁的关系型数据库[7]。本系统方案设计的数据库根据业务需要主要有以下数据表,包括用户表、巡检主机表、巡检脚本存储表、巡检结果表、巡检字段表、日志表。
用户表:该数据表存储系统中用户信息,包括用户创建时间、用户状态、用户最后登录IP 以及用户最近登录时间等。通过访问该数据表可以获取系统用户的各类信息。
巡检主机表:该表用于存储需要巡检主机的信息,包括主机地址、主机版本信息等。在进行巡检之前,用户需要访问该表查询系统已经添加的主机,然后从其中选择需要巡检的机器进行进一步操作。
巡检脚本存储表:系统中存在众多的巡检脚本,为增强系统的可拓展性,用户可以添加巡检脚本。该数据表存储系统中存在的脚本在文件系统中存储的地址与其对应的描述。
巡检结果表:各个运维巡检脚本执行之后,会产生巡检结果。系统会保存每次的巡检结果,在用户需要查询的时候进行索引。该数据表用于存储巡检的结果,包括巡检主机、巡检内容、巡检时间、巡检指标值等。
巡检字段表:在不同时期,对于巡检结果的判断阈值指标可能发生变化,为适应此类变化,需要动态定制各个巡检字段指标的阈值。该数据表用于存储各个巡检字段的指标阈值。在分析结果时,查询该数据表并进行比对,判断各个指标是否符合设定,进一步生成报表。
日志表:日志表用于存储系统各个操作记录与系统运行状态。当系统出现异常时,便于管理员进行分析溯源,定位问题原因。
为降低数据泄露风险,系统中敏感数据使用哈希算法进行编码后再保存。使用时,将用户提供的数据进行哈希编码后再进行比对。
使用VS Code 工具与Navicat 工具进行开发。系统使用MVC与前后端分离架构,可拓展性好[8]。系统包含服务器端与浏览器端,其中服务器端使用Java编程语言,配合SpringBoot、MySQL、MyBatis 等技术栈进行开发。系统后端通过JavaBeans 与MySQL 构建Model 层;使用SpringMVC 和Thymeleaf 技术实现系统的View 层;利用SpringMVC 构建Controller 层,不同的请求使用不同的Controller处理,处理速度快。
系统前端界面使用BootStrap 与JQuery 技术栈进行开发,具有简洁美观的特点。系统使用不同的颜色标识不同的巡检指标,操作简便,结果展示一目了然。
系统在实现过程中,最大的难点是远程主机连接。利用SSH 协议登录服务器是一种常见的方式。在使用SSH客户端登录SSH服务器时,使用默认即可成功登录。但是利用Java 语言实现SSH 登录时,若SSH服务器使用默认配置则会出现问题,导致无法连接服务器。如图4所示。
图4 SSH连接失败
为解决此问题,需要在SSH服务器端的sshd_config 配置文件中配置KeyAlgorithms 参数项,使其支持key exchange。在解决该问题后,可以利用SSH 口令登录的方式,连接到远程服务器并执行命令。执行结果如图5所示。
图5 SSH连接成功
图5中的例子是通过Java实现登录远程服务器并执行指定命令。其中hello.sh 是测试脚本,其内容为“echo hello”。从图中可以看出,命令成功执行并返回了执行结果。
系统开发完成后,通过Maven 打包成为Jar 包。Maven打包Web项目时系统内嵌Tomcat容器,避免了传统的部署中还需要额外部署Tomcat 容器,更加高效。在需要部署系统时,首先执行开发时候的数据库文件生成系统数据库。之后执行Java命令,指定监听端口即可完成系统部署。管理员通过浏览器访问系统页面即可进入系统。
管理员输入正确的账户信息后可登录系统进行操作。系统核心功能是自动化巡检,系统巡检结果通过在线报表与离线Excel 的方式展示。图6 是一个巡检的测试案例,使用离线Excel 方式展示的结果。该巡检测试案例包括A主机、B主机、C主机与D主机共四台主机,测试巡检项目包括处理器利用率、内存利用率与硬盘利用率。执行自动化巡检流程之后,生成Excel格式的结果表供用户下载查看。
图6 巡检结果表格
如图6 所示,不同的巡检指标值按照不同的阈值判断为正常或者过高。正常使用绿色表示,过高则表示为红色,巡检结果清晰准确,可以让管理员在繁杂的巡检项目中快速发现异常。各个指标的阈值也可以通过系统动态设置,能够满足企业管理的个性化需求。图7 是一次生产环境巡检的部分结果,MySQL、Elasticsearch、CTSDB 等服务使用在线报表的方式展示,直接输出巡检结果,高效快捷。
图7 巡检结果在线报表
在人工巡检时,检查一台主机需要10 分钟左右,检查完之后还需要进行统计汇总,需要额外时间。利用该自动化云平台运维巡检系统,检查10台主机仅需2~3分钟,且巡检完成后自动生成报表,极大地提高了管理员的工作效率。
本文针对云平台巡检运维过程烦琐、效率低下问题设计了一种自动化巡检运维系统。文中介绍了系统模块与系统流程等内容,通过模拟巡检实验,验证了该自动化巡检运维系统的有效性。自动化巡检系统与人工方式相比,效率极大提高。下一步,将继续探讨自动化巡检运维方案,进一步提高云平台管理运维效率。