可观测性后端前端运维【免费下载链接】kenerStunning status pages, batteries included!项目地址https://gitcode.com/gh_mirrors/ke/kener点击查看免费下载Kener v4.0.22 是一次聚焦「监控告警与维护生命周期」的功能性迭代它打破了告警配置与单个监控绑定的限制让一条告警规则可以同时作用于多个监控同时为维护事件引入了完整的「创建 → 提醒 → 开始 → 结束」订阅通知链路并把即将到来的维护展示到公开状态页。本文基于官方 Changelog结合仓库源码迁移脚本、控制器、调度器、探测服务逐项拆解新特性与底层实现帮助你理解如何配置、如何升级以及每个改动背后的数据模型与调用链。版本概览v4.0.22 带来了什么v4.0.22 的更新可以归纳为四个维度新功能多监控告警配置Multi-monitor alert configurations、状态页展示即将到来的维护Upcoming maintenances、维护订阅通知Maintenance subscriber notifications、新增 Analytics 文档页改进Google Tag Manager 支持自定义 Transport URL 与 Script Host、TCP/API 监控错误处理增强、分组监控的「Included Monitors」显示数量、捷克语与斯洛伐克语翻译更新Bug 修复修复自定义 CSS/字体文档链接、清理文档布局中的遗留svelte:head与过期元数据、移除knip.json改用默认 knip 配置安全通过overrides修复多个关键/高危漏洞并升级sveltejs/kit与svelte版本。[!NOTE] 官方 Changelog 特别提醒v4.0.21 中针对 sqlite3 的迁移脚本存在问题本版本已修复。若你正在使用 SQLite 并从旧版本升级请务必升级到 v4.0.22 或更高版本后再执行迁移。新功能一多监控告警配置为什么需要这个能力在 v4.0.22 之前每一条告警配置alert config通过monitor_alerts_config.monitor_tag外键严格绑定到单个监控。若你希望 5 个监控共用同一套「状态 DOWN、延迟超阈值」的告警规则就必须为每个监控重复创建 5 条几乎完全相同的配置——维护成本高且后续修改阈值时需要逐条同步极易出现漏改。v4.0.22 将这一关系重构为多对多many-to-many一条告警配置可以同时关联多个监控一次创建、一处修改、全局生效。前端交互变化创建/编辑告警时原先的单监控下拉框替换为可搜索的多选 UIsearchable multi-select你可以一次性勾选多个监控**告警日志Alert logs**现在会显示每条告警具体由哪个监控触发——这在一条配置覆盖多个监控时至关重要否则你无法判断故障来源。数据模型与迁移实现本次升级由迁移脚本 migrations/20260325120000_multi_monitor_alerts.ts 完成核心动作包括新建联结表monitor_alerts_config_monitors以(monitor_alerts_id, monitor_tag)为复合主键分别外键关联monitor_alerts_config.id与monitors.tag且均带ON DELETE CASCADE——删除告警配置或监控时联结记录自动清理为monitor_alerts_v2新增monitor_tag列每次触发firing的告警记录都记录是哪个监控引发的支撑按监控维度的告警历史查询数据回填将既有monitor_alerts_config.monitor_tag全部复制进联结表并用同样的来源回填monitor_alerts_v2.monitor_tag保证历史告警记录完整保留解除旧的一对一约束删除monitor_alerts_config.monitor_tag的外键并置为可空。脚本对 SQLite 做了特殊处理——由于 SQLite 无法内联删除外键约束/改列采用「关外键 → 建新表 → 拷贝数据 → 重命名」的表重建方案新增复合索引idx_monitor_alerts_v2_config_tag_status (config_id, monitor_tag, alert_status)加速按配置监控状态维度的告警查询。迁移脚本同时提供了完整的down回滚逻辑将联结表首条记录回填到monitor_alerts_config.monitor_tag、删除无监控关联的配置、重建外键并删除联结表保障可逆迁移。源码层的校验与调用链多监控的读写由 src/lib/server/controllers/monitorAlertConfigController.ts 负责几个值得关注的点创建/更新校验validateMonitorAlertConfigInputalert_for仅允许STATUS | LATENCY | UPTIMEseverity仅允许CRITICAL | WARNINGalert_value依类型校验——STATUS必须是DOWN/DEGRADED/UP之一、LATENCY必须是正数毫秒、UPTIME必须在 0–100 之间failure_threshold/success_threshold必须是大于等于 1 的整数创建流程CreateMonitorAlertConfig要求monitor_tags至少一个且逐一调用db.getMonitorByTag确认监控存在随后写入monitor_alerts_config主记录再通过db.addMonitorsToAlertConfig批量写入联结表更新流程UpdateMonitorAlertConfigmonitor_tags更新时通过db.replaceAlertConfigMonitors整体替换联结关系避免脏数据残留告警触发记录CreateMonitorAlertV2会携带monitor_tag参数配合新增的monitor_tag列实现「谁触发了这条告警」的可追溯。新功能二状态页展示即将到来的维护v4.0.22 将Upcoming scheduled maintenance即将到来的计划维护直接展示在公开页面让访客在维护发生前就获得预期通知。展示位置包括首页home page自定义页面路由custom page routes单个监控详情页individual monitor detail pages。显隐开关与默认值可见性由既有的Event Display Settings → Maintenances → Upcoming开关控制位于Manage → Site Configurations。默认配置在 src/lib/server/db/seedSiteData.ts 中{ eventDisplaySettings: { showInlineEvents: false, maintenances: { enabled: true, ongoing: { show: true }, past: { show: true, maxCount: 5, daysInPast: 7 }, upcoming: { show: true, maxCount: 5, daysInFuture: 7 } } } }即默认展示未来7 天内最多5 条即将到来的维护并且可以通过管理后台逐项覆盖。底层查询逻辑仪表盘数据组装在 src/lib/server/controllers/dashboardController.ts只有满足showInlineEvents maintenances.enabled maintenances.upcoming.show时才会把 upcoming 维护注入页面数据具体 SQL 查询位于 src/lib/server/db/repositories/maintenances.ts 的getUpcomingMaintenanceEventsForMonitorList通过maintenance_monitors联结限定当前监控集合或匹配maintenances.is_global YES的全局维护仅取maintenances.status ACTIVE且事件状态为SCHEDULED / READY的记录即尚未开始的维护时间窗口为当前时间 start_date_time 未来 N 天按开始时间升序并LIMIT数量上限。页面渲染则由 src/routes/(kener)/page.svelte/page.svelte#L196-L200)、src/routes/(kener)/[page_path]/page.svelte 复用统一的 MaintenanceItem.svelte 组件完成。新功能三维护订阅通知这是本版本最具工程价值的新特性维护事件现在可以在生命周期的每个阶段触发订阅者通知让关注者从「创建」到「结束」全程感知。四个通知阶段事件类型发送时机默认值Created新事件生成时OffReminder事件进入 READY 状态时OnStarted事件进入 ONGOING 状态时OnEnded事件进入 COMPLETED 状态时On**Reminder buffer提醒缓冲默认 1 小时**决定 READY 状态转换与提醒通知提前多久发生即事件开始时间前 1 小时事件进入 READY 并触发 reminder 通知。该参数通过Manage → Site Configurations → Maintenance Notification Settings配置默认值见 seedSiteData.ts{ globalMaintenanceNotificationSettings: { event_types: { created: false, reminder: true, started: true, ended: true }, reminder_buffer_hours: 1 } }事件状态机维护事件共五种状态SCHEDULED → READY → ONGOING → COMPLETED另有CANCELLED分支。状态判定函数determineEventStatus位于 maintenanceController.tsCOMPLETEDnow end_date_timeONGOINGnow start_date_time now end_date_timeREADYstart_date_time - now reminderBufferSeconds默认 3600 秒SCHEDULEDstart_date_time - now reminderBufferSeconds。状态流转与通知推送的调用链状态推进由UpdateMaintenanceEventStatusesmaintenanceController.ts周期性执行四个步骤对应四个通知阶段SCHEDULED → READY查询getScheduledEventsStartingSoon进入提醒缓冲窗的事件更新状态后若event_types.reminder开启则通过subscriberQueue.push推送「is starting in X」通知timeUntilStart由date-fns的formatDistanceStrict计算补偿逻辑对错过 READY 窗口但已开始的 SCHEDULED 事件直接推进到 ONGOINGcatch-up避免状态机卡死并视event_types.started推送「is now in progress」READY → ONGOING进入getReadyEventsInProgress的事件推进为 ONGOING 并推送 started 通知ONGOING → COMPLETEDgetOngoingEventsCompleted命中后推进为 COMPLETED视event_types.ended推送「has been completed」。这些通知统一通过maintenanceToVariables组装模板变量含维护标题、监控名称列表、状态文案、站点 URL再投递到subscriberQueue最终落到邮件/Webhook 等订阅渠道。调度器的配合src/lib/server/schedulers/maintenanceScheduler.ts每小时运行一次基于 RRULEiCalendar 规则支持FREQWEEKLY;BYDAYSU等为未来 7 天生成维护事件跳过COUNT1的一次性维护它在创建时即时生成事件并按开始时间去重避免重复创建src/lib/server/schedulers/appScheduler.ts在调度巡检中调用UpdateMaintenanceEventStatuses()驱动上述状态机。也就是说一次性维护由创建动作即时落库周期性维护由每小时调度器预生成未来 7 天的事件随后状态机与通知链路在事件临近时自动运转。新功能四Analytics 文档页v4.0.22 为分析集成新增了完整的官方文档页覆盖Google Analytics、Plausible、Mixpanel、Amplitude、Microsoft Clarity、Umami、PostHog七个提供商仓库中实际还包含 OpenPanel详见 Analytics 文档/docs/content/v4/analytics.md)。文档要点启用方式Manage → Analytics Providers选择提供商、填写字段、将 Status 设为Enable并保存改动即时生效、无需重启且多个提供商可同时启用实现机制启用后 Kener 通过/capture.js向每个公开状态页响应注入跟踪脚本所有值在注入前都会转义防止特殊字符破坏其他提供商的脚本每个提供商附有字段说明表与获取入口例如 GA 的 Measurement ID 位于Admin → Data Streams → WebClarity 的 Project ID 取clarity.ms/tag/后的值。改进项深度解析Google Tag ManagerTransport URL 与 Script HostGoogle Analytics 集成新增两个可选字段配置于Manage → Analytics Providers → Google AnalyticsTransport URL自定义分析上报端点transport_url用于配合自建代理绕过广告拦截器Script Host自定义 gtag.js 脚本加载地址默认googletagmanager.com。对应片段实现在 src/lib/snippets/capture/google-tag-manager.jsvar gtagConfig {}; var transportUrl {{transport_url}}; if (!!transportUrl) { gtagConfig.transport_url transportUrl; } gtag(config, {{id}}, gtagConfig); // ... var scriptHost {{script_host}} || https://www.googletagmanager.com/gtag/js?id{{id}}; loadJS(scriptHost, initJS, document.getElementsByTagName(head)[0]);官方文档建议广告拦截器通常会屏蔽googletagmanager.com与google-analytics.com可通过自托管的 Nginx 反向代理如 Saki把 Script Host 与 Transport URL 指向自有域名示例为 Script Hosthttps://你的代理/tg/script.js?idG-XXXXXXXXXX、Transport URLhttps://你的代理/an/。若字段留空则回退到 Google 默认端点。TCP 与 API 监控错误处理增强TCP 监控src/lib/server/services/tcpCall.ts对hosts列表中每个主机的连接结果逐一探测将所有失败主机的连接消息收集进数组如Host h1:80 is timeout最终以分号连接合并为一条综合错误信息errorMessages.join(; )上报——多主机场景下不再丢失任一连接失败细节。API 监控src/lib/server/services/apiCall.ts的改动有三点HTTPS agent 连接复用通过AxiosProxyConfig创建带 keep-alive 的 HTTPS agent参数为{ keepAlive: true, keepAliveMsecs: 30000, maxSockets: 50, maxFreeSockets: 10, timeout }——长连接与 socket 池化显著降低高频探测下的握手开销超时判定更精确apiCall.ts当错误code ECONNABORTED或消息包含timeout时判定为超时并统一改写错误消息为Request timed out最终结果类型标记为GC.TIMEOUT见 apiCall.ts避免将连接中止与普通网络错误混为一谈eval 错误截断apiCall.ts当自定义 eval 函数抛出异常时错误消息超过200 字符会被截断并追加省略号防止超长异常信息污染监控结果存储。「Included Monitors」显示数量分组监控group monitor的弹层及相关组件现在会直接展示包含的监控数量例如「Included Monitors (5)」一眼即可感知组规模。实现上通过 i18n 的%count占位符动态渲染涉及组件包括 GroupMonitorPopover.svelte、MonitorBar.svelte、MonitorOverview.svelte所有语言文件均已同步更新。捷克语与斯洛伐克语翻译更新了cs.json与sk.json的翻译字符串新增与修正并存。Bug 修复与代码卫生修复自定义 CSS 与自定义字体文档指南的链接指向错误移除文档布局中无用的svelte:head元素与过期的元数据删除knip.json项目回归使用 knip 的默认配置。安全补丁依赖 overrides 与版本升级本版本通过 package.json 中的overrides强制锁定了 8 个存在漏洞的传递依赖版本修复关键critical与高危high级漏洞overrides: { fast-xml-parser: ^5.5.6, rollup: ^4.59.0, undici: ^7.24.0, minimatch: ^10.2.3, devalue: ^5.6.4, dompurify: ^3.3.2, cookie: ^0.7.0, mailparser: ^3.9.3 }同时将sveltejs/kit升级到^2.53.3、svelte升级到^5.53.5。对于安全敏感的自托管部署建议升级后执行一次完整的依赖重装与构建验证。升级与兼容性建议先读迁移说明升级到 v4.0.22 时20260325120000_multi_monitor_alerts迁移会自动把既有单监控告警配置迁移到新的多对多联结表历史monitor_alerts_v2告警记录也会回填monitor_tag——无需手工迁移数据SQLite 用户务必升级v4.0.21 的 sqlite3 迁移存在缺陷本版本已通过表重建方案修复PRAGMA foreign_keys关闭/恢复 新表拷贝 重命名请确保实际运行的版本包含本修复告警配置入口变化创建/编辑告警时改为多选监控存量配置自动兼容若某个告警配置被删除其联结记录随ON DELETE CASCADE一并清除维护通知默认行为Created 默认关闭Reminder/Started/Ended 默认开启Reminder buffer 默认 1 小时——可按团队习惯在站点配置中调整依赖安全升级后建议执行npm install或对应包管理器以应用 overrides并运行npm run check与测试套件验证整体健康。以上所有改动均可在仓库源码中直接验证数据模型见 迁移脚本告警业务逻辑见 monitorAlertConfigController.ts维护生命周期见 maintenanceController.ts 与 maintenanceScheduler.ts监控探测见 apiCall.ts 与 tcpCall.ts。赞分享可观测性后端前端运维【免费下载链接】kenerStunning status pages, batteries included!项目地址https://gitcode.com/gh_mirrors/ke/kener点击查看免费下载相关推荐终极Vimium使用指南如何像黑客一样掌控你的浏览器终极Vimium使用指南如何像黑客一样掌控你的浏览器 Vimium是一款让你能够像使用Vim编辑器一样高效操作浏览器的扩展程序被称为The hacker开发工具Kener 告警机制深度解析从监控信号到通知投递的全链路Alerting OverviewKener 告警机制深度解析从监控信号到通知投递的全链路Alerting Overview 本文基于 Kener 官方文档 src/routes/ doc可观测性后端前端运维SigNoz监控告警多通道通知与告警抑制机制SigNoz监控告警多通道通知与告警抑制机制 概述 在现代微服务架构中有效的监控告警系统是保障应用稳定性的关键。SigNoz作为开源的可观测性平台提供了强可观测性指标监控链路追踪日志分析后端告警上一篇2025终极指南Azul桌面GUI框架路线图与功能革新计划下一篇K3d终极指南深入解析K3s在Docker中的运行机制与核心组件创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?