宇信教育 宫兆丰
自动化运维,顾名思义就是将繁琐的人工运维转化为使用脚本或平台实现批量化、自动化的工作。自动化运维可以减轻工程师的负担,同时也可以降低人工运维误操作的概率。
自动化运维在日常的运维工作中随处可见,例如在学校的机房里,可以通过自动化运维的方式给试验机安装教学用软件,批量安装操作系统等。在服务器运维时可以通过自动化运维的方式部署一些中间件和所需的服务,在网络运维中可以通过自动化运维实现设备批量管理等。自动化运维基本可以分为自动化运维平台和脚本两种方式,其中自动化运维平台常用的有Ansible、Zabbix等。运维脚本在Windows系统中可以使用批处理(Batch)脚本的方式实现,Linux中可以使用Shell脚本的方式实现,如果有跨平台需求的话还可以使用Python脚本来实现一些功能。
自动化运维平台Zabbix的使用可以说很常见,该平台可以通过SNMP协议等方式提供对远程服务器或网络状态的监视、数据收集等功能。同时Zabbix也支持脚本的调用,例如在服务器中出现一条只能单独的查看,需要看哪个参数就要去选择相应的页面,使用起来较繁琐,如下图所示。
相应的解决方法就是可以接入一个Grafana来优化这方面,Grafana是一个跨平台的开源的可视化分析工具,Grafana的图表可以支持自定义的功能,可以实现很多的监控计算。
接入Grafana之后的监控页面可以定制化为下图。
Ansible是一个由Python语言编写的,轻量级模块化的运维工具,这就意味着如果工程师对Python比较了解,就可以根据自己的需求来编写模块。模块是Ansible最小的运行单位,Ansible在部署时,无需在远程服务器上安装代理。通常的架构是一台主控机和若干台受控机,在工作时,由主控机下发指令至受控机执行。
如果需要执行的命令较多,可以通过编写Shell脚本的方式来执行。同时Ansible众多的模块提供了丰富的功能,例如通过OpenSSH来连接服务器,Ping模块可以用来测试连通性,Command模块可以用于远程执行命令,Cron模块用来创建计划任务。Ansible在调用模块时有两种方式可以选择,一种是通过adhoc,另外一种是Playbook。比较强大的是通过Playbook的方式调用模块,在Playbook中可以按照运维工作的需求进行DIY的编排,在编写Playbook脚本时同时调用多个模块,将各个模块进行搭配使用提高工作效率。
除了通过平台实现自动化运维,之前也提到可以使用脚本的方式来实现自动化运维,通过脚本来实现自动化运维对工程师的基本功有较高的要求,因为编写脚本要求工程师掌握相应的脚本语言,并对操作系统有一定的了解。例如如何通过脚本批量连接服务器,如何调用设备内系统的相关功能等。有了这些知识作为基础就可以编写相应的脚本来实现部分功能。常用的脚本语言有Batch、Shell、Python等。其中Batch脚本是在Windows系统中最常用的。Shell脚本是在Linux系统中较常用的。Python可以跨平台,Windows系统和Linux系统都可以使用,同时也可以在华为的网络设备中使用。Python语言也是目前各类语言中比较好掌握的一个。最快学习一周便可写出自己的一个小程序。同时Python内部也集成了很多的模块,在编写脚本的过程中如果需要一些功能,可以通过调用相应的模块来增强脚本的功能。最简单的,例如需要在Windows中调用CMD来执行一些命令就可以调用OS模块来实现,之后再将命令传递给os.system()或os.popen()就可以了,如果需要执行一些其他的功能但是Python内部并没有相应的模块的话,还可以通过安装第三方模块来实现。
拿一个自动关机脚本来举个小例子吧。如图所示,这是一个Windows系统定时关机的Python脚本,用户在使用时可以根据自己实际的需要来输入预计在几个小时后关闭设备。同时也提供了在一些情况下需要取消自动关机的解决办法。
其中这部分是将OS模块引入到脚本中,这里会调用OS模块中的一些方法。
这里使用了一组print函数是为了给用户一个提示,毕竟使用这个小工具的人不一定是编写这个脚本的人,所以要简单说明脚本如何使用。
这里用一个变量time来承接用户输入的内容。为了增加一些友好度,写了一些提示。
拿到用户输入的内容之后,便开始进行判断,首先判断用户是否要进行计划关机操作。如果是关机操作的话,会将用户的输入内容返回到屏幕上用来给用户做二次确认。同时也给用户一个纠错的选项。如果二次确认没问题,那么就开始进行一个计算,因为在Windows系统中shutdown命令后面的时间是按秒计算的,所以这里直接做一个乘法。最后将关机命令前缀"shutdown -s -t"与所得到的时间进行一个拼接,将拼接之后的字符串传递给os.popen来调用Windows系统命令执行该操作。以上说的是进行关机的操作,如果用户在二次确认时发现时间输入有误,则不会执行字符串拼接和时间计算的过程,直接退出程序。
最后这一部分是当用户想要取消计划关机时所执行的命令,当用户输入"off"时,程序会取消之前的计划关机任务。
这个例子是一个很简单的小脚本,其实里面还有很多的功能可以进行优化,例如用户二次确认之后如果输入有错误可以进行重新输入等其他功能,甚至可以做成对话框交互的形式。
聊了这么多自动化运维的实现方法,使用自动化运维的主要目的还是降低人工的负担和误操作率。以前一百台设备的运维可能需要5个人来完成,但是1000台设备10个人也不一定能完全覆盖到,还有在做一些系统录入的时候,如果单靠人工的逐条录入,不仅工作效率低,时间成本也会增加。所以,自动化运维技术在日常的工作中仍是一个需要去不断去学习的。与其在众多设备中忙到脱发,不如写一个脚本,喝杯茶等待工作自动完成。
宫兆丰
华为授权合作伙伴宇信教育讲师,具有丰富的教学和项目经验,对自动化运维、Python、鲲鹏、智能计算技术有较深的理解。