怎样做一个优秀的(懒惰的)系统管理员

Tags:


怎样做一个优秀的(懒惰的)系统管理员
作者:Mike Diehl
翻译:jianxin

如果你是一个普通的系统管理员,你感到人员不足,资金不足,工作过度。到现在,你已经习惯了这种观点:没有人会意识到你的存在直到邮件服务器瘫痪了,然后你突然成为了美国人最需要的人。在这篇文章中,我假设你负责管理有很多服务器。我也假设你不是真的会尽可能的努力工作;如果你是这样,你应该成为一个Windows服务器管理员,开始担心来自微软的补丁,安全弱点,病毒防护,一个笨拙的用户界面,天生的缺少脚本。我并不是说Linux是完美的,但就是有很多事情使得Linux更加容易来管理。
作为一个优秀的系统管理员,你想要把工作做好,但是一个懒惰的系统管理员,你不想工作很费力的完成。在这篇文章中,我将会分享你可以做的一些简单的事情使得你的工作更加容易。
这些年来,我发展了一种曼特罗,“如果我不得不作一件事情超过一次,我就写脚本来完成它。”比如说,如果我需要每天早上检查我的服务器的健康状况,我会写一个脚本来收集信息,格式化它,把结果以邮件形式发给自己。如果我需要在12台机器上作配置改变,我会些一个脚本来完成这件事。刚开始,你可能会认为手工来完成这些工作会和编写和调试一个脚本来完成工作一样的简单。但是那里隐藏着一些优势在我的工作方法中。一旦脚本很好的工作,人物就会成为可重复的并且可以委托给一个下层的技术员,或者自动完成。基本上,你不需要作所有的事情;它会自己完成所有的事情。我们不久将会更多的谈论脚本。
为了促进脚本任务和管理多服务器,首先我要做的是在每一个服务器上配置基于认证的鉴定。在每一个服务器上这只需要几分钟的时间并且它真的可以让你的生活更加的轻松。因为你不用再输入密码,文件传输,支持和维护任务可以通过脚本完成。因为在因特网上有很多的简单的命令是关于怎样配置基于认证的鉴定的,在这里我将不会浪费时间来讲这些事情。
一旦我们使得鉴定正常工作了,让我们开始让我们的俄生活变得更加轻松吧。我喜欢做的是建立一个shell脚本导出有用的变量,比如
# servers.sh
export MAILSERVERS="server1 server2 server3"
export WEBSERVERS="www1 www2 www3 www4"
然后我可以下一个像这样的简单的脚本:
#!/bin/bash
### Assess disk space on mail servers
source ./servers.sh
for i in ${MAILSERVERS} ; do
echo =========${i} =============
ssh root@${i} "df"
echo ============ =============
done
这个简单的脚本允许我很快的得到我的所有的邮件服务器的磁盘使用情况。它也可以作为一个其他相似任务的模板。当我想通过脚本完成另一个任务,我会拷贝一份这个脚本,在顶部替换一些内容来描述新的脚本的用途,替换for循环的主体。
要注意的是所有我的脚本都会来源于servers.sh文件,所以我有一个配置的中心点。当我增加或者删除一个服务器时,我就会简单的改变这个文件。
并且,注意在文件顶部的内容。一旦你在一个单一的目录中有大约50个不同的脚本,你可以象这样开始给它们命名 assess_the_disk_space_on_mail_servers.sh,而我拒绝这样做。所以,当我需要指出那个脚本做什么,我会打:
grep “###” *
这给我一个脚本的列表和一个它们任务的简单的描述。
我的关于脚本的曼特罗的必然的结果是如果我不得不每一天,每星期或者每个月来完成一个同样的任务,我会把这个工作放进cron并且把结果发到email里。很多系统有一些目录包含在cron中的一些脚本,它们每小时,每天或者每星期的定期的运行。我认为那是一个很好的做事的方法,但是有时你必须能够决定什么时候你需要你的脚本运行。要做这些,你需要自己修改 crontab。比如,我不想我的支持仅仅运行在当/etc/cron.daily决定运行它们的时候;我想让它们在规定的上班时间之外开始并完成。因为我有很多比crontab的格式更加重要的事情要记住,并且我很懒惰以至于我不想每一次都去检查,我经常把下面这行添加进我的 crontabs:
# min hour dom month dow command
之后,每次我修改crontab的时候,我可以很快的添加我想要的这个字段然后继续我的工作。我知道这不是日常琐事,但是它就是那些简单的事情你可以做用来节省时间和精力。
以系统日志方式登录,是伴随Linux而来的一个特性,但是因为它趋向于产生很大量的数据,所以它经常是不可能的。通常,人们会简单的配置 logrotate来减少日志保证它们不会填满文件系统。只有当出现问题的时候那些人才会回过头来看看他们的系统日志告诉他们什么。对于系统日志,我也会添加网络日志,防火墙日志,邮件日志和任何其他的由服务器邮件收发后台程序产生的日志。我不会鼓励一行一行的阅读这些日志。相反的,你应该增加一些分析这些日志的程序,尽管它只是一些greps放在一起。你需要经常的增加改变到你的规则设置以使得它尽可能多的过滤掉垃圾信息。无论你怎么做,结果都应该经常的以邮件形式发给你并且你需要经常的查看一下它们。
当然,在很多服务器上配置日志分析看起来是很大量的工作。你可能会想到配置所有的服务器发送它们的日志到你的工作站。然后你只需要配置一个分析程序,而不是试图在每个服务器上复制相同的配置。你甚至可以使用上面技术的轮廓来把日志文件从服务器上拿过来使得它们可以在本地机器上被分析。
这些年来,我已经从阅读我的日志文件中得到了很多的好处。有一次, smartd通知我我的一个IDE 硬盘驱动器将要坏掉了,在它真的坏掉之前。我可以计划着停用它并且替换一个新的驱动器在它坏掉损失数据之前。很多此,我在我的网络服务器上注意到了鉴定失败,我打电话给用户解决了问题。我一次发现了一个贪婪的数据库索引当我查看我的Apache 日志文件的时候,我注意到这个服务器正在超过限度的时间来服务于一个应用。在我打电话给这个客户告诉它我发现了这个问题之后,我开始解决这个问题………在任何人报告这个问题之前。在问题被其他人报告的时候,我已经找到了问题所在并且有了ETR使得当客户打电话来时,我甚至不用被打扰去开一个服务票。我只是告诉它们那会在半个小时内解决。
我也是一个服务器和服务监视迷。我过去经常花费没一天的前一部分来检查我的所有的服务器是否健康。现在我只用简单的照看监视控制台并且寻找非正常的情况,我经常比我的客户更早注意到问。让我们面对它,只要你的经理注意到邮件服务器坏了,他将会找到你;他可能会在你的服务器房间里找到你,发现你正在修复邮件服务器的错误。
服务监视真的不是那么困难来建立并且这是很好的一种方法让你比你可客户提前知道问题所在。但是你不能只是建立它然后假设它已经工作了。我曾经在一个职位,公司告诉所有的部门我们都必须使用新的公司监视能力。当然这对我来说是好消息,我不再需要为我的服务器提供功能。作为一个优秀、懒惰的系统管理员,我很会转到了公司监视……并且有了一个消防演习。我走到 我的一个服务器旁,关掉它,开启计时器。我的寻呼机在30分钟后爆掉了,这在我工作的环境中是不可接受的。在一个与经理简短的谈话之后,监视部门在他们的过程中做了一些改变并且每个都很高兴。你应该总是此时任何一个你执行的监视系统。
拥有一个稳固的监视系统的另一个好处是你可以收集可用性和表现度量。这些报告可以被当作管理来确认专制的购买或者在可用性上反驳客户的抱怨。在一个管理会议中没有东西比有用的数据更有用。
你也应该试着估计一些那些可能导致提前停用的事件并试着配置你的监视系统来发现这些事件。根据我的经验,你应该监视发生很快的、更加频繁的事件。比如说,自从我的服务器可以不阻塞但速度不是很快,我相当频繁的检测它们。另一方面,那是不可能的他们的硬盘驱动器将会在接下来的15分钟内填满,所以我不是很频繁的监视驱动器的使用。我通常设置一个定制很低的闹钟。比如说,如果我有一个磁盘通常使用率为30%,我可能设置一个闹钟定制在45%。当磁盘的使用率超过这个值时,我知道有什么事情出问题了,但我们并不在失败的边缘。我甚至可能会暂时的忽略它们让我来计划怎样处理它。
所有我在这里所描述的对不会很难并且没有东西将需要任何真实的工程工作。你将不得不用一些脑筋在你的监视系统,但是即使你所作的一切只是配置你的服务器,并且测试使用情况,网络,邮件等等,都是有回复的,你将会收获重要的好处在很短的时间内。并且这些东西中没有什么是必须立刻去做的。在每次你登录服务器的时候,只要用很短的时间并且到处做一些很简单的。最后,你每天将会在几分钟之内完成你的工作然后去呼吸新鲜空气。