健康监控器#
LMCache 包含一个全面的健康监测框架,持续监测缓存引擎及其组件的健康状况。此功能对于生产环境的部署至关重要,可以检测并响应远程存储后端的故障。
概述#
健康监控器提供:
自动健康检查:定期监控所有注册组件的健康状况
可扩展框架:轻松为新组件添加自定义健康检查
远程后端监控:内置支持通过 ping 监控远程存储后端
降级模式支持:当系统不健康时自动阻止操作
Prometheus 指标集成:通过指标端点暴露健康状态
架构#
健康监测系统由三个主要组件组成:
健康检查(抽象基类)
单个健康检查的基类。每个健康检查代表系统健康的一个方面。
健康监控器
中央监控器,负责协调所有健康检查。它在后台线程中运行,并定期执行所有注册的健康检查。
RemoteBackendHealthCheck
内置的远程存储后端健康检查。它会向远程连接器发送请求以验证连接性。
自动发现#
健康监控器使用自动发现机制来查找和实例化健康检查:
在启动时,监视器扫描
lmcache.v1.health_monitor.checks包所有继承自
HealthCheck的类都会被发现每个检查的
create_from_engine()方法被调用以创建实例这些实例会被注册到监视器中。
此设计允许您通过在检查包中简单地创建一个新模块来添加新的健康检查。
配置#
健康监控配置通过您的 LMCache 配置的 extra_config 部分完成:
配置键 |
默认值 |
描述 |
|---|---|---|
|
|
健康检查周期之间的间隔(以秒为单位) |
|
|
每次 ping 操作的超时时间(以秒为单位) |
|
|
检查时间间隔内获取阻塞失败的最大次数 |
|
|
如果 get_blocking 失败,恢复的等待时间(以秒为单位) |
它是如何工作的#
运行时行为#
健康监控在后台线程中运行:
每
ping_interval秒,所有健康检查都会执行如果任何检查失败,系统将被标记为不健康。
当系统不健康时,存储/检索操作会被阻止,并记录警告日志。
一旦所有检查再次通过,系统将被标记为健康,操作将恢复。
初始化失败处理#
当初始化或后初始化不可恢复地失败时:
系统被标记为
_init_failed = Trueis_healthy()方法永久返回False健康监控线程将不会启动(如果初始化在启动之前失败)
系统以降级模式运行(仅重计算)
这确保不可恢复的初始化错误不会导致级联故障,并且系统可以优雅地回退到重计算。
优雅降级#
当健康监测器检测到不健康状态时:
存储操作:跳过并显示警告信息
检索操作:返回空结果并带有警告信息
查找操作:返回 0(没有缓存命中)并附带警告信息
这可以防止在远程后端不可用时发生级联故障。
内置健康检查#
RemoteBackendHealthCheck#
此检查监控与远程存储后端(例如,Redis、Valkey)的连接性。
检查内容:
对远程连接器进行 ping 测试以验证其可达性
测量 ping 延迟
报告失败的错误代码
当它处于活动状态时:
仅在配置了远程后端时(
remote_url已设置)仅当连接器支持
ping()操作时
报告的指标:
lmcache:remote_ping_latency: 最新的 ping 延迟(毫秒)lmcache:remote_ping_error_code: 最新错误代码 (0 = 成功)lmcache:remote_ping_errors: 总的 ping 错误数量lmcache:remote_ping_successes: 成功 ping 的总次数
Prometheus 指标#
健康监控器通过 Prometheus 端点公开指标:
指标名称 |
类型 |
描述 |
|---|---|---|
|
仪表盘 |
整体系统健康状态(1 = 健康,0 = 不健康) |
|
仪表盘 |
最新的远程后端 ping 延迟(毫秒) |
|
仪表盘 |
最新的 ping 错误代码(0 = 成功,-1 = 超时,-2 = 通用错误) |
|
计数器 |
远程后端的总 ping 错误数量 |
|
计数器 |
成功 ping 远程后端的总次数 |
错误代码#
健康检查系统使用以下错误代码:
代码 |
描述 |
|---|---|
|
成功 - 健康检查通过 |
|
超时 - ping 操作超过了配置的超时时间 |
|
通用错误 - 在健康检查期间发生了意外错误 |
扩展健康监控器#
您可以通过在 lmcache/v1/health_monitor/checks/ 目录中创建新模块来添加自定义健康检查。
当 LMCache 启动时,自定义检查将被自动发现并注册。