Hostinger 访谈
2019年2月6日作者 Brian Brazil
继续我们关于 Prometheus 用户系列的访谈,Hostinger 的 Donatas Abraitis 讲述了他们的监控历程。
您能介绍一下您自己以及 Hostinger 公司吗?
我是 Donatas Abraitis,Hostinger 的系统工程师。Hostinger 顾名思义是一家托管公司。自 2004 年以来,我们拥有约 3000 万客户,其中包括 000webhost.com 项目——免费网络托管提供商。
在使用 Prometheus 之前,您的监控体验是怎样的?
Hostinger 规模还很小的时候,市场上只有 Nagios、Cacti 和 Ganglia 等开源监控工具。这就像告诉年轻人软盘是什么,不过 Nagios 和 Cacti 今天仍在开发中。
虽然当时没有自动化工具,但 Bash + Perl 也能完成工作。如果您想扩展团队和自身能力,绝不能忽视自动化。没有自动化,就会涉及更多人工手动工作。
当时大约有 150 台物理服务器。相比之下,到目前为止,我们共有约 2000 台服务器,包括虚拟机和物理机。
对于网络设备,SNMP 仍被广泛使用。随着“白盒”交换机的兴起,SNMP 的必要性降低了,因为可以安装常规工具。
您可以在交换机内运行 node_exporter 或任何其他 exporter,以人类可读的格式公开您所需的任何指标,而不是使用 SNMP。美观胜于丑陋,对吧?
我们使用 CumulusOS,在我们的情况下主要是 x86 架构,因此运行任何类型的 Linux 程序都没有问题。
你们为什么决定研究 Prometheus?
2015 年,当我们开始自动化所有可以自动化的事物时,我们将 Prometheus 引入了我们的生态系统。起初,我们有一个单一的监控服务器,上面运行着 Alertmanager、Pushgateway、Grafana、Graylog 和 rsyslogd。
我们也评估了 TICK (Telegraf/InfluxDB/Chronograf/Kapacitor) 堆栈,但由于当时功能有限,我们对它们不满意,而 Prometheus 在许多方面看起来更简单、更成熟,易于实现。
你们是如何过渡的?
在从旧监控堆栈 (NCG - Nagios/Cacti/Ganglia) 过渡期间,我们同时使用了这两个系统,最终,我们只依赖 Prometheus。
我们拥有大约 25 个社区指标 exporter + 一些自定义编写的 exporter,如我们集群中的 lxc_exporter。我们主要使用 textfile collector 公开自定义的业务相关指标。
切换后你们看到了哪些改进?
新设置将我们的时间分辨率从 5 分钟提高到 15 秒,这使我们能够进行细粒度且深入的分析。平均检测时间 (MTTD) 也降低了 4 倍。
您认为 Hostinger 和 Prometheus 的未来会怎样?
自 2015 年以来,我们的基础设施增长了 N 倍,主要瓶颈成为了 Prometheus 和 Alertmanager。我们的 Prometheus 占用约 2TB 的磁盘空间。因此,如果我们重启或在维护期间更改节点,我们就会在一段时间内错过监控数据。目前我们运行 Prometheus 版本 2.4.2,但近期我们计划升级到 2.6。我们特别关注 性能 和 WAL 相关的特性。Prometheus 重启需要大约 10-15 分钟。这是不可接受的。另一个问题是,如果单个地点出现故障,我们也会错过监控数据。因此,我们决定实施高可用监控基础设施:两个 Prometheus 节点,两个 Alertmanager 部署在不同的洲。
我们的主要可视化工具是 Grafana。Grafana 能够查询备用 Prometheus 节点,以防主节点出现故障,这一点至关重要。这很简单——在前面放一个 HAProxy 并接受本地连接。
另一个问题:我们如何防止用户(开发者和其他内部员工)滥用仪表板,导致 Prometheus 节点过载?
或者在主节点出现故障时,备用节点也会出现 惊群效应 。
为了实现所需的状态,我们尝试了 Trickster 。这极大地加快了仪表板的加载时间。它缓存时间序列。在我们的例子中,缓存存储在内存中,但也有更多选择存储位置。即使主节点出现故障,当您刷新仪表板时,Trickster 也不会从第二个节点查询它在内存中缓存的时间序列。Trickster 位于 Grafana 和 Prometheus 之间。它只与 Prometheus API 通信。

Prometheus 节点是独立的,而 Alertmanager 节点形成一个集群。如果两个 Alertmanager 收到相同的警报,它们会进行去重,并只触发一次,而不是多次。
我们计划运行大量的 blackbox_exporter,并监控每个 Hostinger 客户的网站,因为任何无法监控的事物都无法评估。
我们期待将来部署更多 Prometheus 节点,将节点分片到多个 Prometheus 实例。这样,如果一个区域的实例出现故障,我们也不会成为瓶颈。