继续我们的 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,例如我们 fleet 中的 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 可以查询备份 Prometheus 节点。这很简单 - 在前面放置 HAProxy 并在本地接受连接即可。
另一个问题:我们如何防止用户(开发人员和其他内部员工)滥用仪表板,使 Prometheus 节点过载。
或者,如果主节点宕机,备份节点也会过载 - 惊群效应问题。
为了达到期望的状态,我们给了 Trickster 一个机会。这极大地加快了仪表板的加载时间。它缓存时间序列。在我们的案例中,缓存位于内存中,但还有更多存储位置的选择。即使主节点宕机,当您刷新仪表板时,Trickster 也不会向第二个节点查询它在内存中缓存的时间序列。Trickster 位于 Grafana 和 Prometheus 之间。它只与 Prometheus API 通信。
Prometheus 节点是独立的,而 Alertmanager 节点形成一个集群。如果两个 Alertmanager 节点都看到相同的告警,它们将进行去重,并且只触发一次而不是多次。
我们计划运行大量的 blackbox_exporters 并监控每个 Hostinger 客户的网站,因为任何无法监控的东西都无法评估。
我们期待在未来实施更多的 Prometheus 节点,以便在多个 Prometheus 实例之间进行分片。这将使我们避免在每个区域一个实例宕机时出现瓶颈。