NexKnit 是一款基于约束开发的、完全开源免费的内网设备监控系统。它的网关只有 Python 标准库单文件部署零依赖极易审查和集成。采集器和网关之间通过 TCP 环回通信任何语言、任何工具只要能在本地发一行文本就能完成一次指标上报。云端寄生在 Cloudflare Workers 的免费额度上全程无需信用卡同时支持一键部署 。版本Core v0.2.0日期2025-05-28核心变更新增可插拔采集器体系 服务端告警详细指引见COLLECTORS_GUIDE_CN.md at nexknit-dev/nexknit-gateway快速部署见NexKnit快速部署指南三分钟白嫖 Cloudflare打造零依赖内网监控面板架构设计见NexKnit基于约束开发的开源免费监控-CSDN博客一、一键启动全栈git clone https://github.com/nexknit-dev/nexknit-gateway cd nexknit-gateway python run_gateway.py启动后自动拉起网关127.0.0.1:12345系统采集器CPU/内存/磁盘/网络HTTP 存活采集器https://example.com、https://google.comGPU 采集器如检测到 NVIDIA GPU本地存储采集器数据落盘./data/所有采集器数据自动推送到网关 → Cloudflare Worker → 仪表盘。二、四个内置采集器1. 系统采集器collectors/system.py指标指标名类型说明hostnameS主机名cpu_percentTCPU 使用率 %mem_percentT内存使用率 %disk_used_percentI磁盘使用率 %net_sent_mbT累计发送 MBnet_recv_mbT累计接收 MBload_avgL1/5/15 分钟负载uptime_secondsI运行时间秒cpu_tempTCPU 温度Linux依赖psutil可选无则模拟数据警告单独运行python collectors/system.py --host 127.0.0.1 --port 12345 --interval 5 # 输出到stdout以供调试所有的采集器均支持这个参数 python collectors/system.py --output stdout2. HTTP 存活采集器collectors/http_alive.py参数参数默认说明--urls硬编码空格分隔的 URL 列表--timeout5请求超时秒示例python collectors/http_alive.py --urls https://api.myapp.com/health https://db.internal:8080/ping --timeout 33. GPU 采集器collectors/gpu.py进程变更检测每--process-log-interval秒默认 60对比进程列表仅当有变化时发送 L 类型日志。示例python collectors/gpu.py --interval 5 --process-log-interval 60无 NVIDIA GPU 时返回S状态⚠️ GPU Unavailable不崩溃。4. 本地存储采集器collectors/local_storage.py行为继承StorageCollector每次采集的原始数据JSON追加写入--storage-path下的文件网关不可达时缓存失败数据启动时重试未发送成功的缓存示例python collectors/local_storage.py --storage-path ./data三、告警系统配置在run_gateway.py顶部ALERT_CONFIG { enabled: True, type: stdout, # stdout 或 webhook target: opsexample.com, webhook_url: https://your-server/webhook }在采集器中发送告警self.alert( levelWARNING, # INFO, WARNING, ERROR, CRITICAL titleHigh CPU, messagefCPU at {cpu_percent}%, metric_namecpu_percent, metric_valuecpu_percent )内置冷却同一(level, metric_name)5 分钟内只发一次。Webhook payloadjson{ level: WARNING, title: High CPU, message: CPU at 92%, collector: SystemCollector, metric_name: cpu_percent, metric_value: 92.5, timestamp: 2025-05-28T10:00:00, target: opsexample.com }四、二次开发最小示例自定义采集器from collectors.base import BaseCollector class MyCollector(BaseCollector): def collect(self): return {my_value: 42} def metrics_to_lines(self, metrics): return [self.format_metric(T, my_value, metrics[my_value])]集成进run_gateway.pyfrom collectors.my_collector import MyCollector my MyCollector() my.start()基类可用方法方法说明self.format_metric(type, name, value)返回T|cpu|42.5\nself.send_tcp_message(msg)原始 TCP 发送self.alert(level, title, message, metric_name, metric_value)发送告警self.set_alert_config(config)动态修改告警配置七、其余改进1. 前端更新了排序逻辑从按照Type排序更新为按照Name排序2. 前端更新了对换行符的支持现在它可以自动换行了3. 同步更新了Worker的静态页面八、功能预告考虑到告警的全套需求下一步我准备更新Worker为其附加一个自动检测节点存活的Core定时器当发现节点下线时触发告警。仓库https://github.com/nexknit-dev/nexknit-gateway一键部署 Cloudflare Worker见 README 按钮Issue 响应36 小时内