基于Python 的服务器运维可视化研究与应用
2021-01-29吴文哲
吴文哲
(辽河油田信息工程公司智能技术中心,辽宁 盘锦 124010)
公司中心机房是辽河油田众多信息系统的大脑和中枢,在日常运维巡检时,服务器运维人员和信息系统管理员需要查看服务器各项硬件资源使用情况和应用服务的运行状态,要对各个服务器分别登录、逐个巡检。这项工作有3 个方面的问题:①手动操作烦琐耗时、运维效率低,无法直观地发现问题;②有时疏忽大意会造成漏检,有时操作失误会导致系统无法正常运行;③对于突发情况,尤其是夜间发生的故障,无法第一时间了解并处理。
为了解决以上问题,需要有系统全天不间断自动监控服务器,对资源紧张的情况提出预警、告警,突发故障时能及时通知到系统管理员和运维人员,使应用程序和服务有一定的自我恢复能力。
1 主要研究内容
为了实现对服务器全天候不间断自动监控,资源紧张时发出主动预警,并希望服务器有一定的自我恢复能力,需要研究以下三方面内容。
1.1 实时获取服务器硬件资源和软件运行状态
针对不同操作系统,使用跨平台能力强的探针程序,利用操作系统提供的自动执行功能,不间断采集跟服务器运行相关的CPU、内存、硬盘、网络、端口、进程等关键敏感信息,实时上传至数据采集数据库。
1.2 通过图形化的界面,实时分析和判断运行状态是否正常
根据初始信息配置数据源后,数据库中的数据表记录就可以被数据可视化系统调用了。该阶段首先进行数据的投影和清洗,用户查询自己关注的数据项,如果查询成功,系统返回查询结果,否则返回错误异常。通过选择模型元素来建立数据模型,包括如折线图、饼图、柱形图等模型样式,颜色、视图名称,同时上层的展现功能调用被视图库添加好的模型。
使用可视化展示模式对采集入库的数据进行展示的同时,根据提前设置好的报警参数,判断当前服务器各项关键信息是否超过阈值,如果超出阈值,则使用邮件方式通知运维人员。
1.3 发现异常情况的自动处理
对于报异常的用户进程,重启该异常进程;对于占用资源非常严重的非系统进程,自动关闭该进程。服务器上的主要应用程序,在服务器负载相对较低时,使用脚本程序使其重启。
2 技术方案
本课题的设计思路是通过Python 编程,使用目标服务器操作系统的自动执行功能运行探针程序,通过“推”模式实时将目标服务器的CPU、内存、网卡和硬盘等硬件资源的使用情况、本地端口、进程和应用服务的运行状态推送至服务端程序,服务端程序部署在一台安装有双网卡的服务器上,实现服务端程序跨网段运行;运维人员使用浏览器通过图形化界面监控目标服务器各项指标的运行情况,页面定时自动刷新数据;探针程序判断目标服务器资源占用异常时,将异常信息记录到日志文件,服务端程序发现目标机在指定时间间隔没有通信,也将记录异常信息,以上异常信息将以预警或告警邮件的形式发送给系统管理员;本地用户的进程可以自动重启。监控系统的参数,比如硬件资源的预警和告警阈值、进程或应用服务的路径、可视化界面的刷新时间、邮箱地址、字体大小等都可以通过配置文件修改。整个过程实时监测,程序全天不间断运行。
本课题研究的开发语言是Python,使用了psutil、glances、pymysql、sqlalchemy、pandas、flask、pyecharts、flask_bootstrap 等多个第三方模块,数据库使用开源的MySQL,网站搭建采用浏览器/服务器模式,使用HTML5、Bootstrap css 和jQuery 等前端技术实现网页展示,利用flask框架实现后台处理,使用pyecharts 将采集到的服务器系统信息可视化,使用uwsgi 和nginx 分别作为Web 服务器和反向代理服务器。
Python 崇尚优美、清晰、简单,是一个优秀并广泛使用的语言,广泛应用于人工智能、运维自动化、操作系统管理、Web 应用开发、网络爬虫、科学计算、计算机视觉、深度学习、区块链开发、桌面软件、服务器软件等。
psutil 是一个Python 模块用来获取正在运行的进程信息和系统的CPU 和内存的利用率,它不仅可以通过一两行代码实现系统监控,还可以跨平台使用,支持Linux/Windows/Sun Solaris/OSX/FreeBSD/OpenBSD/NetBSD/AIX 等,是系统管理员和运维小伙伴不可或缺的必备模块。
flask 是Python 开发的一个轻量级的Web 框架。Pyecharts是一个用于生成ECharts 图表的类库。因为用ECharts 生成的图可视化效果非常棒,为了方便与Python 对接、在Python中直接使用数据生成图表,所以产生了pyecharts。
3 主要技术创新
本课题主要科技创新体现在以下几方面。
3.1 程序移植能力强
系统使用glances 模块获取目标服务器的CPU、内存、网卡、硬盘和端口的状态信息;使用psutil 模块获取进程和应用服务信息;使用email 模块创建一个包含主题和具体内容的报警邮件,再使用smtp 模块设置邮箱的发送地址和接收地址;可视化展示功能主要使用flask、pandas 和pyecharts模块,使用flask 构建Web 框架,使用pandas 统计分析采集来的数据,使用pyecharts 实现前端可视化效果。
综上所述,无论是目标机上运行的客户端探针程序,还是服务端负责展示的可视化后端程序,基于跨平台能力强的Python 语言开发,使得监控服务器硬件资源、预警告警和可视化展示可以不受操作系统的影响,可移植能力大大增强。业界知名的老牌开源监控系统Zabbix,其server 端无法安装在Windows 系统上,移植能力有限。
3.2 多种样式风格的可视化展示
对于CPU 和内存、交换内存,使用饼图可以分别展示(按照刷新频率)最近10 次的CPU 和内存占用率,使用带标记的折线图展示最近n次(时间范围可调)的占用率走势,如图1 所示。
对于硬盘空间,使用柱形图显示硬盘总容量大小,使用堆叠柱形图的不同颜色区分已使用和未使用的硬盘容量,如图2 所示。
对于网卡,按照采集间隔,使用折线图展示瞬时流入流量和流出流量,直观展示网络流量随时间的变化趋势,如图3 所示。
开源监控系统Zabbix 可视化图形展示功能较为单一,缺乏仪表盘、柱状图、饼图等图形支撑;nagios 没有数据展示功能,只关心报警功能;MRTG 侧重网络监控,主要功能是收集历史数据和展示,图形化能力差;Tsar 只能使用命令行形式,没有图形化界面。
图1 负载占用情况
图2 硬盘使用情况
图3 网卡流量情况
3.3 具备简单的自我修复能力
CPU、内存和磁盘的使用率设有一个预警值和一个告警值,具体每个硬件的预警值和告警值可以在配置文件中指定。根据提前设置好的报警参数,判断当前服务器各项关键信息是否超过阈值,如果超出阈值,则使用邮件等方式通知运维人员。
在探针程序的配置文件中写入目标服务器需要被监控进程的绝对路径,如果该进程异常,则会通过os 模块自动重启。对于报异常的用户进程,重启该异常进程;对于占用资源非常严重的非系统进程,自动关闭该进程。服务器上的主要应用程序,在服务器负载相对较低时,使用脚本程序使其重启。
4 应用情况
本课题基于浏览器/服务器模式,使用基于Python 的flask 框架技术,使用HTML5、JavaScript 和CSS 等前端技术,通过异步请求实现无刷新定时更新页面数据。通过传输层TCP 协议与应用层HTTPS 协议传输数据,保证数据完整性和安全性。使用MySQL 数据库管理数据,浏览器通过发送HTTPS 请求、接收JSON 格式的返回数据。主要实现数据采集、数据存储及管理、可视化展示3 个功能模块。
数据采集:包括实时数据和非实时数据两种。非实时数据包括服务器基本配置信息、操作系统版本、系统启动时间等。实时数据包括服务器主要负载指标、硬盘使用情况、网卡实时流量、系统运行时长、端口使用和进程分配的情况。
数据存储及管理:通过数据库管理系统将采集到的结构化数据整合为业务数据。
可视化展示:包括服务器硬件资源使用情况、系统端口使用列表和进程分配列表等数据的多种模型可视化展示。
本课题已经在车辆监控平台相关的15 台服务器上研究部署并成功应用,如图4 所示,实现了对服务器、网络、数据库、中间件和应用系统等要素的监控和统一管理,具有分布式、全覆盖、自动化和安全可靠等特点。本课题支持从业务视角排查并定位故障,让系统运维人员能够及时定位并解决系统运行问题,提升运维质量和效率,降低运维难度和风险,具有良好的推广前景。在今后的工作中,还需要进一步完善系统日志深化分析和报警体系(如微信、短信推送等)建设,使之成为更加全面、高效、智能的自动化监控运维平台。
图4 首页