跳转到主要内容

Zope 2 请求监控

项目描述

简介

haufe.requestmonitoring在Zope 2.12引入的发布事件之上实现了一个详细的请求日志功能。

需求

  • Zope 2.12.0b2或更高版本

  • 目前已在Zope 2.13.21上进行了测试

您可以使用此功能与较旧的Zope版本(2.10.x)一起使用,但您还必须包含ZPublisherEventsBackport

功能

高分辨率请求日志

作为ztopzanalyse的基础,即帮助确定Zope负载、检测长时间运行请求以及分析重启原因。

此模块中的实现注册了IPubStartIPubSuccess/IPubFailure的订阅者。对于这些事件中的每一个,都会写入一个如下形式的日志条目:

timestamp status request_time type request_id request_info

字段

  • timestamp是当前时间,格式为%y%m%dT%H%M%S

  • status对于IPubStart事件为0,对于将重试的请求为390,否则应用响应的IStatus的结果。

  • request_time对于IPubStart事件为0。否则,它将是秒为单位的请求时间。

  • type对于IPubStart事件为+,否则为-

  • request_id是(进程)唯一的请求ID。

  • request_info是应用于请求的IInfo

此外,当此日志激活时,还会写入一个包含request_info == restarted的日志条目。除了request_infotimestamp之外的所有字段都是0。这显然表示服务器已重新启动。后续请求的请求ID从1开始。

要激活此日志,必须激活timelogging.zcml(默认启用)并定义一个名为timeloggingproduct-config部分,其中包含键filebase。它指定了日志文件的基准名;将在该基准上附加.<date>。然后,必须定义ITicketIInfo适配器(例如来自info的适配器)。可以为响应定义IStatus适配器。

示例

<product-config timelogging>
filebase /path/to/request-logs/instance-foo
</product-config>

成功请求日志

此日志写入两个文件<base>_good.<date><base>_bad.<date>。对于每个请求,都会将一个字符写入好的或坏的日志文件,具体取决于请求是否成功。这意味着,对于这些日志文件来说,文件大小很重要。

通常,响应代码>= 500被视为失败的请求。当您需要不同的分类时,可以注册一个ISuccessFull适配器。

要激活此日志,必须激活successlogging.zcml(默认启用)并定义一个名为successloggingproduct-config部分,其中包含键filebase。它指定了日志文件的基准名(如上所述表示为<base>)。

示例

<product-config successlogging>
filebase /path/to/request-logs/successful-foo
</product-config>

监控长时间运行请求

haufe.requestmonitoring允许您监控长时间运行的请求。以下是在您的zope.conf配置文件中的配置,它将安装转储跟踪器并在period时间过后检查运行时间超过time的请求。

要启用此日志记录,必须激活monitor.zcml(默认关闭)并且必须存在请求监控配置部分。

zope-conf-additional =
    %import haufe.requestmonitoring
    <requestmonitor requestmonitor>
        # default is 1m
        period 10s
        # default is 1
        verbosity 2
        <monitorhandler dumper>
            factory haufe.requestmonitoring.DumpTraceback.factory
            # 0 --> no repetition
            repeat -1
            time 10s
        </monitorhandler>
    </requestmonitor>

典型的转储跟踪看起来像这样(它显示了URL和当前的堆栈跟踪)。

2009-08-11 14:29:09 INFO Zope Ready to handle requests
2009-08-11 14:29:09 INFO RequestMonitor started
2009-08-11 14:29:14 INFO RequestMonitor monitoring 1 requests
2009-08-11 14:29:19 INFO RequestMonitor monitoring 1 requests
2009-08-11 14:29:24 INFO RequestMonitor monitoring 1 requests
2009-08-11 14:29:24 WARNING RequestMonitor.DumpTrace Long running request
Request 1 "/foo" running in thread -497947728 since 14.9961140156s
Python call stack (innermost first)
Module /home/junga/sandboxes/review/parts/instance/Extensions/foo.py, line 4, in foo
Module Products.ExternalMethod.ExternalMethod, line 231, in __call__
- __traceback_info__: ((), {}, None)
Module ZPublisher.Publish, line 46, in call_object
Module ZPublisher.mapply, line 88, in mapply
Module ZPublisher.Publish, line 126, in publish
Module ZPublisher.Publish, line 225, in publish_module_standard
Module ZPublisher.Publish, line 424, in publish_module
Module Products.ZopeProfiler.ZopeProfiler, line 353, in _profilePublishModule
Module Products.ZopeProfiler.MonkeyPatcher, line 35, in __call__
Module ZServer.PubCore.ZServerPublisher, line 28, in __init__

日志行“RequestMonitor监控X个请求”只是表明有一个请求正在监控,有时你会在日志文件中得到无用的噪声。

您可以调整verbosity选项:将值设置为0以禁用日志行。默认值(1)将在每次有一个或多个请求正在监控时显示日志行。值为2时更为详细,还会显示关于请求URL的信息。

在pdb上转储跟踪

如果在您的源代码上放置了一个Python调试行,然后您想要测试运行Zope,那么跟踪转储很快就会变得令人头疼。

在这种情况下,您可以在执行调试器时禁用跟踪转储。只需添加DISABLE_HAUFE_MONITORING_ON_PDB环境变量即可。

environment-vars =
    ...
    DISABLE_HAUFE_MONITORING_ON_PDB True

安装

haufe.requestmonitoring添加到您的buildout.cfg文件的eggszcml选项。

作者

  • 原作者:Dieter Maurer

  • 当前维护者:Andreas Jung,info@zopyx.com

许可

haufe.requestmonitoring在Zope公共许可证V 2.1(ZPL)下发布。请参阅LICENSE.txt。

更改日志

0.6.0 (2021-05-12)

  • 支持Zope 4 / Python 3。[tschorr]

0.5.1 (2018-04-03)

  • 修复日志格式。参考:#9 [mamico]

0.5.0 (2016-09-29)

  • 对于所有日志输出,使用Unicode和字符串format而不是字符串替换,以避免可能的编码错误。参考:#5。[thet]

  • 允许monitorhandler定义它的zLOG日志级别。这使得可以在长时间运行的请求中定义ERROR级别而不是WARNING级别,并在配置为通知ERROR级别日志时通过Sentry等工具获得通知。[thet]

  • 移除Logger.py,它是DumpTraceback.py中“长请求记录器”的简单版本,没有使用也没有文档说明。[thet]

  • docs/HISTORY.txt移动到CHANGES.rst。[thet]

  • PEP8兼容性

0.4.0 (2013-09-20)

  • 添加了与旧版本的Zope的向后兼容性,而不必手动修补Zope。[giacomos]

  • 现在,您可以在Python pdb上添加DISABLE_HAUFE_MONITORING_ON_PDB环境变量来停止转储跟踪。[keul]

0.3.0 (2012-10-16)

  • 不再在较新的Python版本上使用已废弃的threadframe依赖。[keul]

  • 修复了Zope 2.13的egg依赖。[keul]

  • 为记录器添加了verbosity配置选项。[keul]

0.2.3 - (2009/08/11)

  • 更新了文档。

0.2.2 - (2009/07/20)

  • 进行了轻微的清理。

  • 对文档进行了轻微的清理。

0.2.1 - (2009/05/28)

  • 默认配置为‘successlogging’。

  • 略微更新了文档。

0.2.0 - (2009/05/12)

  • 初始版本。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装软件包的信息。

源代码分发

haufe.requestmonitoring-0.6.0.tar.gz (18.0 kB 查看哈希)

上传时间 源代码

由以下支持