我将介绍使用Prometheus监视Python应用程序的四种方法

image.png

首先

尽管Prometheus最初设计用于单进程多线程应用程序,它现在成为了监控Python应用程序的流行工具。

Prometheus在Soundcloud的环境中开发,受到了Google的Borgmon的启发。在原有环境中,Borgmon依赖于一种简单的服务检测方法,可以轻松地找到在集群中运行的所有作业。

Prometheus假设有一个目标,即一个单一的多线程进程,来继承这些前提。Prometheus的客户端库在假设度量是来自多个执行线程的各种库和子系统,在共享地址空间下运行。

请先注册MetricFire的免费试用账户开始。通过这个试用账户,您可以立即在平台上开始使用Prometheus,并实践本文中所学到的知识。

将Prometheus集成到Python WSGI应用程序时的问题。

当在WSGI应用服务器上执行Python应用程序时,问题就开始出现了。在WSGI应用中,请求不是分配给单个进程,而是分配给许多不同的工作者。这些工作者通过使用多个进程进行部署,成为多进程应用程序。

当这种类型的应用程序被导出到Prometheus时,Prometheus会获取多个不同的worker来响应抓取请求。每个worker都以自己了解的价值观来响应,因此Prometheus会将计数器指标抓取并返回为100,并且可以在返回为200后立即再次返回。由于每个worker都在导出自己的值,因此计数器指标会测量随机信息而不是整个作业的信息。

为了解决以上的问题,有以下四种解决方案。

将所有的工作节点加总在一起

当为每个指标添加唯一的标签后,可以一次性查询所有指标,并且可以有效地查询整个任务。例如,当为每个工作人员添加worker_name等标签时,可以编写如下查询。

sum by (instance, http_status) (sum without (worker_name) (rate(request_count[5m])))

这样一来,一个作业的所有工作节点将同时聚合。然而,这样做的问题是您拥有的指标数量会迅速增加。

2. 多进程模式 (Duō

以下是MetricFire推荐的方法。使用这种方法,我们使用Prometheus Python客户端来处理位于gunicorn应用服务器上的多进程应用,并在Prometheus上监控我们自己的应用程序。

请查看MetricFire的文章,了解如何使用Python客户端来监控自己的服务,并使用Prometheus监控Python Web应用程序。该文章详细说明了使用Prometheus监控Python Web应用程序的每个步骤。

3. Django Prometheus客户端

这个方法会把每个工作人员完全地指定为一个单独的目标。Django Prometheus客户端会配置每个工作人员通过自己的端口监听Prometheus的抓取请求。

4. StatsD导出工具

这种方法拒绝了Prometheus直接触及应用程序的概念。相反地,它将指标导出到在本地运行的StatsD实例中,并将Prometheus配置为获取StatsD实例而不是应用程序。这样一来,您可以更详细地控制每个计数器所计数的内容。

总结

在Prometheus中不能原生地监视多进程应用程序,但以下4个解决方案是很好的绕过方法。这样一来,您可以将Prometheus用作企业整体主要监视工具,对于IT资源和APM两者都适用。

请参阅有关使用Prometheus监视Python应用程序的详细方法的文章,并查看有关基于Python的输出器和使用Kubernetes开发和部署Python API的系列文章。

为了尝试Prometheus并实践从这篇文章中学到的内容,请查看MetricFire的免费试用版。您可以直接在我们的平台上使用Prometheus,无需设置即可开始监视指标。此外,您还可以预订演示并直接与我们联系。我们随时乐意讨论您公司的监视需求。

那么,在下一篇文章见!

广告
将在 10 秒后关闭
bannerAds