搜索/开发实时显示容器日志和指标的 Web 应用

开发实时显示容器日志和指标的 Web 应用

在修改由后端和单页前端组成、实时推送容器日志和指标的应用时使用。保持各层分工、流式传输上限以及登录和部署模式不变,把新功能贯穿所有层,运行文档中的测试,并写出简短的审查意见。

要使用这个AI规则
## 写简短的审查,只指出缺陷和阻碍问题 对变更请求进行审查以及以维护者身份回复时,采用极简模式。只报告缺陷、安全问题和阻断事项。使用简短的项目符号,相关时添加`file:line`引用,省略“优点”或“总结”等章节,并将整篇回复控制在大约10至15行。 以人类维护者的方式写作。不要使用em破折号或en破折号、“不是X而是Y”式的修辞对比、空洞的赞美开场、结尾复述、加粗的行内标签或没有实质意义的含糊措辞。可以随意使用小写和缩写形式。给出决定,说明一个理由,然后结束。 ## 请报告者先试用变更请求的构建产物 如果报告的问题已在未关闭的变更请求中修复,请报告者测试持续集成为该请求构建的产物。给出预构建镜像或软件包的准确引用,并使用`{registry}/{image}:change-{number}`之类的通用模式。 这样,报告者便能在下一个版本发布前验证修复。推荐这一途径前,应确认自动化流程确实会为每项变更请求发布一个带标签的产物。 ## 修改前先理清后端和前端的分层 将系统视为经过编译的HTTP后端与带类型的单页前端的组合。后端负责路由、身份验证、容器或工作负载客户端、实时日志与指标流、操作、通知以及远程智能体通信。前端负责基于文件的视图、可复用组件、响应式存储、流式可组合函数、路由、本地化和用户偏好。 明确支持每一种已记录的部署模式,包括独立或多主机服务、集群编排和远程智能体运行。不要假设在一种客户端实现中有效的变更也会在所有后端中有效。 保持主要依赖方向清晰:`HTTP handlers -> host service -> per-host service -> domain client -> runtime implementation`。 ## 按文档中的目标完成构建和测试 安装依赖项,并运行证书、架构或协议代码的生成目标,以完成项目设置。需要协调后端与前端热重载时,使用完整开发任务;需要隔离问题时,分别运行两个监视任务。 先构建前端资源,再将其嵌入完整的后端构建中。为前端分发包、整个应用以及可部署镜像保留彼此独立的目标。使用预览目标在本地检查接近生产环境的构建。 通过已记录的目标运行后端测试、前端单元测试、类型检查和浏览器集成测试。对于受时间戳影响的前端测试,使用`TZ=UTC`;监视模式只用于本地反复开发期间。 ## 保持后端分层,用共享客户端接口实现 让HTTP路由和流式处理器位于主机服务及客户端服务之上。将运行时特定操作置于共享领域客户端接口之后,再为每种受支持的容器、集群或远程智能体后端实现该接口。 将身份验证提供程序、领域模型、事件解析、通知评估和通知传送与传输处理器分离。将命令行解析和多主机编排保留在支持层中,不要在处理器中重复实现。 添加新的工作负载操作时,应更新领域客户端接口、每个适用的运行时实现、单主机服务包装器以及包含相应路由的HTTP处理器。不得为了让一种部署模式通过而绕过某一层。 ## 让前端存储和日志条目类型各司其职 让路由视图、自动导入的组件、响应式存储、流式可组合函数和应用插件各自承担既定职责。将后端渲染的HTML所注入的配置视为不可变。将持久化偏好置于响应式存储抽象之后。 将单行文本、结构化对象和分组的多行消息表示为不同的日志条目类型。使用共享消息别名,而不是反复声明联合类型;通过工厂创建条目,由工厂根据每个事件选择正确类型。 跨路由或工作负载变更复用的组件必须刷新所有派生状态。如果图表通过只修改最后一个柱形来优化更新,应公开完整重新计算方法,并在替换整个数据序列时调用该方法。 ## 遵守日志和指标流的固定上限 日志、生命周期事件和指标流使用服务器发送事件,交互式附加或执行会话使用WebSocket连接。会改变工作负载状态的操作应通过明确的HTTP请求发送,而不是通过只读流发送。 将收到的前端事件缓冲250毫秒,但最迟应在1,000毫秒后刷新。批量处理响应式更新;显示的消息超过400条时,按照查看器约定替换最早的条目或为其添加标记。 在最多包含300项的滚动窗口中跟踪指标历史。使用alpha为0.2的指数移动平均值平滑指标,依据允许的核心数或主机核心数对CPU值进行归一化,并将内存百分比值与绝对值保持为不同数据。 按照可用显示宽度对图表进行降采样。即使常规时钟更新只修改最后一个柱形,在切换工作负载等操作替换整个数据序列时,也必须触发完整重新计算。 ## 分别处理每种登录方式和部署模式 将无身份验证、本地文件身份验证和正向代理身份验证作为不同模式提供支持。本地身份验证使用带有效期的签名令牌,验证已配置的用户文件,并让基于角色的授权独立于身份提供程序。 在独立模式下,通过支持重试的管理器组合本地与远程客户端。在集群模式下,通过编排API发现节点,并连接到每个节点上的智能体。在集群原生模式下,通过相应平台的API实现同一个领域客户端接口。在远程智能体模式下,要求使用证书验证的传输。 将模式选择保留在应用入口点。在为每个适用模式定义行为,或明确拒绝不受支持的模式之前,该功能都不算完整。 ## 把新功能贯穿所有相关的层 添加新的HTTP路由时,应注册路由、实现处理器、通过主机服务解析目标,并返回结构化数据或建立预期的流。添加新的日志视图时,应添加路由视图、创建流式可组合函数、构建带适当筛选条件的API URL、管理缓冲、返回响应式消息与控制方法,并复用既有查看器。 添加新指标时,应扩展后端统计类型、提取并计算数值、更新协议架构、重新生成协议代码,并在界面需要该指标时,于前端模型中公开相应字段。现有事件流应承载此次更新,不应再建立一条并行传输通道。 添加新的通知通道时,应实现调度器接口,在调度器工厂中注册该实现,添加配置表单,并保留持久化规则与警报状态的行为。 ## 限制远程工具并发,只重试临时故障 在远程调度器完成配置之前,不得连接。使用双向流执行工具发现和调用,通过单一注册表分派调用,并利用加权信号量将并发执行限制为五项。 对于暂时性故障,使用带抖动、从1秒增加到30秒的指数退避进行重新连接。如果权限拒绝响应表明凭据无效或相应方案不可用,则永久停止重试。只缓存一次不可变的工具定义,使远程操作被禁用时产生的额外开销可以忽略不计。 添加工具时,应定义其名称、说明和参数架构;将响应类型加入协议结果联合类型;重新生成协议代码;注册分派分支;在主机服务接口之后实现工具;并添加范围明确的测试。 ## 按类型区分日志事件,不堆积地实时推送 通过读取标头和有效载荷来解析多路复用的运行时流,然后将每个原始事件分类为结构化数据、分组的多行事件或单行事件。使用明确的模式提取严重级别,将领域事件序列化,并通过实时流传送。 对于远程智能体,将领域客户端调用转换为协议请求,委托给本地运行时客户端处理,并将响应转换回领域模型。保留日志、指标和生命周期事件的流式行为,不要在内存中收集没有上限的结果。 按级别、查询或正则表达式进行筛选时,必须保留明确的结果上限。工作负载操作必须继续位于明确的启用门槛之后。 ## 做可重复的测试,并查看实时连接来调试 运行后端测试时启用竞争检测器。一致使用项目规定的断言库,以UTC运行前端测试,并使用所需的服务设置执行浏览器集成测试。将构建失败视为代码缺陷前,先重新生成所需证书和协议产物。 使用未嵌入资源进行开发时,启用文件系统服务和协调热重载。后端变更应重新启动后端监视任务,前端变更则应使用模块替换,而不强制完整重启。 调试时,应启用后端调试日志,使用浏览器开发工具检查前端状态,并在网络面板中检查服务器发送事件和WebSocket连接。审查最终差异,确保生成的文件和自动编辑没有掩盖无关变更。