# 技术栈

## 架构

单进程守护服务，通过 eBPF 程序在内核态采集事件，用户态 Go 程序聚合处理并暴露指标。采用模块化设计，各功能域（容器、节点、eBPF、追踪等）独立为包。

## 核心技术

- **语言**: Go 1.21+
- **eBPF**: cilium/ebpf 库加载和管理内核态程序（C 编写的 BPF 程序）
- **运行时**: Linux 内核 ≥ 4.18（eBPF 依赖）
- **容器运行时**: Docker、Containerd、CRI-O

## 关键库

| 库 | 用途 |
|---|---|
| `cilium/ebpf` | eBPF 程序加载和 map 操作 |
| `prometheus/client_golang` | Prometheus 指标暴露 |
| `sirupsen/logrus` | 结构化日志 |
| `spf13/viper` | 配置管理（INI/环境变量/热更新） |
| `kingpin.v2` | 命令行参数解析 |
| `opentelemetry` | OTLP trace 上报 |
| `vishvananda/netlink` | Linux 网络接口操作 |

## 开发标准

### 代码质量
- Go 标准 lint 规则
- 包级别注释使用中文
- 日志统一使用 `klog`（logrus 别名）

### 测试
- 表驱动测试（`_test.go` 与源文件同目录）
- fixtures 目录存放测试数据（`fixtures/`）

### 构建约束
- eBPF 程序预编译为 `bindata_linux_amd64.go` / `bindata_linux_arm64.go`
- 区分 `_linux.go` 和通用文件的构建标签

## 开发环境

### 必需工具
- Go 1.21+
- Linux 环境（eBPF 依赖）
- Docker（镜像构建）
- clang/llvm（eBPF C 程序编译，仅修改 BPF 代码时需要）

### 常用命令
```bash
# Build: make all (默认 x86)
# Build ARM: make arch=arm all
# Debug: make all debug=1 pid=<PID>
# Docker image: make image
# eBPF rebuild: cd ebpftracer && make
```

## 关键技术决策

- **单二进制部署**: 所有功能编译到一个可执行文件，简化运维
- **eBPF 预编译嵌入**: BPF 字节码以 Go embed 形式打包，避免运行时编译依赖
- **Prometheus 拉取模型**: 指标通过 HTTP 端点暴露，兼容 Prometheus 生态
- **Viper + INI 配置**: 支持命令行参数、环境变量、INI 文件三级配置源
- **多架构支持**: amd64/arm64 双架构构建和镜像

---
_记录标准和模式，而非每个依赖项_
