继续我们的 Prometheus 用户访谈系列,iAdvize 的 Laurent COMMARIEU 将会谈谈他们如何使用 Prometheus 替换了原有的 Nagios 和 Centreon 监控系统。
您能介绍一下 iAdvize 是做什么的吗?
我是 Laurent COMMARIEU,iAdvize 的系统工程师。我在 60 人的研发部门工作,属于一个 5 人的系统工程师团队。我们的工作主要是确保应用程序、服务和底层系统能够正常运行。我们与开发人员合作,确保他们的代码能够以最简单的方式投入生产,并在每个步骤提供必要的反馈。这就是监控的重要性所在。
iAdvize 是一个全栈对话式商务平台。我们为品牌提供了一种简单的方式来集中与其客户互动,无论沟通渠道如何(聊天、通话、视频、Facebook 页面、Facebook Messenger、Twitter、Instagram、WhatsApp、短信等)。我们的客户遍布 电子商务、银行、旅游、时尚等行业,覆盖 40 个国家。我们是一家拥有 200 名员工的国际公司,在法国、英国、德国、西班牙和意大利设有办事处。我们在 2015 年融资 1600 万美元。
在 Prometheus 之前,你们的监控经验是什么样的?
我于 2016 年 2 月加入 iAdvize。之前我曾在专门从事网络和应用监控的公司工作。我们使用开源软件,如 Nagios、Cacti、Centreon、Zabbix、OpenNMS 等,以及一些非免费软件,如 HP NNM、IBM Netcool suite、BMC Patrol 等。
iAdvize 过去将监控委托给外部供应商。他们使用 Nagios 和 Centreon 确保 24/7 监控。这套工具在传统的静态架构(裸机服务器,没有虚拟机,没有容器)下运行良好。为了完善这个监控栈,我们还使用了 Pingdom。
随着我们将单体应用迁移到微服务架构(使用 Docker),以及我们希望将当前工作负载迁移到基础设施云提供商,我们需要对监控有更多的控制和灵活性。与此同时,iAdvize 招聘了 3 名员工,使基础设施团队从 2 人增加到 5 人。使用旧系统,在 Centreon 中添加一些新的指标至少需要几天或一周的时间,并且有实际成本(时间和金钱)。
你们为什么决定关注 Prometheus?
我们知道 Nagios 等工具不是一个好的选择。当时 Prometheus 是一颗冉冉升起的新星,我们决定进行 PoC 验证。Sensu 最初也在考虑列表中,但 Prometheus 似乎更适合我们的用例。
我们需要能够与 Consul(我们的服务发现系统)集成的工具。我们的微服务已经有一个 /health 路由;添加 /metrics 端点很简单。对于我们使用的几乎每个工具,都有可用的 exporter(MySQL、Memcached、Redis、nginx、FPM 等)。
从纸面上看,一切都不错。
你们是如何过渡的?
首先,我们必须说服开发团队(40 人)Prometheus 是适合这项工作的工具,并且他们必须为他们的应用程序添加 exporter。因此,我们对 RabbitMQ 做了一个小演示,我们安装了一个 RabbitMQ exporter,并构建了一个简单的 Grafana 仪表板,向开发人员展示使用指标。编写了一个 Python 脚本来创建一些队列并发布/消费消息。
他们对看到队列和消息实时出现印象深刻。在此之前,开发人员无法访问任何监控数据。Centreon 受我们的基础设施提供商限制。今天,iAdvize 的每个人都可以使用 Grafana,使用 Google Auth 集成进行身份验证。上面有 78 个活跃账户(从开发团队到 CEO)。
在我们开始使用 Consul 和 cAdvisor 监控现有服务之后,我们监控了容器的实际存在情况。他们使用 Pingdom 检查进行监控,但这还不够。
我们用 Go 开发了一些自定义 exporter,用于从我们的数据库(MySQL 和 Redis)抓取一些业务指标。
很快,我们就能够用 Prometheus 替换所有旧的监控系统。
自从切换以来,你们看到了哪些改进?
业务指标变得非常受欢迎,在销售期间,每个人都连接到 Grafana,看看我们是否会打破一些记录。我们监控同时进行的对话数量、路由错误、已连接的客服人员、加载 iAdvize 标签的访问者数量、我们 API 网关上的调用等。
我们花了一个月的时间来优化我们的 MySQL 服务器,分析基于 Newrelic exporter 和 Percona grafana 仪表板。这是一个真正的成功,使我们能够发现效率低下的地方并进行优化,从而将数据库大小减少了 45%,峰值延迟减少了 75%。
有很多要说的。我们知道 AMQP 队列是否没有消费者,或者是否异常填充。我们知道容器何时重启。
可见性非常棒。
这仅仅是针对旧平台的。
越来越多的微服务将部署在云端,而 Prometheus 用于监控它们。我们使用 Consul 注册服务,Prometheus 发现指标路由。一切都像魅力一样运行,我们能够构建一个 Grafana 仪表板,其中包含许多关键的业务、应用程序和系统指标。
我们正在构建一个可扩展的架构,使用 Nomad 部署我们的服务。Nomad 在 Consul 中注册健康的服务,通过一些标签重标记,我们能够过滤掉带有标签名称 "metrics=true" 的服务。这为我们部署监控节省了大量时间。我们什么都不用做 ^^。
我们还使用了 EC2 服务发现。它在自动伸缩组中非常有用。我们伸缩和回收实例,并且它已经被监控。不再需要等待我们的外部基础设施提供商注意到生产中发生的事情。
我们使用 alertmanager 通过短信或发送到我们的 Flowdock 发送一些警报。
您认为 iAdvize 和 Prometheus 的未来会怎样?
- 我们正在等待一种简单的方式来为我们的容量规划添加长期可扩展的存储。
- 我们梦想有一天,我们的自动伸缩将由 Prometheus 警报触发。我们希望构建一个基于响应时间和业务指标的自主系统。
- 我曾经使用过 Netuitive,它具有出色的异常检测功能和自动关联。如果 Prometheus 也能有这些功能就太好了。