89 Commits
Author SHA1 Message Date
dushixiang 0fa920e972 refactor: 重构 WebSocket 可靠投递会话模型 2026-08-31 21:52:03 +08:00
dushixiang 787fa6918d feat: WebSocket 消息可靠投递(纯内存事件队列)
- agent 数据写入增加 10s 超时,写失败立即断连重连,消除无超时写卡死期间快照被覆盖的静默丢失
- 事件类消息(SSH登录/防篡改/指令响应/监控检测)改走内存 outbox:seq + 服务端累计 ack + 断线重放,上限 1024 条溢出丢最旧,重启清空(可接受)
- 注册请求携带 BootID 会话标识:探针重启后 seq 从 1 重新分配,服务端据此重置确认位点,避免新消息被旧位点误判为重复而丢弃
- server 读循环与处理解耦(per-agent 有序队列 + 串行 worker),慢处理不再阻塞 TCP 读取,队列满断连由探针重放兜底
- 修复探针快速重连时旧连接误注销新连接的竞态(此前会闪断新连接)
- IsAgentEnabled 加 3s TTL 缓存,禁用立即失效;pong 在线状态写库去抖(首次 + 5 分钟心跳刷新)
- VM 写超时默认 30s -> 10s,快速失败配合重放兜底

新旧版本双向兼容:注册响应 Reliable 字段协商,旧 server 下探针自动降级直发
2026-08-30 22:30:41 +08:00
dushixiang f9f3466b4a fix: 修复跨平台服务自动重启配置 2026-08-25 11:21:07 +08:00
dushixiang a4f7c82de6 更新包路径 2026-08-12 18:59:29 +08:00
dushixiang 07bce71bbe fix: clean up agent data on uninstall 2026-07-12 21:38:47 +08:00
dushixiang 3c4f978395 Refactor agent metrics collection and delivery 2026-07-12 21:00:04 +08:00
dushixiang 828c0b54ca Remove agent metrics buffer 2026-07-08 22:33:43 +08:00
dushixiangandClaude Opus 4.7 fe388df67d Windows 下 ICMP 探测改用 ping.exe,避开 raw socket 权限限制
pro-bing 在 Windows 上必须 SetPrivileged(true) 走原始套接字,普通账号
没有权限会直接失败。按平台拆分实现:unix 继续走 pro-bing,windows 调
系统 ping 并以 TTL= 作为跨语言锚点解析输出;同时校验 target 防止被
ping.exe 当作 flag 解析。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 23:39:40 +08:00
dushixiangandClaude Opus 4.7 c431f300bc 新增实时监控模式,agent 1s 并行采集 + 前端滑动窗口
agent
- 移除 collector.interval 配置项;按指标类型内置节奏:cpu/memory/network/
  disk_io/gpu/network_connection 1s,temperature 5s,disk 30s,host 60s
- doCollectAndSend 改为并行执行本 tick 到期的采集器,避免串行累计耗时
  超过 1s 节奏;每个 goroutine 加 recover 兜底,单点 panic 不拖垮整 tick

server
- LatestMetrics 加 sync.RWMutex + Update/Snapshot 方法,HandleMetricData
  所有写入走 Update;GetLatestMetrics 返回 Snapshot,handler 在副本上
  sanitize,修复 marshal 时与 ws 写入的 data race(go test -race 验证)
- HandleMetricData defer Set 缓存项,每次上报刷新 TTL;host case 也走
  Update,不再 1 小时后失效
- LatestMetrics.Timestamp 用服务端 time.Now(),agent 时钟倒拨不会冻结
  前端实时图;Timestamp/DiskIOSummary 字段补到 LatestMetrics
- AutoStep 新增 r ≤ 5m → 1s 档;timeRangeMilliseconds 加 2m

frontend
- 详情页加"实时"档位(默认),1s 拉 latestMetrics + 1m 历史播种 + 滑动
  2 分钟窗口;快图表(CPU/Memory/Network/DiskIO/NetworkConnection)走
  useLiveBuffer 追加,慢图表(GPU/Temperature/Monitor)保留 refetch
- useLiveBuffer:seed 不再覆盖已追加的 livePoint;resetKey 处理切网卡 /
  切 agent 时的语义复位
