ftw.monitor
项目描述
简介
ftw.monitor在实例启动时自动启动一个zc.monitor服务器。
此监控服务器支持一个health_check命令,该命令可以用作HAProxy或服务监控框架中的TCP健康检查。
ftw.monitor是collective.monitor或five.z2monitor的替代品,因为它完全依赖于autoconfiguration。不需要产品配置或ZCML,监控端口将始终自动基于实例的基本端口选择
monitor_port = instance_port + 80
此外,ftw.monitor还提供了一个perf_metrics命令,允许查询实例以获取与性能相关的指标。
兼容性
Plone 4.3.x
安装
将包添加到您的buildout配置
[instance]
eggs +=
...
ftw.monitor
使用
一旦ftw.monitor被包含在您的实例(s) eggs中,它将在实例启动时自动启动一个监控服务器
INFO ZServer HTTP server started at Mon May 6 14:53:08 2019
Hostname: 0.0.0.0
Port: 8080
...
INFO zc.ngi.async.server listening on ('', 8160)
监控服务器端口派生自实例的端口
monitor_port = instance_port + 80
可以使用netcat检查和测试监控服务器
$ echo 'help' | nc -i 1 localhost 8160
Supported commands:
dbinfo -- Get database statistics
health_check -- Check whether the instance is alive and ready to serve requests.
help -- Get help about server commands
interactive -- Turn on monitor's interactive mode
monitor -- Get general process info
perf_metrics -- Get performance related metrics
quit -- Quit the monitor
zeocache -- Get ZEO client cache statistics
zeostatus -- Get ZEO client status information
或者,提供了一个bin/instance monitor <cmd>脚本,它实际上做了相同的事情(将给定的命令发送到相应的监控端口并显示响应)
$ bin/instance monitor help
健康检查
由 ftw.monitor 提供的 health_check 命令允许检查 Zope 实例是否存活且准备好响应请求。
如果是这样,它将以 OK\n 响应。
$ echo 'health_check' | nc -i 1 localhost 8160
OK
在预热进行中(见下文)时,health_check 将以相应的消息响应。
预热
由于健康检查和实例预热难以分别处理,ftw.monitor 还提供了一种预热 Plone 网站的方法。
在 Plone 网站根目录 和 Zope 应用程序根目录 级别都提供了一个 @@warmup 视图,可以预热特定 Plone 网站,或者预热该 Zope 实例中的所有 Plone 网站。
预热视图将寻找一个适配 Plone 网站和请求的 IWarmupPerformer 多适配器,并执行必要的操作来预热该 Plone 网站。
ftw.monitor 中有一个默认的 IWarmupPerformer 实现,它将加载最常用的目录索引(allowedRolesAndUsers 和 object_provides)的目录 BTrees 和前向索引 BTrees。
在预热进行中时,health_check 命令尚未将实例指示为健康。
$ echo 'health_check' | nc -i 1 localhost 8160
Warmup in progress
自动预热
默认情况下,ftw.monitor 会通过向 @@warmup 视图发送请求来自动预热启动实例。一旦预热成功完成,实例将被视为健康(由 health_check 命令确定)。
如果不需要此行为,可以通过在启动实例之前将 FTW_MONITOR_AUTOWARMUP 环境变量设置为 0 来禁用自动预热。
export FTW_MONITOR_AUTOWARMUP=0
性能指标
可以使用 perf_metrics 命令查询与性能相关的各种指标。
语法:perf_metrics [dbname] [sampling-interval]
可以传递一个数据库名称,其中“-”是 main 数据库的别名,这是默认的。采样间隔(以秒为单位)默认为 5m,影响从 ZODB ActivityMonitor 获取的 DB 统计数据,特别是 loads、stores 和 connections。
在标准安装中,ActivityMonitor 中配置的最大历史长度(因此采样间隔)为 3600 秒。
该命令将作为 JSON 编码的字符串返回指标(为了清晰起见添加了空白)。
{
"instance": {
"uptime": 39
},
"cache": {
"size": 3212,
"ngsize": 1438,
"max_size": 30000
},
"db": {
"loads": 1114,
"stores": 28,
"connections": 459,
"conflicts": 7,
"unresolved_conflicts": 3,
"total_objs": 13336,
"size_in_bytes": 5796849
},
"memory": {
"rss": 312422400,
"uss": 298905600,
"pss": 310822823
}
}
实例
uptime - 实例启动时间(以秒为单位)
缓存
size - 缓存中对象的数量
ngsize - 缓存中非幽灵对象的数量
max_size - 缓存大小(以对象数量计)
数据库
loads - 采样间隔内的对象加载次数
stores - 采样间隔内的对象存储次数
connections - 采样间隔内的连接次数
conflicts - 自实例启动以来的冲突总数
unresolved_conflicts - 自实例启动以来的未解决冲突总数
total_objs - 存储中的对象总数
size_in_bytes - 存储的大小(以字节为单位)(通常是 FileStorage 的 Data.fs,不包括 BlobStorage)
内存
rss - 以字节为单位的RSS(常驻集大小)
uss - USS(唯一集大小)以字节为单位(仅限Linux,其他平台为-1)
pss - PSS(比例集大小)以字节为单位(仅限Linux,其他平台为-1)
为了方便通过Telegraf导入InfluxDB,可以使用bin/dump-perf-metrics脚本来导出所有可达实例的性能指标。此脚本将从所有实例收集指标,并以InfluxDB行协议格式导出。
HAProxy示例
以下是如何将health_check命令用作HAProxy TCP健康检查的示例。
backend plone03
# ...
option tcp-check
tcp-check connect
tcp-check send health_check\r\n
tcp-check expect string OK
server plone0301 127.0.0.1:10301 cookie p01 check port 10381 inter 10s downinter 15s maxconn 5 rise 1 slowstart 60s
server plone0302 127.0.0.1:10302 cookie p02 check port 10382 inter 10s downinter 15s maxconn 5 rise 1 slowstart 60s
server maintenance 127.0.0.1:10319 backup
请注意,option tcp-check将此后端的全部健康检查更改为TCP模式。因此,在此示例中,作为HTTP服务器的维护服务器需要关闭健康检查。
切换到ftw.monitor
为了切换到ftw.monitor进行健康监控,需要以下步骤
配置您的zope实例只使用一个ZServer线程。ftw.monitor旨在用于每个实例一个线程的设置。使用buildout和plone.recipe.zope2instance的示例
[instance0] zserver-threads =
1从您的supervisor配置中删除任何HttpOk插件。由于每个实例只有一个线程,那种服务监控方法将不再起作用,并且必须禁用。
如果您从ftw-buildouts的production.cfg和/或zeoclients/<n>.cfg扩展,可以像这样删除HttpOk supervisor插件(在扩展其中一个配置之后)
[supervisor] eventlisteners-httpok =
删除(如果存在)collective.warmup。由于ftw.monitor包括自己的自动预热逻辑,因此使用collective.warmup是不必要的(甚至是有害的)。
如果您从ftw-buildouts的warmup.cfg扩展,可以使用以下部分来中和collective.warmup(在扩展warmup.cfg之后)
[buildout] warmup-parts = warmup-eggs = warmup-instance-env-vars =
将HAProxy的健康检查更改为TCP检查而不是HTTP。请参阅上面的示例以获取适当的HAProxy配置示例。
开发
分叉此存储库
克隆您的分叉
Shell: ln -s development.cfg buildout.cfg
Shell: python bootstrap.py
Shell: bin/buildout
运行bin/test以测试您的更改。
或者通过运行bin/instance fg来启动实例。
链接
版权
本软件包版权所有:4teamwork
ftw.monitor采用GNU通用公共许可证,版本2。
变更日志
1.2.0 (2020-09-08)
添加脚本以将所有实例的性能指标以InfluxDB格式导出到脚本中。[lgraf]
1.1.0 (2020-04-30)
添加perf_metrics命令以获取各种性能相关指标。[lgraf]
1.0.0 (2019-11-18)
初始实现。[lgraf]
项目详情
ftw.monitor-1.2.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 32474e713d4931647f7f53126ac93de7d11cef71f23f8822893f43f22b193be7 |
|
MD5 | d3b7b481055e78f1cadbfa69566d8cb2 |
|
BLAKE2b-256 | 9bd2e822c09e775ab1198fb4faf69442116f416d60ef7092327763de3f1e39e3 |