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变得更加出色。
贡献者
Jens W. Klein <jens@bluedynamics.com>
Zalán Somogyváry
历史
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的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | bf0b201f5bc39db9de6fad88f256082c2c4e17c54ec38d29e52d79512c75e888 |
|
MD5 | 216e4be35ba97dc854e35d32c18fbf39 |
|
BLAKE2b-256 | c2f61a838c694e90a3608327ac0dd14d6a894e04c26b2d550b6266185d08f712 |