Scout是一个服务器和应用扩展监控服务,它主要关注于安装和配置的易用性。Scout默认提供了报警功能,帮助管理员更快地在不同负载的情况下理解应用程序的行为,同样,Scout也允许程序员创建插件来扩展Scout。
Scout的威力并不仅仅体现在其本身的功能,还体现在能够通过编写Ruby插件来扩展功能。例如能够监视Ruby on Rails,Phusion Passenger,Nginx,Mysql等的插件。
InfoQ很荣幸对Scoutapp.com的创始人之一Andre Lewis进行了采访,一起讨论了Scout的相关内容,以及它是如何以一种不同的方式帮助开发者和系统管理员同时对服务器和应用进行监控。
Robert Bazinet(RB):首先,能简单介绍一下Scout吗?
Andre Lewis(AL):Scout是一个托管服务监控程序。我们曾经这样问自己:开源监控解决方案最优秀的部分是什么?是灵活性。那么最坏的部分呢?是安装和持续维护。所以,我们将托管服务和一个灵活的插件系统绑定在一起。
结果表明:Scout是监控你生产环境的最简单的解决方案。你可以跟踪你架构中的每一部分,获得关于趋势或者阈值的Email、短信警报,并且可以对数据图表进行研究。
RB:你是如何让客户对你的服务所提供的数据安全和隐私保护感到放心的呢?
AL:我们的安全规范符合工业标准。所有的数据都是通过SSL(你的银行也是使用这个技术)传输。在我们的服务器上严格管理这些数据。最后我想强调一点,现在可以作为服务的软件非常多,比如作为邮箱服务的Gmail,作为商业信息服务的Salesforce,作为源代码服务的Github,还是作为个人理财的Minty。所以,可以看出托管方式的接受程度是很高的。
RB:Scout和其他市场上的工具例如New Relic RPM有何相似之处呢?
AL:如果服务器崩溃,或者磁盘空间不足,或者工作队列回滚,如果使用New Relic的话,你可能找不到问题的所在。要知道,其中任何一个事故都能够造成web应用中断,这时候Scout就会发挥作用了。Scout和New Relic组成了一对功能强大的组合 - 我们有大量的客户,他们使用New Relic来分析Rails性能细节,然后使用Scout来监视任何可能造成web应用崩溃的程序。在你有大量服务器的时候,Scout的价格也非常合理。根据你的安装数量,New Relic RPM的价格可能会是Scout的4倍到10倍。
RB:Scout和传统工具例如Nagios相比又如何呢?
AL:我用一个家庭场景来举例:某天,我想重新装修一下我的浴室。我将会学习很多知识,但是我也要面对一些烦人的问题。仅仅听见我妻子喊叫“没有热水”就足够让我头疼了。在折腾了一天之后,请一名专家来做这个工作会简单很多。Scout就是这样的专家。收尾的工作一般很少,而且它不会使你从核心工作中(也许并不是设置监控程序)分心。如果你有时间的话,Nagios和Ganglia之类的软件将会非常有用。由于开发者和系统管理员的分工,时间通常都不充裕。
另外一个选择Scout的原因是:我们一直在更新和改进它。虽然它是托管服务,但是你可以在不需要重新安装或配置的情况下进行升级。
RB:Monit是如何处理这种情况的呢?
AL:Monit是一个非常棒的自动干预工具(例如如果内存使用超过200MB则重启进程)。我们也使用Monit,它的确非常容易设置。我曾经写过一篇关于Monit的博文,叫做“Monit入门”。
RB:Scout哪些部分是需要技术进行配置的?哪些部分是内部就已经构建好的呢?
AL:从用户角度来说,只有一件事情是你需要的:Scout Agent,这是一个作为Ruby gem分发的Ruby小程序。一个cron作业每几分钟运行一次Scout agent,然后收集系统的性能指标。
这些指标会通过S-HTTP回馈给scoutapp.com。有时候我们需要回答这样一个问题“agent是否打开了一个端口或者接受任何连入链接?”答案是否定的 -- 它只是向外发送数据,而且仅仅通过常规的HTTP 80端口。
在服务器端,Scout是基于一系列的开源项目:Ruby,MySQL,RRDTool,Apache和Linux。我们使用Ruby on Rails以及Sinatra应用架构:Sinatra是一个低开销的轻量级架构,它增强了数据收集机制。Rails的功能则要丰富许多,而且也增强了UI,当你登录Scoutapp.com的时候就会看到。
我们使用的所有技术组件中,RRDTool可能是最不出名的一个。RRDTool是一个优秀的快速高效存储海量时序数据的工具。它制作出了你在Scout上面看到的所有性能指标的图表。如果你是一个Ruby开发者,而且你希望知道我们是如何使用它的话,请访问我们编写的Ruby库与RRDTool的接口文档。它同样能够制作你一年或者更久之前收集的性能指标的图表,这对于长期趋势分析和生产能力计划是非常关键的。
RB:像RRDTool这样的开源工具为你的公司带来了什么好处呢?
AL:RRDTool带来的好处是非常惊人的 -- 如果没有RRDTool的话,我们的进度落后至少一年以上。高效管理海量时序数据是一个巨大的挑战,我非常高兴地看到RRDTool能够很好地解决这个问题。
事实上,我们一度尝试过独立开发工具以替代RRDTool,不过结果是一场灾难。我从中吸取了一些教训,并且将这些惨痛教训写在了我的博客上。
RB:你为什么在Scout中选择Sinatra和Rails呢?这些工具有什么优点?
AL:我们使用Sinatra收集Scout agents发送过来的数据,Sinatra不得不面对海量的处理请求,因此它必须高效快速地处理这些请求,而且必须是高度稳定可靠的。Sinatra在这方面的确是个中翘楚。它的请求-响应循环是非常轻量级的。以Sinatra为基础架构并没有给我们的业务逻辑增加开销,反而使得代码易于理解和维护。
主要的Scout应用从另一方面说更像是传统的web应用。用户可以创建账户,查看警告,配置触发器阈值,浏览图表等。这些功能的实现离不开Rails套件的巨大帮助。从重量级上来说,Rails比Sinatra大一些,但是它提供了大量的基础功能,使得编写web应用易如反掌。
将数据收集机制(Sinatra)从终端用户(Rails)拆分出来的好处是:我们可以升级用户的站点,让其以零接口收集数据。我们更新scoutapp.com比较频繁,因为我们要添加新的功能或者是处理用户反馈。从运营的角度来看,我们希望能够在推送更新的时候不影响业务相关的数据收集机制。
RB:使用开源组件对你的业务,产品或者客户会有什么风险呢?
AL:我还没有看到任何风险。反而,事实上--如果我们基于传统的闭源技术(OS,数据库,应用服务器等),由于许可证的费用,我们的最终价格可能会非常高。这反而会对我们的业务带来风险,同样对于我们的客户来说也不是一个好的解决方案。开源是创建一家科技公司的最好方法。
RB:Scout仅仅监控Rails应用吗?
AL:Scout可不是仅仅监控Rails应用。它还监控许多系统级的服务,因此无论你使用什么应用架构,Scout都是非常有用的。我仅仅列举几项Scout可以监控的东西:CPU负载,磁盘使用量,MySQL性能和Slow Query,任意数目设备的IO状态,Apache状态,Nginx,EC2 Cloudwatch等等。我们发现,当实际应用中某个东西出了问题,实际上却还有其他的服务也同时表现出了问题。能够对所有活动的服务状态产生直观的视觉监控是Scout的强项。有的服务之间的关系非常难以追踪,但是你可以利用Scout轻易找出。例如,你可能看到你的应用的吞吐量下降但是CPU的负载却上升,或者你可能会看到异常大量的MySQL slow query,通过Scout,你可以将这些现象和你的IO状态联系起来,然后发现原来是一块磁盘出了故障。
有些时候这是最简单的将你于焦头烂额中拯救出来的办法。每一次scout的安装都会设置一个触发器,自动在磁盘使用率在80%(当然你可以将这个阈值设置为你想要的)的时候发送电子邮件通知你。它最近就发送给我一个关于我的某个开源项目的通知。设置了这个功能,这个80%阈值通知的email能够让你观察事情的进展。例如,之所以会收到这封邮件,是因为我忘了配置logrotate转储日志,所以磁盘被日志填充满了。
RB:如果Scout能够用于监控数据库,例如MySQL,那么如果要使用Scout的话,Ruby是必须安装在用户希望监控的设备上?
AL:对,你需要安装Ruby来运行Scout。Ruby环境的使用率正在逐渐提高,所以这并不是一个问题。很多Linux发布版已经安装了Ruby,如果Ruby还没有安装的话,也只是一条‘apt-get’或者‘yum install’命令的问题。
RB:我发现现在有很多开源的插件,Scout插件系统的架构是如何呢?
AL:插件系统是Scout的核心部分,它使得Scout功能更加丰富,扩展性能更强。插件都是基于我们提供的API构建的Ruby的小脚本。你可以在我们提供的目录中下载插件,由于这些插件都是经过我们审查过的,所以你无须担心什么。如果你需要修改插件的行为,那也非常简单,因为插件的源码非常短,而且也很简单。
RB:开发者创建插件是免费的么?
AL:当然──如果你需要监控某个全新的东西,那么写个插件吧。你将能够在我们的网站上找到开发和测试插件的全套详细教程。一旦你的插件开始运行,在Scout中它也是权限很高的:你可以绘制其数据的图表,创建触发器,当某些值超出临界状态的时候获取email通知,以及追踪重要的趋势变化。
不仅如此,如果你希望分享你的插件,那么告诉我们,我们将会对这个插件进行审查。我们已经在社区里面组织了一些相当聪明的开发者,他们创建的插件质量也非常优秀。两个生动的例子便是Delayed Job(一个Ruby应用的后台任务进程)和Redis。每时每刻都有新的插件正在被开发,所以客户可以一直从Scout中获取新的功能。
RB:你是如何看待即将发布的Rails 3给你的业务带来的影响呢?或者会有影响么?Rails的新架构为应用提供了如此多的新特性,Scout是不是会从中受益呢?能否详细谈谈?
AL:作为技术人员,我非常喜欢Rails 3。我已经安装了beta版本并且升级了一些项目、从操作上来说,它不会影响Scout太多。Scout和Rails应用之间的主要接口是通过日志文件,所以我们只需要做到我们的Rails插件及时地在日志文件格式上符合Rails 3要求即可。我们现在非常肯定Scout是和Rails 3 beta兼容的。关于Rails 3提供的改进版的instrumentation模型 -- 我不可能把这个功能排除在外,但是我们现在还没有计划利用这个功能。对于高级Ruby instrumentation,我们推荐使用New Relic RPM辅助。
RB:你打算如何在你的产品中使用Rails 3呢?
AL:从业务角度来看,我们将内部架构升级到Rails 3需要点时间。幸运的是,我有一些编外项目以及开源的工作可以做,我可以在那里试验Rails 3。
将会带来更大冲击的是Ruby 1.9,它的速度远远快于1.8。这将带来巨大的性能差异,因为我们在Scout收集的指标上会进行大量的后台计算。Ruby 1.9将使我们能够在当前硬件环境下进行更多的计算。不仅仅是我们,每一个使用Ruby 1.9的人都将获得好处。我真的非常期待基于Ruby 1.9构建的Scout。
RB:我看现在Scout已经发布了Rackspace Cloud版本。你能告诉我们一些更多的信息吗?例如两者之间的关系以及Scout如何工作在Rackspace Cloud平台上。
AL:有些时候合作关系是需要重要的投资的。我们非常幸运能够和Rackspace合作。当我们开始谈判的时候,我们意识到我们都不需要改变什么就可以使得对云环境的监控更加便捷。因为这些工具我们双方都已经拥有了。
在Rackspace中使用Scout是非常简洁的 - 将登录到云的新服务器自动用Scout监控,一条在crontab中的命令就可以搞定。Rackspace管理云环境的接口是当前最简洁的,同样实践起来也是非常便捷。仅仅在crontab中增加一个使用Scout备份的命令即可。
也许监控云环境最大的问题便是其动态性。通常是使用脚本启动一个新的实例,而且你需要这些脚本尽可能地简单。因为所有的监控逻辑都是由我们托管,而且是基于我们的接口进行升级,它减少了在云环境中移动碎片的次数。
RB:如果你有大量云环境的话,Scout是如何工作的呢?
AL:在传统监控工具中,增加一个任务可能需要一整天的时间,而Scout只需要几分钟。监控新的实例是自动的,你可以一次请求监控所有实例。
无论任何时候你在一个新的云实例中运行Scout,它会自动寻找到监控记录,无论图像是用什么工具创建的。所以,只需在Scout中设置好你的图表路径,你就可以放手不管了。类似的,如果你有大量的运行实例,你可以轻松地将一个插件安装到所有实例中。你只需点击几下鼠标告诉Scout需要更新所有实例而已。
RB:未来客户可以从Scout期望得到一些什么呢?
AL:我们的目标是使得Scout成为服务器的“烟雾探测器”。有了烟雾探测器,你仅仅需要的是放入电池,它便能自己开始工作。没有维护需求。我们的客户需要Scout变成他们系统中最稳定可靠的部分。所以,我们的大部分工作关注在如何使事情便得明了,简单和高效。这可能意味着我们有一天需要更新某个插件的文档或者选择最高效的方法来判断是否所有的节点健康运行。我们没有一个固定的路线图 - 客户的反馈来自于各个方面 - 但是它的最终目标还是成为服务器的烟雾探测器。
RB:Andre,谢谢你百忙之中能够抽出时间来谈论Scout。
更多关于Scout监控服务器和应用程序的信息可以在Scout官网上找到。使用代码为‘infoq’的礼品卷,客户可以在第一个月获得10美元的折扣。Scout也有一个30天适用版本,所以10元折扣可以在30天使用之后生效。
Andre Lewis是Scoutapp.com的创始人之一,这是一个监控托管服务器和应用的公司。Andre对于构建敏捷,有用的商业行为充满了热情,并且相当有成果。他的工具是Ruby -- 他从2006年便开始使用Ruby和Ruby on Rails工作,而且写过一些Ruby的书籍,他现在维护着一些开源项目。他的地址是加州的圣弗朗西斯科。
查看英文原文:Scout - Extensible Server and Application Monitoring。