在我们的 Prometheus 用户访谈系列中,DigitalOcean 谈论了他们如何使用 Prometheus。Carlos Amedee 还在 PromCon 2016 大会上谈到了推广的社会方面。
您能介绍一下自己以及 DigitalOcean 的业务吗?
我的名字是 Ian Hansen,我在平台指标团队工作。DigitalOcean 提供简单的云计算服务。迄今为止,我们在13个区域创建了2000万个 Droplets (SSD 云服务器)。我们最近还发布了一个新的块存储产品。
您在使用 Prometheus 之前的监控经验是什么?
在使用 Prometheus 之前,我们运行的是 Graphite 和 OpenTSDB。Graphite 用于较小规模的应用,而 OpenTSDB 用于通过 Collectd 从所有物理服务器收集指标。Nagios 会从这些数据库中拉取数据来触发警报。我们现在仍然使用 Graphite,但不再运行 OpenTSDB。
您为什么决定考察 Prometheus?
我曾对 OpenTSDB 感到沮丧,因为我负责维护集群的在线状态,但发现很难防止指标风暴。有时,某个团队会启动一个新的(非常健谈的)服务,这会影响集群的总容量并损害我的 SLA。
我们能够对进入 OpenTSDB 的新指标进行黑名单/白名单管理,但除了组织流程(很难改变/执行)之外,没有很好的方法来防范健谈的服务。其他团队对当时的查询语言和可视化工具感到沮丧。我当时正与 Julius Volz 讨论推送 vs 拉取指标系统,当我看到可以通过决定拉取什么以及多久拉取一次来真正控制我的 SLA 时,我被说服并想尝试 Prometheus。此外,我非常非常喜欢它的查询语言。
您是如何过渡的?
我们之前通过 Collectd 收集指标并发送到 OpenTSDB。通过在我们已运行的 Collectd 设置旁边并行安装 Node Exporter,我们得以开始试验 Prometheus。我们还创建了一个自定义 exporter 来暴露 Droplet 指标。很快,我们的功能与 OpenTSDB 服务持平,并开始关闭 Collectd,然后关闭了 OpenTSDB 集群。
大家非常喜欢 Prometheus 及其附带的可视化工具。突然间,我们这个小小的指标团队积压了太多工作,来不及快速处理以满足所有人的需求。于是,我们没有继续为其他团队的服务提供和维护 Prometheus,而是着手创建工具,让其他团队尽可能轻松地运行自己的 Prometheus 服务器以及公司常用的 exporters。
一些团队已经开始使用 Alertmanager,但我们仍然保留了从现有监控工具中拉取 Prometheus 数据的概念。
切换后您看到了哪些改进?
我们改进了对虚拟机(hypervisor)的洞察。从 Collectd 和 Node Exporter 中获取的数据大致相同,但对于我们的 Golang 开发团队来说,创建新的自定义 exporter 来暴露每个虚拟机上运行的特定服务数据要容易得多。
我们正在暴露更好的应用指标。学习和教授如何创建以后可以正确聚合的 Prometheus 指标更容易。使用 Graphite 时,很容易创建一个以后无法以特定方式聚合的指标,因为点分隔的名称结构不正确。
创建警报比以前快得多、简单得多,而且使用的是熟悉的语言。这使得团队能够为其熟悉和理解的服务创建更好的警报,因为他们可以快速迭代。
您认为 DigitalOcean 和 Prometheus 的未来是什么样的?
我们正在继续研究如何让 DigitalOcean 的团队尽可能轻松地收集指标。目前,各团队正在为他们关注的事物运行自己的 Prometheus 服务器,这使我们能够快速获得原本难以实现的观测能力。但是,并不是每个团队都应该知道如何运行 Prometheus。我们正在研究如何使 Prometheus 尽可能自动化,以便团队可以专注于他们希望对其服务和数据库进行哪些查询和设置哪些警报。
我们还创建了 Vulcan,以便拥有长期数据存储,同时保留我们已经围绕其构建工具并培训人们如何使用的 Prometheus 查询语言。