继续我们的 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 或任何其他导出器,而不是使用 SNMP,以人性化可读的格式暴露您需要的任何指标。美丽胜过丑陋,对吧?
我们使用 CumulusOS,在我们的案例中它主要是 x86 架构,因此运行任何类型的 Linux 程序绝对没有问题。
您为什么决定研究 Prometheus?
2015 年,当我们开始自动化所有可以自动化的事情时,我们将 Prometheus 引入了生态系统。一开始,我们只有一个监控盒子,上面运行着 Alertmanager、Pushgateway、Grafana、Graylog 和 rsyslogd。
我们也评估了 TICK(Telegraf/InfluxDB/Chronograf/Kapacitor)技术栈,但当时由于功能有限,我们对它们并不满意,而 Prometheus 在很多方面看起来更简单、更成熟,更适合实现。
您是如何进行迁移的?
从旧的监控技术栈(NCG - Nagios/Cacti/Ganglia)过渡期间,我们同时使用了这两个系统,最终我们只依赖 Prometheus。
我们在集群中使用了大约 25 个社区指标导出器以及一些定制编写的,例如 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_exporters 来监控 Hostinger 的每一个客户网站,因为任何无法监控的事物都无法评估。
我们期待未来实施更多的 Prometheus 节点,以便在多个 Prometheus 实例之间进行分片。这将确保每个区域的一个实例宕机时不会成为瓶颈。