- formatChartTime live 档位精确到秒;修复 1d/24h 仅显示 HH:mm 跨夜歧义
- 慢图表用 React.memo,阻断 1Hz 节奏的级联重渲染
- GpuChart 修复 utilization/temperature 时间戳错位时温度点丢失

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 23:18:50 +08:00
dushixiang e115d828ab 重构数据采集打包,修改为统一打包发送 2026-05-05 17:46:32 +08:00
yumusb cfde75e21e fix: 磁盘采集支持多硬盘,修复只采集系统盘的问题
- 默认采集所有真实存储设备而非仅根分区
- 通过设备路径白名单识别真实磁盘(块设备/网络存储)
- 排除 tmpfs、proc、cgroup 等虚拟文件系统
- 排除 macOS APFS 冗余系统卷(Preboot/VM/Update 等)
2026-04-30 14:37:58 +08:00
yumusbandClaude Opus 4.7 c2e64804f3 fix: GPU 采集器 nvidia-smi 调用添加 15 秒超时
nvidia-smi 在 GPU 驱动异常时可能无限挂起,导致整个 metricsLoop 卡死。
使用 exec.CommandContext 为 initStatic 和 collectDynamic 中的 nvidia-smi
调用添加 15 秒超时保护。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-20 14:43:16 +08:00
yumusbandClaude Opus 4.7 e0c9fc5b25 fix: 修复 Agent 卡死不触发重连的问题
Agent 在连接断开后完全卡死 17 小时,根因分析如下:
1. 并发写竞争:pingLoop 直接使用 rawConn.WriteControl 与 metricsLoop
   的 safeConn.WriteJSON 竞争同一个 gorilla websocket 内部锁
2. 连接写失败被吞掉:outboundWriter.WriteJSON 写失败时返回 nil,
   metricsLoop 感知不到连接错误,不会触发重连
3. 采集器无超时保护:任何采集器阻塞都会冻结整个 metricsLoop

修复:
- safeConn 新增 WriteControl 方法,pingLoop 改用 safeConn 写入
- outboundWriter.WriteJSON 写失败时返回真实错误
- collectAndSendAllMetrics 增加 30 秒全局超时保护
- 连接写失败视为连接异常,返回错误触发重连
- 新增采集耗时监控日志(耗时超过 500ms 时记录)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-20 14:43:06 +08:00
yumusbandClaude Opus 4.6 ab22f9bd57 fix: 修复指标采集空数据时误报0%的问题
当磁盘或网卡采集不到有效数据时,空列表会被写入缓存导致
磁盘占用率和网络流量显示为0%,与真实值混淆。

修复方案:
- Agent端:空列表不发送,与GPU/温度采集器保持一致
- Server端:空数据时跳过缓存更新,保留上一次有效值

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 20:30:54 +08:00
yumusbandClaude Opus 4.6 e91d1a106b fix: Agent 安装时自动清理已存在的旧服务
重新安装 Agent 时如果服务已存在会报错
"Init already exists: /etc/systemd/system/pika-agent.service"

