与 Hostinger 的访谈
2019年2月6日作者 Brian Brazil
在我们的 Prometheus 用户访谈系列中,Hostinger 的 Donatas Abraitis 讲述了他们的监控历程。
您能介绍一下自己以及 Hostinger 的业务吗?
我是 Donatas Abraitis,Hostinger 的系统工程师。Hostinger。顾名思义,Hostinger 是一家主机托管公司。自2004年以来,我们拥有约3000万客户,其中包括 000webhost.com 项目——免费的虚拟主机提供商。
在引入 Prometheus 之前,你们的监控经验是怎样的?
当 Hostinger 还是一家小公司时,市面上只有 Nagios、Cacti 和 Ganglia 这些开源监控工具。这就像是在告诉年轻人软盘驱动器是什么一样,但 Nagios 和 Cacti 至今仍在开发周期中。
尽管当时没有自动化工具。Bash + Perl 就能完成任务。如果你想扩展你的团队和能力,自动化绝不应该被忽视。没有自动化,就意味着更多的人工操作。
那时大约有150台物理服务器。相比之下,截至今天,我们拥有大约2000台服务器,包括虚拟机和物理机。
对于网络设备,SNMP 仍然被广泛使用。随着“白盒”交换机的兴起,SNMP 变得不那么必要了,因为可以安装常规工具。
你可以不用 SNMP,而是在交换机内部运行 `node_exporter` 或其他任何导出器,以人类可读的格式暴露你需要的任何指标。美优于丑,对吗?
我们使用 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_exporter` 来监控 Hostinger 每一个客户的网站,因为任何无法监控的事物都无法评估。
我们期待未来部署更多的 Prometheus 节点,从而在多个 Prometheus 实例之间进行分片。这将使得即便每个区域有一个实例宕机,我们也不会遇到瓶颈。