有没有在生产环境中安全测量Python运行时间的方法?

5 投票
3 回答
1291 浏览
提问于 2025-04-16 06:55

我想给我的Python应用加一些监控功能,这样我就能知道:

  • 页面生成的时间。
  • 在外部请求(比如mysql数据库或API调用)上花费的时间百分比。
  • mysql查询的数量,以及具体的查询内容。

我希望这些数据是从生产环境中获取的(而不是离线分析),因为在不同的负载下,各个地方花费的时间会有所不同。

在PHP中,我可以用XHProf或者instrumentation-for-php来实现这个功能。在Ruby on Rails、.NET或者Java中,我可以使用New Relic。

那么,有没有推荐的Python或Django的监控工具呢?

3 个回答

0

django-prometheus 是一个很不错的工具,适合处理生产环境中的工作负载,特别是在像 Kubernetes 这样的容器环境中。它开箱即用,提供了中间件,可以跟踪请求的延迟和数量(按视图方法分类),还有数据库和缓存的访问时间。不过,它并不适合用来追踪哪些查询实际上在执行,这时候就需要像ELK这样的日志解决方案来帮忙。如果你需要的话,我写过一篇文章,介绍了如何为 Django 应用添加自定义指标

1

New Relic 现在为 Python 提供了一个软件包,这个软件包也支持通过 mod_wsgi 来使用 Django。

https://support.newrelic.com/help/kb/python

1

是的,这完全是可能的。比如,你可以在网址中加一个神奇的开关,比如 "?profile-me",这样就可以在Django的中间件中启动性能分析。

网上有很多相关的代码片段,比如这个:http://djangosnippets.org/snippets/70/,或者像这个模块:http://code.google.com/p/django-profiling/,不过我没有用过这些,所以不能给你推荐。

不过,他们的方法和我用的差不多——也就是在一个中间件中使用Python的Hotshot性能分析模块,这个中间件会包裹你的视图。至于MySQL部分,你可以直接使用Django的connection.queries

Hotshot的一个好处是,它的输出可以用Kcachegrind来浏览,像这里这样:http://www.rkblog.rk.edu.pl/w/p/django-profiling-hotshot-and-kcachegrind/

撰写回答