修改 Install() 方法,判断错误类型:
- 如果是"服务已存在"错误,先停止卸载旧服务再重装
- 其他错误(如权限不足)直接返回

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-10 16:42:08 +08:00
yumusb 35becefe1e Support metric bundles and enable WS compression
Add support for bundling metrics and enable WebSocket compression. Introduces protocol.BundlePayload and MessageTypeBundle, and handles bundled messages on the server side (handleBundleMessage) by iterating items and forwarding each to metricService.HandleMetricData. On the agent side, add bundleWriter to collect outgoing MetricsPayloads, switch collectors to write into the bundle writer, and send a single bundle message when items exist. Also enable compression on the WebSocket upgrader and create a custom websocket.Dialer (with Proxy, HandshakeTimeout and EnableCompression). Minor logging/messages and import adjustments included.
2026-04-08 11:26:00 +08:00
dushixiang 1a64b27af6 移除原心跳配置和业务,改为使用 WebSocket Ping Pong 实现,并增加超时逻辑 2026-02-25 14:11:22 +08:00
dushixiang 0032e42905 优化探针重连逻辑 2026-02-24 19:48:28 +08:00
dushixiang d40fc1314f 1. 修改注册探针的服务端地址为手动填写
2. 优化 Linux 系统服务模板
3. 优化首页流量展示方式
2026-02-10 19:56:46 +08:00
dushixiang 31619096b8 修改所有上报断线缓存 + 最多保留 24 小时 2026-02-07 20:15:40 +08:00
dushixiang e82046ac89 强完善默认的虚拟网卡过滤规则 fix #64 2026-02-07 15:30:30 +08:00
Hoin 71df7fb583 fix(agent): 排除 tap 开头的虚拟接口以避免误采集
在默认网络接口排除规则和示例配置中添加对 tap 开头接口的排除,这些是 PVE/KVM 虚拟机使用的虚拟网卡,不应纳入网络指标采集范围。
2026-01-31 11:04:43 +08:00
yumusb 1ef4a7d2f7 兼容 ubuntu 系的 计划任务采集、ssh登录日志的解析 2026-01-20 19:22:47 +08:00
dushixiang be54ef2d31 增加公网 IP 采集和网卡 IP 展示 2026-01-17 16:24:59 +08:00
榆木 9ae1fea7d8 下载地址增加 key 认证
agent二进制下载地址增加 key 认证,防止刷流量
2026-01-11 19:19:58 +08:00
榆木 fd7a083139 网卡IP采集过滤本地单播地址
网卡IP采集过滤本地单播地址,例如 fe80::f816:3eff:fe68:fb57/64、fe80::5054:ff:fe74:1d69/64 等
2026-01-11 17:55:49 +08:00
dushixiang 602a36df01 移除 SSH 登录事件中的登录方法字段 2026-01-11 10:14:48 +08:00
dushixiang ede5cc4f36 替换 ssh 登录事件采集为 unixgram 通信 2026-01-10 22:44:10 +08:00
dushixiang c064d86c68 升级 bolt 为 etcd 版本 2026-01-10 22:09:43 +08:00
dushixiang e7981bb69e 移除遗留的 HostMetric 相关代码 2026-01-10 10:53:45 +08:00
dushixiang 1ffa20045c 增加 agent 数据缓存功能,避免长时间连不上服务端导致数据丢失。 2026-01-09 22:28:56 +08:00
dushixiang 3cf4d7e5a9 优化目录保护 2026-01-09 21:53:44 +08:00
dushixiang 911c105414 调整目录保护功能和 SSH 登录监控 2026-01-05 21:44:20 +08:00
dushixiang 7386c6e8dd 完成 SSH 登录监控 2026-01-03 12:01:49 +08:00
dushixiang 9d14a8cba5 增加 SSH 登录监控 2026-01-03 11:05:23 +08:00
dushixiang 81691fb864 修复 Linux 环境下探针重启时间过长的问题 2025-12-30 20:45:12 +08:00
dushixiang 6c499e2464 修改客户端日志为 slog 2025-12-30 20:00:35 +08:00
dushixiang b946dea662 增加 id 迁移的补丁 2025-12-25 23:02:29 +08:00
dushixiang 6695f6e4a6 增加 id 迁移的补丁 2025-12-25 22:55:25 +08:00
dushixiang 502de9d816 优化探针卸载&服务端删除探针自动卸载自身 2025-12-25 19:24:59 +08:00
dushixiang 7944fb09dc 优化探针获取 home 目录 2025-12-25 19:12:40 +08:00
dushixiang 53c771d965 优化代码 2025-12-14 22:17:39 +08:00
dushixiang 74179374df 优化代码 2025-12-14 21:15:11 +08:00
dushixiang 21d5c7a717 完成服务监控后端重构 2025-12-13 11:55:31 +08:00
dushixiang f95b75b832 重构服务监控数据 2025-12-12 23:24:43 +08:00
dushixiang 9c644bb5b5 切换时序数据存储为victoriametrics 2025-12-12 21:37:58 +08:00
yii 3c99526fc6 修复部分设备读取温度失败导致的忽略全部设备温度问题 2025-12-09 16:21:45 +08:00
yii 524dbe65e6 新增NPU温度识别 2025-12-09 16:13:31 +08:00
yii c7da186eef 修复探针温度类型识别错误 2025-12-09 15:59:25 +08:00
dushixiang 93fb4fc29f 优化服务监控,修复修改探针范围无效的问题 2025-12-07 18:11:15 +08:00