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
Andre Lewis 是 Scoutapp.com 的创始人之一,这是一个监控托管服务器和应用的公司。Andre 对于构建敏捷,有用的商业行为充满了热情,并且相当有成果。他的工具是 Ruby – 他从 2006 年便开始使用 Ruby 和 Ruby on Rails 工作,而且写过一些 Ruby 的书籍,他现在维护着一些开源项目。他的地址是加州的圣弗朗西斯科。
查看英文原文: Scout - Extensible Server and Application Monitoring 。
感谢刘申对本文的审校。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家加入到 InfoQ 中文站用户讨论组中与我们的编辑和其他读者朋友交流。
评论