当前位置: 首页 > 科技观察

使用Ansible自动执行系统管理员的五项日常任务

时间:2023-03-15 10:20:27 科技观察

通过使用Ansible自动执行可重复的日常任务来提高生产力并避免错误。如果您讨厌执行重复性任务,那么我为您提供了一个机会,那就去学习Ansible!Ansible是一种工具,可帮助您更轻松、更快速地完成日常任务,从而使您可以更有效地利用时间,例如学习重要的新技术。对于系统管理员来说,它是一个很好的工具,因为它可以帮助您标准化日常活动并进行协作,包括:安装、配置和供应服务器和应用程序;定期更新和升级系统;监控,缓解和解决问题。通常,许多这些基本的日常任务需要手动步骤,根据个人的技能,这些步骤可能会造成不一致并导致配置漂移。这在您管理服务器并知道您在做什么的小型实现中可能是可以接受的。但是当您管理数百或数千台服务器时会发生什么?如果您不小心,这些手动的、可重复的任务可能会因人为错误而导致延误和问题,从而影响您和您所在组织的声誉。这就是自动化的价值所在。Ansible是自动化这些可重复的日常任务的完美工具。自动化的一些原因是:您想要一个一致且稳定的环境。你想促进标准化。您希望减少停机时间,减少严重事故,从而享受生活。你想喝啤酒,而不是解决问题!本文提供了系统管理员可以使用Ansible自动执行日常任务的一些示例。我已将本文中的剧本和角色放在GitHub上的sysadmin任务存储库中,以便您可以轻松使用它们。剧本的结构如下(我的评论前面有==>)。[root@homebase6_sysadmin_tasks]#tree-L2.├──ansible.cfg==>负责控制Ansible行为的配置文件├──ansible.log├──inventory│├──group_vars│├──hosts==>包含我的目标服务器列表的清单文件│└──host_vars├──LICENSE├──playbooks==>包含我们将在本文中使用的playbook的目录│├──c_logs.yml│├──c_stats。yml│├──c_uptime.yml│├──inventory│├──r_cron.yml│├──r_install.yml│└──r_script.yml├──README.md├──角色==>包含我们将本文中使用的角色目录│├──check_logs│├──check_stats│├──check_uptime│├──install_cron│├──install_tool│└──run_scr└──templates==>包含jinja模板的目录├───cron_output.txt.j2├──sar.txt.j2└──scr_output.txt.j2列表如下所示:[root@homebase6_sysadmin_tasks]#catinventory/hosts[rhel8]masteransible_ssh_host=192.168.1.12workernode1ansible_ssh_host=192.168.1.15[rhel8:vars]ansible_user=ansible==>请使用您的ansible用户名对其进行更新以下是您可以使用Ansible自动执行的五个日常系统管理任务。1.检查您的服务器正常运行时间您需要确保您的服务器始终处于正常运行状态。组织将拥有企业监控工具来监控服务器和应用程序的正常运行时间,但自动监控工具经常会失败,您需要登录才能验证服务器的状态。手动验证每台服务器的正常运行时间需要花费大量时间。您拥有的服务器越多,花费的时间就越长。但是通过自动化,这种验证可以在几分钟内完成。使用check_uptime角色和c_uptime.yml剧本:[root@homebase6_sysadmin_tasks]#ansible-playbook-iinventory/hostsplaybooks/c_uptime.yml-kSSHpassword:PLAY[CheckUptimeforServers]*********************************************************************************************************************************************************TASK[check_uptime:捕获时间戳]************************************************************************************************************.Truncate....PLAYRECAP**********************************************************************************************************************************************************************master:ok=6changed=4unreachable=0failed=0skipped=0rescued=0ignored=0workernode1:ok=6changed=4unreachable=0failed=0skipped=0rescued=0ignored=0[root@homebase6_sysadmin_tasks]#script输出是这样的:[root@homebase6_sysadmin_tasks]#cat/var/tmp/uptime-master-20210221004417.txt--------------------------------------------------主人的正常运行时间--------------------------------------------------00:44:17向上44分钟,2个用户,平均负载:0.01、0.09、0.09----------------------------------------------------[root@homebase6_sysadmin_tasks]#cat/var/tmp/uptime-workernode1-20210221184525.txt-------------------------------------------------------workernode1的正常运行时间---------------------------------------------------18:45:2644分钟,2个用户,平均负载:0.01、0.01、0.00---------------------------------------------------使用Ansible,您可以创建可读的格式来获取多个服务器的状态,Jinja模板允许您根据需要定制输出通过更多的自动化,您可以按计划运行并通过电子邮件发送输出以用于报告目的。2.配置额外的cron作业您需要根据基础架构和应用程序要求定期更新服务器的计划作业。这似乎是一项微不足道的工作,但必须正确且始终如一地完成。想象一下,如果您在数百台生产服务器上手动执行此操作将花费多少时间。如果做错了,它可能会影响生产应用程序,导致应用程序停机或在计划作业重叠时影响服务器性能。使用install_cron角度和r_cron.yml脚本:[root@homebase6_sysadmin_tasks]#ansible-playbook-iinventory/hostsplaybooks/r_cron.yml-kSSHpassword:PLAY[Installadditionalcronjobsforroot]***********************************************************************************************************************************.截断....PLAYRECAP************************************************************************************************************************************************************************master:ok=10changed=7unreachable=0failed=0skipped=0rescued=0ignored=0workernode1:ok=10changed=7unreachable=0failed=0skipped=0rescued=0ignored=0实验证明剧情本的结果:[root@homebase6_sysadmin_tasks]#ansible-iinventory/hostsall-mshell-a“crontab-l”-kSSH密码:master|改变|rc=0>>12345/usr/bin/ls/tmp#Ansible:IotopMonitoring05,2***/usr/sbin/iotop-b-n1>>/var/tmp/iotop.log2>>/var/tmp/iotop.errworkernode1|改变|rc=0>>12345/usr/bin/ls/tmp#Ansible:IotopMonitoring05,2***/usr/sbin/iotop-b-n1>>/var/tmp/iotop.log2>>/var/tmp/iotop.err使用Ansible,您可以快速一致地更新所有服务器上的crontabEntry您还可以使用简单的点对点Ansible命令来报告更新后的crontab的状态验证最近应用的更改。3.收集服务器统计数据和SARS在正常的故障排除过程中,为了诊断服务器性能或应用程序问题,需要收集系统活动报告(SARS)和服务器统计数据。在大多数情况下,服务器日志包含非常重要的信息,开发人员或运营团队需要这些信息来帮助解决影响整个环境的特定问题。安全团队在进行调查时非常讲究,并且大多数时候,他们希望查看来自多个服务器的日志。您需要找到一种简单的方法来收集这些文件。如果您可以将收藏委托给他们,那就更好了。使用check_stats角色和c_stats.yml剧本执行此操作:$ansible-playbook-iinventory/hostsplaybooks/c_stats.ymlPLAY[CheckStats/sarforServers]************************************************************************************************************************************************TASK[check_stats:获取当前日期时间]******************************************************************************************************************************************更改:[master]更改:[workernode1].Truncate....PLAYRECAP*******************************************************************************************************************************************************************master:ok=5changed=4unreachable=0failed=0skipped=0rescued=0ignored=0workernode1:ok=5changed=4unreachable=0failed=0skipped=0rescued=0ignored=0输出如下所示:$cat/tmp/sar-workernode1-20210221214056。TXT------------------------------------workernode1的sar输出--------------------------------------------------Linux4.18.0-193.el8.x86_64(node1)21/02/21_x86_64_(2CPUs)21:39:30LINUX重启(2个CPU)--------------------------------------------------4。收集服务器日志除了收集服务器统计信息和SARS信息外,您还需要不时收集日志,尤其是当您需要帮助调查问题时通过check_logs角色和r_cron.yml剧本:$ansible-playbook-iinventory/hostsplaybooks/c_logs.yml-kSSHpassword:PLAY[CheckLogsforServers]*******************************************************************************************************************************************************.Truncate....TASK[check_logs:CaptureTimestamp]**********************************************************************************************************************************************更改:[master]更改:[workernode1]PLAYRECAP******************************************************************************************************************************************************************掌握:ok=6changed=4unreachable=0failed=0skipped=0rescued=0ignored=0workernode1:ok=6changed=4unreachable=0failed=0skipped=0rescued=0ignored=0要确认输出,打开在转储位置生成的文件。日志应该是这样的:$cat/tmp/logs-workernode1-20210221214758.txt|更多的-----------------------------收集的日志:/var/log/messagesforworkernode1--------------------------------------------------2月21日18:00:27node1内核:命令行:BOOT_IMAGE=(hd0,gpt2)/vmlinuz-4.18.0-193.el8.x86_64root=/dev/mapper/rhel-rootrocrashkernel=autoresume=/dev/mapper/rhel-swaprd.lvm.lv=rhel/rootrd.lvm.lv=rhel/swaprhgbquietFeb2118:00:27node1内核:禁用快速字符串操作Feb2118:00:27node1内核:x86/fpu:支持XSAVE功能0x001:'x87浮点寄存器'Feb2118:00:27node1内核:x86/fpu:支持XSAVE功能0x002:'SSE寄存器'Feb2118:00:27node1内核:x86/fpu:支持XSAVE功能0x004:'AVX寄存器'Feb2118:00:27node1内核:x86/fpu:xstate_offset[2]:576,xstate_sizes[2]:256Feb2118:00:27node1kernel:x86/fpu:Enabledxstatefeatures0x7,contextsizeis832bytes,using'c压缩'format.5。安装或删除软件包和软件您需要能够在系统上连续快速地安装和更新软件和软件包缩短安装或更新软件包和软件所需的时间,避免服务器和应用程序不必要的宕机。使用install_tool角色和r_install.yml剧本执行此操作:$ansible-playbook-iinventory/hostsplaybooks/r_install.yml-kSSHpassword:PLAY[Installadditionaltools/packages]*******************************************************************************************TASK[install_tool:在角色变量中安装指定的工具]********************************************************************ok:[master]=>(item=iotop)ok:[workernode1]=>(item=iotop)ok:[workernode1]=>(item=traceroute)ok:[master]=>(item=traceroute)播放回顾****************************************************************************************************************************master:ok=1changed=0unreachable=0failed=0skipped=0rescued=0ignored=0workernode1:ok=1changed=0unreachable=0failed=0skipped=0rescued=0ignored=0这个例子安装了两个在vars文件中定义的特定包和版本。使用Ansible自动化,您可以比手动安装更快地安装多个包或软件。您还可以使用vars文件来定义要安装的包的版本。$catroles/install_tool/vars/main.yml---#install_toolins_action的vars文件:absentpackage_list:-iotop-0.6-16.el8.noarch-tracerouteembraceautomation要成为一个有效的系统管理员,你需要接受自动化以鼓励标准化和团队内的协作。Ansible使您能够在更短的时间内做更多的事情,因此您可以将时间花在更令人兴奋的项目上,而不是做重复性的任务,例如管理您的事件和问题管理流程。有了更多的空闲时间,您可以学到更多知识并为下一个职业机会做好准备。