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 的必要性降低了,因为可以在上面安装常规工具。
你可以不用 SNMP,而是在交换机内部运行 node_exporter 或任何其他 exporter,以人类可读的格式暴露你需要的任何指标。优美胜于丑陋,对吧?
我们使用 CumulusOS,它在我们的案例中主要是 x86 架构,因此运行任何类型的 Linux 程序都完全没有问题。
你们为什么决定研究 Prometheus?
2015 年,当我们开始将一切可以自动化的东西自动化时,我们将 Prometheus 引入了生态系统。起初,我们只有一个监控服务器,上面运行着 Alertmanager、Pushgateway、Grafana、Graylog 和 rsyslogd。
我们也评估过 TICK (Telegraf/InfluxDB/Chronograf/Kapacitor) 技术栈,但我们对它们并不满意,因为当时功能有限,而 Prometheus 在许多方面看起来更简单、更成熟,易于实施。
你们是如何过渡的?
在从旧的监控技术栈 (NCG - Nagios/Cacti/Ganglia) 过渡期间,我们同时使用两套系统,最终,我们完全依赖于 Prometheus。
在我们的机群中,大约有 25 个社区的 metric 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。至关重要的是,如果主 Prometheus 节点宕机,Grafana 能够查询备用节点。这很简单——在前面放一个 HAProxy 并在本地接受连接即可。
另一个问题:我们如何防止用户(开发人员和其他内部员工)滥用仪表盘,导致 Prometheus 节点过载。
或者在主节点宕机时,备用节点出现惊群问题 。
为了达到期望的状态,我们尝试了 Trickster 。它极大地加快了仪表盘的加载速度。它会缓存时间序列数据。在我们的案例中,缓存存放在内存中,但也有更多的存储选择。即使主节点宕机后你刷新仪表盘,Trickster 也不会向第二个节点查询它内存中已缓存的时间序列。Trickster 位于 Grafana 和 Prometheus 之间。它只与 Prometheus API 对话。

Prometheus 节点是独立的,而 Alertmanager 节点组成一个集群。如果两个 Alertmanager 都看到同一个警报,它们会进行去重,只触发一次而不是多次。
我们计划运行大量的 blackbox_exporter,监控每个 Hostinger 客户的网站,因为任何不能被监控的东西都无法被评估。
我们期待未来实施更多的 Prometheus 节点,以便在多个 Prometheus 实例之间进行分片。这将使我们避免在每个区域的一个实例宕机时出现瓶颈。