与JustWatch的访谈
2016年10月12日作者 Brian Brazil
作为我们对Prometheus用户系列访谈的延续,JustWatch将讲述他们如何建立监控系统。
您能介绍一下您自己以及JustWatch是做什么的吗?
对于消费者而言,JustWatch是一个流媒体搜索引擎,帮助用户查找在何处在线和影院合法观看电影和电视节目。您可以在17个国家/地区搜索Netflix、HBO、Amazon Video、iTunes、Google Play等所有主要流媒体提供商的电影内容。
对于电影制片厂或视频点播提供商等客户,我们是一家国际电影营销公司,通过我们的消费者应用收集全球粉丝的匿名购买行为和电影品味数据。我们帮助制片厂将内容推广给正确的受众,并使数字视频广告在最大限度地减少浪费覆盖方面变得更加高效。
自2014年推出以来,我们没有在营销上花费一分钱,就从零发展成为国际上最大的2万个网站之一——在不到两年的时间里成为全球最大的流媒体搜索引擎。目前,我们拥有一支仅10人的工程团队,构建并运行着一个完全Docker化的堆栈,包含大约50个微服务和宏服务,主要运行在Kubernetes。
在使用Prometheus之前,您的监控经验如何?
在以前的公司,我们中的许多人都使用过大多数开源监控产品。我们有丰富的经验使用Nagios、Icinga、Zabbix、Monit、Munin、Graphite以及其他一些系统。在一家公司,我曾帮助使用Puppet构建了一个分布式Nagios设置。这个设置很好,因为新服务会自动出现在系统中,但移除实例仍然很痛苦。一旦系统出现一些变动,基于主机和服务的监控套件就不太适合了。Prometheus采用的基于标签的方法是我一直想要的,但之前从未找到过。
您为什么决定关注Prometheus?
在JustWatch,Prometheus的公开宣布正逢其时。公司成立的头几个月,我们主要依靠黑盒监控——CloudWatch用于一些最重要的内部指标,并结合了诸如Pingdom之类的外部服务来检测全站范围的中断。此外,没有任何传统的基于主机的解决方案令我们满意。在容器和微服务的世界中,像Icinga、Thruk或Zabbix等基于主机的工具感觉已经过时,无法胜任这项工作。当我们开始研究白盒监控时,我们中的一些人很幸运地参加了Golang聚会,Julius和Björn在那里宣布了Prometheus。我们迅速搭建了一个Prometheus服务器,并开始对我们的Go服务进行仪表化(我们的后端几乎只使用Go)。这非常容易——其设计感觉像是将云和面向服务作为首要原则,并且从未阻碍我们的工作。
您是如何进行过渡的?
过渡并不那么困难,从时间上看,我们很幸运地直接从没有相关监控过渡到Prometheus。
过渡到Prometheus主要是将Go客户端集成到我们的应用程序中,并封装HTTP处理器。我们还编写并部署了几个exporter,包括node_exporter以及多个用于云服务提供商API的exporter。根据我们的经验,监控和告警是一个永无止境的项目,但大部分工作都在几周内作为副项目完成。
自部署Prometheus以来,每当我们发现遗漏或从零开始设计新服务时,我们都会倾向于查看指标。
虽然完全掌握PromQL和标签概念的精妙之处花了一些时间,但这些努力真的非常值得。
切换后您看到了哪些改进?
Prometheus让我们茅塞顿开,因为它使得从白盒监控和基于标签的金丝雀部署中获益变得异常简单。许多Golang方面(HTTP处理程序、Go运行时)的开箱即用指标帮助我们非常迅速地获得了投资回报——仅仅是goroutine指标就多次化解了危机。我们之前唯一真正喜欢的监控组件——Grafana——感觉与Prometheus是天作之合,并使我们能够创建一些非常有用的仪表盘。我们赞赏Prometheus没有试图重复造轮子,而是完美地与现有最佳解决方案相结合。与前身相比,Prometheus的另一个巨大改进是它专注于确保数学计算的正确性(如百分位数等)。在其他系统中,我们从未完全确定所提供的操作是否有意义。特别是百分位数,它是衡量微服务性能如此自然且必要的方式,因此它们获得一流的处理方式令人倍感欣慰。
集成的服务发现使得管理抓取目标变得非常容易。对于Kubernetes,一切都是开箱即用的。对于一些尚未运行在Kubernetes上的系统,我们采用了基于Consul的方法。要让Prometheus监控一个应用程序,只需添加客户端,暴露/metrics
接口,并在容器/Pod上设置一个简单的注解。这种低耦合消除了开发和运维之间的许多摩擦——许多服务从一开始就构建得很好,因为这既简单又有趣。
时间序列和巧妙函数的结合带来了强大的告警能力。在服务器上运行的聚合以及将时间序列、它们的组合甚至这些组合上的函数都视为一等公民,使得告警变得轻而易举——通常是在事后也能轻松处理。
您认为JustWatch和Prometheus的未来会是怎样?
我们非常重视Prometheus不追求华丽,而是专注于实际工作和提供价值,同时部署和操作相对容易——尽管Alertmanager仍有许多不足之处。一些简单的改进,例如在前端简化交互式告警构建和编辑,将大大简化告警的处理工作。
我们非常期待存储层面的持续改进,包括远程存储。我们也希望Project Prism和Vulcan中采用的一些方法能被回溯到Prometheus核心中。目前我们最感兴趣的话题是GCE服务发现、更简单的扩展以及更长的保留期(即使这可能意味着存储更冷,查询旧事件的时间更长)。
我们也期待将Prometheus用于更多的非技术部门。我们希望用Prometheus覆盖我们的大部分KPI,让每个人都能创建漂亮的仪表盘和告警。我们目前甚至计划“滥用”这个强大的告警引擎,用于一个新的内部业务项目——敬请期待!