跳转到主要内容

Zope/Plone的性能配置。

项目描述

Zope和Plone的性能配置

zperfmetrics类似于perfmetrics,并额外提供statsd的ZConfig配置

  • 使用当前请求路径作为statd点分路径的前缀,

  • 还提供了一个补丁来测量Plone.app.theming的diazo编译和diazo转换(如果Plone可用),

安装

首先正确配置您的statsd。这超出了本模块的范围。

在您的包的setup.py中依赖此模块。

如果您使用zc.buildout来设置Zope2或Plone,请在您的[instance]部分或包含recipe = plone.recipe.zope2instance的部分中添加以下行

[instance01]
recipe = plone.recipe.zope2instance
...
zope-conf-imports =
    zperfmetrics
zope-conf-additional =
    <perfmetrics>
        uri statsd://localhost:8125
        before MyFancyProject
        hostname on
        virtualhost on
        after ${:_buildout_section_name_}
    </perfmetrics>
...

假设该程序在一个名为w-plone1的主机上运行,这将导致前缀MyFancyProject.w-plone1.instance01

uri

statd的完整URI。

之前

在主机名之前的路径前缀。

hostname

获取主机名并将其插入前缀中。(布尔值:开启关闭

virtualhost

获取虚拟主机并在ZPerfmetrics中使用静态前缀之后。(布尔值:开启关闭

之后

在主机名之后的路径前缀。

使用

您需要使用装饰器或使用with语句来测量代码块。

使用

from zperfmetrics import ZMetric
from zperfmetrics import zmetric
from zperfmetrics import zmetricmethod

@zmetric
def some_function():
    # whole functions timing and call counts will be measured
    pass

@ZMetric(stat='a_custom_prefix')
def some_other_function():
    # set a custom prefix instead of module path and fucntion name.
    pass

class Foo(object):

    @zmetricmethod
    def some_method(self):
        # whole methods timing and call counts will be measured
        pass

    @ZMetric(method=True, timing=False):
    def some_counted_method(self):
        # whole methods number of calls will be measured, but no times
        pass

    @ZMetric(method=True, count=False):
    def some_timed_method(self):
        # whole methods timing be measured, but no counts
        pass

    def some_method_partly_measured(self):
        # do something here you dont want to measure
        with ZMetric(stat='part_of_other_method_time'):
            # do something to measure
            # call counts and timing will be measured
            pass
        # do something here you dont want to measure

    @ZMetric(method=True, rate=0.5):
    def some_random_recorded_method(self):
        # randomly record 50% of the calls.
        pass

请求生命周期集成

所有传递请求的ZPerfmetrics都被视为在request_lifecycle部分。

这里的所有指标都是按照以下格式构建的:$PREFIX.request_lifecycle.[$VIRTUAL_HOST].$PATH.*

Zope

此包提供订阅者来测量请求所需的时间,包括其中的一些时间点。

这些订阅者通过zcml加载,并在publish.*下记录。

publish.traversal

从发布开始到遍历完成所需的时间。

publish.rendering

从遍历结束到提交开始之前所需的时间。

这个值有点模糊,应该谨慎对待,因为可能有其他订阅此事件并占用其时间。由于订阅者执行顺序未定义,处理可能发生在测量之后

如果Plone转换链处于活动状态,则渲染时间是在转换开始之前。

publish.finalize

从渲染结束(或Plone.transformchain活动时的转换结束)到数据库提交所需的时间。

publish_all

从发布开始到请求完全处理所需的整个时间。

Plone

通过依赖zperfmetrics[plone]在Plone中安装此包将强制使用1.2或更高版本的plone.transformchain

首先,由于昂贵的转换(包括publish.beforecommit的订阅者)都已完成,publish.rendering变得不那么模糊。

然后它引入了与plone.transformchain相关的新测量指标

publish.transform_all

plone.transformchain中所有转换所需的时间。这通常包括Diazo。

publish_transform_single.${ORDER}-${TRANSFORMNAME}

特定单个转换所需的时间。转换按顺序和名称排序,两者都替换。

此包修补了

diazo.setup指标

plone.app.theming.transform.ThemeTransform.setupTransform被修补为一个基本的(无路径)性能指标Metric。转换的设置在启动时只发生一次,这是从其rules.xml、index.html和相关文件创建Diazo xslt所需的时间。

Docker中的Statd、Graphite & Grafana

设置Statsd、Graphite和Grafana可能很复杂。对于本地测试——以及生产环境——启动一些Docker容器非常有用。

这是一个非常简化的版本,用于设置Docker中的Statd、Graphite和Grafana(请参阅此处原始版本)。这有助于最初启动和运行。请安装Docker安装docker-compose(只需pip install docker-compose),然后克隆仓库,并在其docker目录中运行docker-compose up -d

让Zperfmetrics指向uri statsd://localhost:8125并收集一些数据。在浏览器中打开Grafana,网址为http://localhost:3000

首先访问Grafana入门指南,10分钟的视频确实有助于发现UI的隐藏部分。

源代码

源代码存储在GIT版本控制系统中,主分支在github上。

我们很高兴看到许多分支、分叉和pull请求,以使zperfmetrics变得更加出色。

贡献者

历史

1.0b5 (2016-08-05)

  • 更好的命名,以便能够分组和堆叠:将publish.sum重命名为publish_all,将publish.transform_single重命名为publish_transform_single。[jensens]

1.0b4 (2016-08-05)

  • 清理名称,更好地分组,以便更容易绘图。[jensens]

1.0b3 (2016-08-05)

  • 增强:在顶层引入带有after前缀的request_lifecycle,以与级别保持一致。[jensens]

1.0b2 (2016-08-04)

  • 修复:单个转换的名称可能包含点。现在它们被替换为_。[jensens]

  • 修复:路径的根元素没有显示在其他所有路径的同一级别。现在它显示为__root__ [jensens]

  • 特性:在Zope中每个站点超过一个环境的情况下,无法通过虚拟主机进行过滤。引入了新的配置选项virtualhost。如果设置为on,虚拟主机名称将插入到PATH之前。[jensens]

  • 支持:为了使测试安装更容易,在Github仓库中添加了示例docker-compose设置和一些README.rst中的文档。[jensens]

1.0b1 (2016-08-04)

  • 添加了plone.transformchain事件的订阅者。删除了一个diazo转换的补丁。使Plone中的publish.beforecommit更清晰。[jensens]

1.0a7 (2016-08-03)

  • 修复:ZMetric类中的虚拟路径配置。[syzn]

1.0a6 (2016-07-28)

  • 特性:新值publish.commit。使用从publish.beforecommit到请求结束的时间差。[jensens]

  • 修复:publish.sum现在显示请求处理的整体时间。[jensens]

  • 修复:更新README以反映最后的变化。[jensens]

  • 如果使用VirtualHostMonster,则使用更美观的路径。[syzn]

1.0a5 (2016-06-28)

  • 修复:在/之前/之后钩子分配不正确。[jensens]

1.0a4 (2016-06-10)

  • 修复:修复了zope请求的测量,还添加了更多详细指标。[jensens]

1.0a3 (2016-06-09)

  • 测量zope请求所需的时间。[jensens]

1.0a2 (2016-03-22)

  • 重构:ZConfig最佳实践[jensens]

  • 修复:从前缀中删除尾随点[jensens]

1.0a1 (2016-03-22)

  • 修复:README是错误的[jensens]

1.0a0 (2016-03-22)

  • 使其工作[jensens, 2016-03-17]

许可证

版权所有(c)2016,BlueDynamics Alliance,奥地利,德国,瑞士。保留所有权利。

在满足以下条件的情况下,允许重新分发和使用源代码和二进制形式,无论是否修改:

  • 源代码的重新分发必须保留上述版权声明、本条件列表和以下免责声明。

  • 二进制形式的重新分发必须复制上述版权声明、本条件列表和以下免责声明在随分布提供的文档和/或其他材料中。

  • 未经BlueDynamics Alliance事先书面许可,不得使用BlueDynamics Alliance的名称或其贡献者的名称来推广或支持由本软件派生的产品。

本软件由BlueDynamics Alliance提供“按原样”且不承担任何明示或暗示的保证,包括但不限于适销性和适用于特定目的的隐含保证。在任何情况下,BlueDynamics Alliance均不对因使用本软件而产生的任何直接、间接、偶然、特殊、示范性或后果性损害(包括但不限于替代商品或服务的采购;使用、数据或利润的损失;或业务中断)承担责任,无论这些损害是由何种原因引起,无论根据何种法律理论,无论是基于合同、严格责任还是侵权(包括疏忽或其他),即使已被告知此类损害的可能性。

项目详情


下载文件

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

源分发

zperfmetrics-1.0b5.tar.gz (13.3 kB 查看哈希值)

上传时间

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面