返回首页

eBPF 服务器诊断 60 秒:melisai

Melisai 自动化 Linux 服务器诊断:eBPF/BCC-metrics 收集、procfs、sysfs 60 秒到 JSON。检测 37 个异常、生成 sysctl 命令、通过 MCP 与 AI 集成。在事件中节省常规操作。

eBPF Linux 诊断 60 秒:melisai 工具
Advertisement 728x90

# Linux服务器自动化诊断:从手动检查到eBPF分析只需几分钟

有Linux经验的开发者和运维人员都清楚这个套路:服务器“变慢”投诉一来,就得运行常规工具——topvmstatiostatss。这是第一层诊断,通常要花20–40分钟。接下来是深入eBPF工具,比如Brendan Gregg的runqlatbiolatencytcpretrans。问题在于,罕见故障会让你记忆模糊,只能不停谷歌/proc文件、sysctl参数和BCC工具语法。

AI(如ChatGPT、Claude)能简化日志分析,但无法处理数据采集。神经网络不会自己运行工具,也不会关联PruneCalled和TCP内存等指标。你需要一个结构化的数据采集器来喂给AI。

Melisai:一键采集数据到单一JSON

Melisai是一个无依赖的静态Go二进制文件。启动命令:

Google AdInline article slot
sudo melisai collect --profile quick -o report.json

快速模式10秒,深度模式60秒。输出:包含CPU、内存、磁盘、网络、进程、容器和GPU指标的JSON。

采集内容:

  • 第一层:procfs、sysfs、ssethtoolnvidia-smi(无需root)。
  • 第二层:67个BCC/eBPF工具(runqlatbiolatencytcpretrans等,需要root + bcc-tools)。
  • 第三层:通过cilium/ebpf的原生eBPF(root + 内核≥5.8带BTF)。

降级机制:如果第二/三层不可用,则运行第一层。

Google AdInline article slot

两阶段采集与速率指标

为避免观测者效应,采集分两阶段:

  • 基线:第一层指标(CPU、内存、I/O、网络)。
  • eBPF:基线后运行BCC工具。

基于速率的计算:测量间的差值。不是累积计数器(200天在线= softnet_dropped=5000很正常),而是速率(softnet_drop_rate=50/秒才算异常)。

基于Gregg和生产实践的37条异常规则:

Google AdInline article slot

| 类别 | 示例阈值 |

|------|------------|

| CPU | 利用率>95%、PSI>5%、runqlat p99>50ms |

| 内存 | 直接回收>10/秒、THP拆分>1/秒、NUMA miss>5% |

| 磁盘 | 利用率>90%、延迟>50ms |

| 网络 | 重传>50/秒、conntrack>90% |

| GPU | NUMA不匹配GPU-NIC |

案例分析:Docker主机级联故障

生产环境:8核、32GB内存、HDD RAID。症状:整体变慢。

sudo melisai collect --profile deep --ai-prompt -o report.json

结果(60秒):

健康分数:46/100
异常:
[严重] tcp_retransmits 134/秒
[警告] disk_util 80.5%
[警告] cpu_psi 17.6%
[警告] io_psi 12.8%
[警告] disk_latency 12.1ms
[警告] tcp_close_wait 1个socket

级联链条:

  • HDD p99=49ms → 块I/O延迟(biolatency)。
  • PruneCalled=105 → TCP缓冲区被裁剪(内存压力)。
  • TCP重传=31/秒 → 服务器内部丢包。
  • WireGuard tx_dropped=226k → VPN隧道受影响。

根因:HDD瓶颈。建议:sysctl -w net.ipv4.tcp_mem='1048576 2097152 4194304'

通过MCP集成AI

内置MCP服务器,供Claude Desktop/Cursor使用:

{
  "mcpServers": {
    "melisai": {
      "command": "ssh",
      "args": ["root@server", "/usr/local/bin/melisai", "mcp"]
    }
  }
}

AI调用:

  • get_health — 分数 + 异常。
  • explain_anomaly — 根因 + 修复命令。
  • collect_metrics — 完整报告带直方图。

JSON包含ai_context.prompt,内置27种反模式。

建议与限制

建议是即插即用命令:

{
  "type": "fix",
  "title": "TCP内存压力 (PruneCalled)",
  "commands": ["sysctl -w net.ipv4.tcp_mem='1048576 2097152 4194304'"],
  "evidence": "PruneCalled=105"
}

限制:

  • 非监控(快照,非Prometheus)。
  • 非告警(仅按需/cron)。
  • 非应用剖析(用pprof)。
  • 仅NVIDIA GPU(ROCm计划中)。

安装与构建

curl -sSL https://melisai.dev/install | sh

构建:

GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o melisai ./cmd/melisai/

Apache 2.0。

核心要点

  • 10–60秒内采集67个eBPF工具 + 第一层,输出结构化JSON。
  • 速率指标消除长在线服务器假阳性。
  • 37条异常规则 + 现成sysctl命令。
  • MCP集成:AI直接分析,无需复制粘贴。
  • 两阶段采集最小化观测者效应。

— Editorial Team

Advertisement 728x90

继续阅读