继续我们对 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 + 一些自定义编写的,例如 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_exporters 并监控每个 Hostinger 客户的网站,因为任何无法监控的东西都无法进行评估。
我们期待着在未来实施更多的 Prometheus 节点,以便在多个 Prometheus 实例之间对节点进行分片。如果每个区域一个实例出现故障,这将使我们不会出现瓶颈。