GOST Manager 监控实战:用零依赖 SQLite 本地监控轻松守住你的隧道服务器
GOST Manager是一款基于菜单驱动的 Bash 运维工具,用于在 Ubuntu 服务器上安装官方 GOST 并管理多路 Direct Mode 隧道。它内置的Monitoring Lite监控模块采用SQLite作为本地历史存储,纯 Python 标准库实现、零第三方依赖,让你无需部署任何额外组件,就能在终端里看清隧道服务器的实时负载、网络吞吐与 GOST 服务健康度。
下面这篇 GOST Manager 监控实战教程,从原理到日常操作,带你一步步用好这个零依赖的 SQLite 本地监控体系。
监控原理:本地、可选、不碰流量
Monitoring Lite 只回答四个有边界的问题,见 docs/MONITORING-V0.2.md:
- 主机是否资源受限(CPU、内存、磁盘、文件句柄)?
- 外部或回环网络计数器是否异常?
- 当前的 Direct Mode GOST 服务与监听是否健康?
- 采集器本身是否最新、可靠?
关键设计原则:
- 本地:数据库就在本机
/var/lib/gost-manager/metrics.sqlite3,不依赖任何外网、NGINX 或远程探针。 - 可选:不开监控完全不影响隧道运行。
- 只读:监控模块无法启动、停止、重启或改配任何 GOST 流量服务,见 monitoring/。
快速上手:一条命令打开监控
GOST Manager 安装时会自动部署监控组件并启动采集服务(gost-monitor-collector.service)。日常查看只需:
sudo gost-manager进入主菜单后选择10) Monitoring,即打开监控工作流:
1) Live resources 2) Last 10 minutes 3) Last 30 minutes 4) Last 1 hour 5) Services and tunnels 6) Collector status 7) Advanced tools 0) Back除了菜单,还提供了直连命令,适合脚本化或 SSH 快捷查看:
gost-monitor snapshot gost-monitor live gost-monitor summary --window 10m gost-monitor-admin status gost-monitor-admin maintenance六大监测对象一览
gost-monitor snapshot的输出固定包含HOST / NETWORK / TCP/CONNECTIONS / GOST SERVICES / TUNNELS / COLLECTOR六个区块,覆盖范围如下:
| 区块 | 关注内容 |
|---|---|
| HOST 主机 | CPU 与派生百分比、1/5/15 分钟负载、内存与 swap、根/监控文件系统、diskstats、系统文件句柄容量 |
| NETWORK 网络 | 每网卡 RX/TX 字节与包速率、错误与丢包、接口状态/速率/MTU、外部与回环分别统计 |
| TCP/CONNECTIONS 连接 | ESTABLISHED、SYN-SENT、SYN-RECV、CLOSE-WAIT、TIME-WAIT、重传、监听丢弃与溢出、可用时的 conntrack 占用 |
| GOST SERVICES 服务 | 全部gost-iran-N/gost-kharej-N服务的活跃状态与主 PID、聚合 CPU/RSS/进程数/线程/FD、监听器与已建立套接字、重启计数 |
| TUNNELS 隧道 | 各编号 Iran/Kharej 配置的端口、Kharej 端允许的 Iran 源、观测到的监听器与当前连接数 |
| COLLECTOR 采集器 | 最近采样时间与数据龄、采集/检查点耗时、错过期限、源错误、数据库大小、负载丢弃状态 |
其中 conntrack 属于可选能力:主机缺少对应 sysctl 文件时标记为conntrack: unsupported,不会计入错误、也不拉低健康度;采集器从不加载内核模块,见 docs/MONITORING-V0.2.md。
采集节奏:分级采样,高负载下自动降载
采集器按「快—中—慢」三档节奏工作,默认值见 packaging/monitoring.env:
| 周期 | 默认间隔 | 采集内容 |
|---|---|---|
| Fast 快速 | 20 秒 | CPU、内存、负载、服务状态、进程身份 |
| TCP 网络 | 60 秒 | 网络/协议计数器 + 每周期一次共享的完整ss快照 |
| Slow 慢速 | 120 秒 | FD 枚举、socket 归属、cgroup/进程细节、磁盘/文件系统 |
| Maintenance 维护 | 1800 秒 | 聚合、保留期清理、WAL 检查点 |
当某次采集错过期限时,内置的负载丢弃(load shedding)机制会暂停重量级任务、保留 Fast 指标继续采样,并在连续 3 个准时周期后自动恢复——全程不建无界队列。该特性可用GOST_MONITOR_LOAD_SHEDDING=0关闭,机制实现见 monitoring/scheduler.py。
零流量依赖:监控坏了也不会断流
这是 Monitoring Lite 最重要的安全边界:采集服务与 GOST 隧道服务之间不存在Requires=、PartOf=、BindsTo=等任何生命周期关系,也没有任何 stop/restart/reload 调用,见 packaging/gost-monitor-collector.service#L4。
换句话说:采集器崩溃、历史库损坏、维护失败、甚至彻底卸载监控,都不会停掉 Direct Mode 流量。
同时采集服务自带系统级加固:低 CPU/IO 优先级(Nice=10、IOSchedulingClass=idle)、NoNewPrivileges、ProtectSystem=strict、私有0700状态目录等。
存储预算:6 小时原始 + 24 小时汇总
SQLite 采用 WAL 模式、busy timeout、事务与外键,配合有界保留策略:
- 原始指标点:6 小时
- 分钟级汇总(minute rollups):24 小时
- 结构化事件:24 小时
按代表性 Direct Mode 画像(6 个 GOST 服务、当前 20/60/120 秒节奏)估算:
| 组件 | 估算大小 |
|---|---|
| 原始指标表(6h) | ≈ 0.052 GiB |
| 分钟汇总表(24h) | ≈ 0.117 GiB |
| cycles / samples / events / entities | ≈ 0.005 GiB |
| 索引与可复用页 | ≈ 0.087 GiB |
| WAL 与运维余量 | ≈ 0.052 GiB |
| 合计(保守) | ≈ 0.312 GiB |
💡 官方建议为代表性画像至少预留 1 GiB磁盘;若服务数量、保留时长或采集节奏更高,需重新核算,见 docs/MONITORING-V0.2.md。
指标质量:每个数字都有可信标签
每条指标都带一种语义质量标签(语义定义见 monitoring/metric_semantics.py):
- exact 精确:来自权威本地源的直接观测
- derived 派生:由精确计数器与单调时钟推算
- estimated 估计:有用但非权威
- unavailable 不可用:源无法提供有效观测
速率一律用单调计数器增量计算,因此计数器重置、采样间隙、进程替换或接口抖动都不会产生负速率或假尖峰。
另外一个安全细节:用户名、密码、令牌等凭据永远不会进入指标、事件、实体元数据、采集器状态或导出文件——隧道凭据只存在于/etc/gost/*.env的 0600 私有文件里。
高级工具:高流量预设与数据导出
Advanced tools提供明细、事件、自定义汇总、JSON/CSV 导出、诊断、维护、清空与采集器控制等工作流(命令入口见 monitoring/admin_cli.py、查询引擎见 monitoring/query_engine.py)。
高流量预设可在高并发场景一键收紧采集节奏:展示当前值 → 原子备份 → 校验 → 带 fsync 原子写入,且只重启采集器(可选),绝不下发任何 GOST 服务命令:
gost-monitor-admin apply-preset high-traffic --restart-collector配置校验与安全解析逻辑位于 monitoring/config.py;配置被当作严格KEY=VALUE数据解析,从不被 shell source 或执行。
常见问题 FAQ
Q:监控会占用隧道带宽或影响转发吗?不会。监控完全本地、只读,不进流量路径;采集器高优先级被刻意压低(低 Nice + idle IO),且错过期限会自动降载。
Q:历史数据会不会无限撑爆磁盘?不会。6 小时原始 + 24 小时分钟汇总 + 24 小时事件的保留策略会自动滚动清理;gost-monitor-admin maintenance会在单事务中执行有界的聚合/保留并做 WAL 检查点。
Q:不想要监控了,能单独移除吗?可以。安全卸载脚本 uninstall.sh 将监控组件与隧道、凭据、GOST 二进制逐项独立确认;移除监控只删监控本身,不动任何流量文件与服务。
Q:支持哪些系统与架构?Ubuntu 22.04 / 24.04 LTS,amd64与arm64架构。
小结
GOST Manager 的 Monitoring Lite 用零依赖的 SQLite + Python 标准库,把「主机—网络—TCP—GOST 服务—隧道—采集器」六层状态收进同一个本地数据库:
- 一条
gost-monitor snapshot看清当前状态; - 10/30/60 分钟窗口回看趋势;
- 监控故障永远不会牵连隧道流量。
对于在 Ubuntu 上运维 GOST Direct Mode 隧道服务器的你,这套 SQLite 本地监控方案就是最省心的「守夜人」——无需任何额外组件,数据全程留在本机。
- 监控模块源码:monitoring/
- 架构说明:docs/ARCHITECTURE-V0.2.md
- 监控设计文档:docs/MONITORING-V0.2.md
- 使用指南:docs/USAGE.md
- 运维手册:docs/OPERATIONS.md
- 采集器服务单元:packaging/gost-monitor-collector.service
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考