我将介绍使用Prometheus监视Python应用程序的四种方法
首先
尽管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,无需设置即可开始监视指标。此外,您还可以预订演示并直接与我们联系。我们随时乐意讨论您公司的监视需求。
那么,在下一篇文章见!