Nexknit Gateway v0.2.0:全新采集器与告警系统上线
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.com)GPU 采集器(如检测到 NVIDIA GPU)
本地存储采集器(数据落盘
./data/)
所有采集器数据自动推送到网关 → Cloudflare Worker → 仪表盘。
二、四个内置采集器
1. 系统采集器collectors/system.py
指标:
| 指标名 | 类型 | 说明 |
|---|---|---|
hostname | S | 主机名 |
cpu_percent | T | CPU 使用率 % |
mem_percent | T | 内存使用率 % |
disk_used_percent | I | 磁盘使用率 % |
net_sent_mb | T | 累计发送 MB |
net_recv_mb | T | 累计接收 MB |
load_avg | L | 1/5/15 分钟负载 |
uptime_seconds | I | 运行时间秒 |
cpu_temp | T | CPU 温度(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 列表 |
--timeout | 5 | 请求超时秒 |
示例:
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": "ops@example.com", "webhook_url": "https://your-server/webhook" }在采集器中发送告警
self.alert( level="WARNING", # INFO, WARNING, ERROR, CRITICAL title="High CPU", message=f"CPU at {cpu_percent}%", metric_name="cpu_percent", metric_value=cpu_percent )内置冷却:同一(level, metric_name)5 分钟内只发一次。
Webhook payload:
json
{ "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": "ops@example.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.py
from collectors.my_collector import MyCollector my = MyCollector() my.start()基类可用方法
| 方法 | 说明 |
|---|---|
self.format_metric(type, name, value) | 返回"T|cpu|42.5\n" |
self.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 小时内
