跳转到主要内容

ftw.monitor

项目描述

简介

ftw.monitor在实例启动时自动启动一个zc.monitor服务器。

此监控服务器支持一个health_check命令,该命令可以用作HAProxy或服务监控框架中的TCP健康检查。

ftw.monitorcollective.monitorfive.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 实现,它将加载最常用的目录索引(allowedRolesAndUsersobject_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 统计数据,特别是 loadsstoresconnections

在标准安装中,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-buildoutsproduction.cfg和/或zeoclients/<n>.cfg扩展,可以像这样删除HttpOk supervisor插件(在扩展其中一个配置之后)

    [supervisor]
    eventlisteners-httpok =
  • 删除(如果存在)collective.warmup。由于ftw.monitor包括自己的自动预热逻辑,因此使用collective.warmup是不必要的(甚至是有害的)。

    如果您从ftw-buildoutswarmup.cfg扩展,可以使用以下部分来中和collective.warmup(在扩展warmup.cfg之后)

    [buildout]
    warmup-parts =
    warmup-eggs =
    warmup-instance-env-vars =
  • 将HAProxy的健康检查更改为TCP检查而不是HTTP。请参阅上面的示例以获取适当的HAProxy配置示例。

开发

  1. 分叉此存储库

  2. 克隆您的分叉

  3. Shell: ln -s development.cfg buildout.cfg

  4. Shell: python bootstrap.py

  5. Shell: bin/buildout

运行bin/test以测试您的更改。

或者通过运行bin/instance fg来启动实例。

变更日志

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 (28.2 kB 查看哈希值)

上传时间 源代码

支持