资讯动态

Kener v4.1.0 版本更新详解:Confirmation Threshold、维护事件状态机与 v4 API 扩展

发布时间:2026/10/14 17:08:04 来源:尧图企业网站定制
可观测性后端前端运维【免费下载链接】kenerStunning status pages, batteries included!项目地址https://gitcode.com/gh_mirrors/ke/kener点击查看免费下载本文基于 Kener一款开箱即用的状态页与监控平台官方仓库中的 v4.1.0 变更日志changelog逐项解析该版本的七项新特性、五项改进与三项缺陷修复。读完后你将掌握 Kener v4.1 中 Confirmation Threshold宽限期的完整工作机制与验证方法、维护事件的 Complete/Cancel 手动状态迁移规则、页面级展示设置Page settings的 API 用法以及~home页面寻址、按 tag 删除监控器等 v4 REST API 的具体行为与底层实现。1. 新特性总览v4.1.0 的官方变更日志位于 v4.1.0.md/docs/content/v4/changelogs/v4.1.0.md)其内容划分为 New features、Improvements、Bug fixes 三大部分。当前仓库package.json中的版本号为4.1.7即 v4.1.x 系列的后续修订版本本文描述的所有行为均以当前仓库源码为准。1.1 Confirmation Threshold宽限期 / Grace period这是 v4.1.0 最重要的特性监控器现在可以要求连续 N 次检查都出现状态翻转才将新状态写入时间线让瞬时的网络抖动transient blips不再侵蚀 uptime 百分比或污染按天状态条day bars。配置方式在Monitor → General Settings中设置每个监控器独立的Grace period取值1–60默认1即关闭或通过 v4 监控器创建/更新 API 的confirmation_threshold字段设置PATCH /api/v4/monitors/{monitor_tag} { confirmation_threshold: 5 }该字段被校验为1到60之间的整数。完整的参数说明与示例见仓库文档 Grace Period/docs/content/v4/monitors/grace-period.md)。源码视角双列设计与一次性的抖动抑制该特性由数据库迁移 20260613120000_add_confirmation_threshold_and_raw_status.ts 落地为monitors表新增confirmation_threshold列unsigned integer非空默认1为monitoring_data表新增raw_status列可空文本。这正对应 changelog 的表述抑制只在计划检查的写路径上发生一次——monitoring_data.raw_status记录每次检查实际观察到的状态而status保存已确认的一侧。核心逻辑实现于 confirmationThreshold.ts其resolveConfirmedStatus函数遵循明确的顺序契约源码注释中写明必须在当前分钟行持久化之前调用中性观察直通NO_DATA观察不参与计数——既不推进也不重置 pending 计数按原样灰色写入锚点anchor取最近一次真实观察的已确认状态冷启动或同侧观察立即提交异侧观察回看最近threshold LOOKBACK_BUFFERbuffer 为 10行统计连续 pending 次数遇到 incident/maintenance 叠加行overlay即停止——叠加窗口是硬边界计数在其后重新开始连续次数达到阈值时调用backfillConfirmedStatus回溯回填确认的宕机从其第一次失败检查起即记为DOWN恢复对称地处理因此故障起止时间保持精确未达到阈值时保持确认侧状态pendingHold: true期间被扣住的样本仍保留真实延迟和错误文本并打上| Status held during grace period标签。几个值得注意的边界语义与 Grace Period 文档/docs/content/v4/monitors/grace-period.md) 一致按次数而非按时间5就是连续 5 次检查每分钟 cron 下约等于 5 分钟DEGRADED计入非UP一侧在DOWN与DEGRADED之间抖动仍会确认不健康但已处于不健康区间内的严重度切换DOWN ↔ DEGRADED立即记录只统计计划检查手动/API 推送的数据与默认状态填充不经过抑制分组监控器按成员的已确认状态评分成员的宽限期自动向上传播与告警的交互告警在已抑制的时间线上求值因此有效延迟取max(grace period, failure threshold)——是两者中的较大者而非相加。官方给出的验证步骤grace period 3在测试监控器上设置 grace period 为3并保存让目标连续失败 2 次 → 状态保持UP第 3 次连续失败 → 状态翻转为DOWN前 2 个样本被回填为DOWN恢复目标 → 连续 3 次成功后回到UP。选型建议原文档 TIP宽限期应略长于典型的瞬时抖动但又不能长到拖慢真实故障的捕获每分钟检查的监控器从3–5起步较为合适。1.2 手动完成/取消维护事件Manual maintenance event transitions单个维护事件现在可以在维护管理 UI 中被手动标记为完成或取消让记录的时间线与实际情况一致新的Complete和Cancel操作将事件移动到终态COMPLETED或CANCELLED并相应调整end_date_time终态是最终状态——已完成或已取消的事件不可再编辑v4 API 支持状态迁移与时间窗口编辑且两者互斥不能在同一请求中同时提交订阅者会收到迁移通知。源码视角状态机与互斥约束API 侧实现在 events/[event_id]/server.ts当请求体包含status时进入迁移模式若同时携带start_date_time/end_date_time直接返回 400Cannot update status and start/end times in the same request且status只接受COMPLETED或CANCELLED。控制层 UpdateMaintenanceEventStatus 定义了完整的状态机允许的迁移为ONGOING → COMPLETED以及SCHEDULED/READY/ONGOING → CANCELLED其余组合抛出Cannot transition event from ... to ...已开始的ONGOING 事件被结束时end_date_time会被移动到实际结束时刻——源码约束其不早于第一分钟start_date_time 60、不晚于原计划结束时间Math.min(end_date_time, Math.max(now, start 60))即记录反映实际发生的事未开始的事件保留原计划窗口迁移成功后若站点级通知设置中event_types.ended开启则通过subscriberQueue推送has been completed/has been cancelled的维护通知。完整设计说明可继续查看 Maintenance Events 文档/docs/content/v4/maintenances/events.md)。1.3 None 类型监控器的 Last known statusNone类型监控器不主动探测、等待外部推送数据的监控器现在可以可选地复用上一次已知的状态status、latency 与 source而不是在无数据推送时报告无数据。在监控器配置 UI 中有一个新复选框启用该行为。从源码结构看实现位于 noneCall.ts当type_data.overrideWithLastKnownStatus为真时调用GetLastKnownStatus(monitor.tag)取最近一条记录且仅当最后一条记录的type为MANUAL时才返回其status/latency否则返回null走无数据路径。配置项定义在 monitor.ts 类型文件管理 UI 复选框见 monitor-none.svelte/manage/app/monitors/[tag]/types/monitor-none.svelte)。1.4 Page settings页面级展示设置状态页新增了每页面独立的展示控制既可在 manage UI 配置也可通过 v4 pages API 操作Per-page status history——移动端默认30与桌面端默认90各自独立的天数均限制在1–365Monitor layout styles——在default-list、default-grid、compact-list、compact-grid四种布局中选择Meta / social overrides——页面级 title、description 与预览图。这些默认值在源码中集中定义于 global-constants.tsDEFAULT_STATUS_HISTORY_DAYS_DESKTOP: 90、DEFAULT_STATUS_HISTORY_DAYS_MOBILE: 30、STATUS_HISTORY_DAYS_MIN/MAX: 1/365、MONITOR_LAYOUT_STYLES四元组与文档完全吻合。API 行为有两个关键设计实现在 pageSettings.ts深度合并deep-merge的PATCH语义applyPageSettingsPatch只写入请求中出现的键存储 JSON 中的其余键包括模块不认识的键全部保留API 写入永远不会抹掉应用其他部分写入的设置校验拒绝validatePageSettings对类型做逐叶子检查布尔、非负整数、天数范围、布局样式枚举非法 payload 返回 400 验证错误。值得注意的存储边界细节存储 JSON 中 meta 字段使用 camelCasemetaPageTitle等由 manage UI 写入而 v4 API 对外暴露 snake_case映射集中在这一个存储边界模块中完成读侧toApiPageSettings还会忽略存储中类型不符或越界的值例如手工编辑产生的days: 999保证 API 响应始终符合 schema。页面 API 的完整请求处理含page_path净化、重复路径冲突检查等见 pages/[page_path]/server.ts。1.5 监控器列表的行内开关Inline monitor togglesManage → Monitors列表现在支持就地切换监控器的active/inactive状态与可见性visibility无需为改一个布尔值打开完整的编辑页。该改动属于管理 UI 层的交互优化对应列表页 manage/app/monitors/manage/app) 下的监控器列表组件。1.6 API用~home寻址首页首页以空字符串路径存储此前无法通过 REST API 寻址。v4.1.0 起GET/PATCH/DELETE /api/v4/pages/~home指向首页列表与单页响应将其page_path渲染为~home你读到的正是你能寻址的PATCH接受除固定首页路径外的所有字段DELETE对首页返回 400Cannot delete the home page与 manage UI 侧DeletePage强制的同一不变量一致未匹配的/api/路由现在返回 JSON 404而不是回落到 HTML 页面见 hooks.server.ts 中各中间件对未解析资源的 JSON 404 响应。常量定义于 global-constants.tsHOME_PAGE_TOKEN: ~home。API 处理器中还处理了一个读改写陷阱客户端读到~home后原样回传服务端将其视为不修改路径而尝试把首页路径改成非空值会被拒绝Home page path cannot be changed。1.7 APIincident 与 maintenance 响应携带绝对urlv4 API 响应新增绝对url字段消费方可以直接链接而无需自行拼接 id响应对象url形式Incidentsite/incidents/idMaintenancelist/get/create/updatesite/maintenances/id?typemaintenanceMaintenance eventsite/maintenances/event_idURL 由配置的 Site URL 加 base path 构建。源码中可验证该实现模式例如维护列表/详情响应的 url 字段构建/api/v4/maintenances/server.ts#L81)siteUrl serverResolver(/maintenances/ maintenance.id ?typemaintenance)事件响应同样使用(await GetSiteURL()) serverResolver(...)。1.8 API按 tag 删除监控器新增DELETE /api/v4/monitors/{monitor_tag}端点走与管理 UI 相同的删除路径。更重要的是修复了删除时的清理问题监控器删除现在显式清理 alert-config 行v2 告警及 trigger/monitor 连接表修复了 SQLite 遗留的孤儿行——SQLite 从不强制执行ON DELETE CASCADE外键共享的 alert config 会保留到最后一个引用它的监控器被解除绑定。清理链完整体现在 DeleteMonitorCompletelyUsingTag 中按序执行删除监控数据 → 删除 incident 关联 → 删除 v2 告警 →删除 alert-config 关联deleteMonitorAlertConfigsByMonitorTag→ 删除页面关联 → 删除维护关联 → 从分组移除 → 清缓存 → 最后删除监控器行本身。API 入口在 monitors/[monitor_tag]/server.ts。2. 改进Improvements2.1 列表视图渲染富文本维护描述维护描述现在在所有列表视图中以净化后的 HTML渲染——首页、自定义页面、监控器页面、事件页面和 embed 组件与详情页保持一致HTML 格式与换行正确显示不再出现字面标签由于渲染面向匿名访客全程保留净化sanitization步骤。2.2 分组监控器选择器支持搜索Group monitor picker 新增搜索栏让在拥有数百个监控器的实例上按名称查找并添加监控器成为可能不必再滚动扁平列表。2.3 数据库连接池调优与健康检查数据库层现在会调优连接池规模、将池边界钳制到安全值、保护 Redis 探测逻辑并加固错误页面启动时会记录当前配置的数据库类型便于诊断。2.4 更广泛的告警求值连续状态与延迟检查现在统计所有对告警可见的样本类型提升告警可靠性手动提交的数据在更新后会触发一次尽力而为best-effort的告警重新求值。2.5 本地化新增**乌克兰语Ukrainian**翻译仓库 locales/uk.json 已存在修复法语语言包字符串中的语法错误更新默认 v4 告警正文描述——旧文案仍引用 v4 之前的模板变量。3. 缺陷修复Bug fixes3.1 Overall status 采用 worst-wins 排序聚合状态在所有组件中一致遵循DOWN DEGRADED MAINTENANCE UP的最坏状态优先排序进行中的维护不再掩盖真实宕机。该折叠逻辑的规范注释位于 clientTools.tsthe worst state wins并影响页面横幅与_徽标等多监控器聚合场景。3.2 社交预览图使用绝对 URLog:image与twitter:imagemeta 标签现在会前缀 Site URL修复了因相对路径导致预览失败的问题。3.3 修复公开页头叠加公开页面上固定导航栏与粘性主题栏背后现在共用一个单一磨砂frosted背景页面内容不再在滚动时透出。4. 小结v4.1.0 的主线可以概括为三件事让状态数据更诚实Confirmation Threshold 用raw_status/status双列把观察到的与确认的分离瞬态抖动不再污染 uptime让运营操作更贴近现实维护事件可手动 Complete/Cancel、监控器列表行内开关让 API 更完整~home寻址、绝对url、按 tag 删除监控器、页面设置的 deep-merge PATCH。以上每一项均可在仓库中溯源特性文档见 changelogs 目录/docs/content/v4/changelogs/v4.1.0.md) 与 Grace Period/docs/content/v4/monitors/grace-period.md)核心实现见 confirmationThreshold.ts、maintenanceController.ts、pageSettings.ts 与 pages API 处理器/api/v4/pages/[page_path]/server.ts)。赞分享可观测性后端前端运维【免费下载链接】kenerStunning status pages, batteries included!项目地址https://gitcode.com/gh_mirrors/ke/kener点击查看免费下载相关推荐Kener 维护事件Maintenance Events完全指南自动生成、生命周期状态机与状态迁移Kener 维护事件Maintenance Events完全指南自动生成、生命周期状态机与状态迁移 Kener 的维护事件是维护窗口Maintenanc可观测性后端前端运维Kun 扩展平台 API 版本化与状态迁移六维独立版本、SemVer 承诺与事务化升级机制Kun 扩展平台 API 版本化与状态迁移六维独立版本、SemVer 承诺与事务化升级机制 导读 Kun 是本地优先的 AI Agent 工作台同时提供桌面人工智能AI Agent自主智能体桌面应用MCP ClientsKener 维护窗口Maintenance Window完整指南计划性维护的调度、事件生命周期与状态覆盖机制Kener 维护窗口Maintenance Window完整指南计划性维护的调度、事件生命周期与状态覆盖机制 维护窗口Maintenance Windo可观测性后端前端运维创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