基于 Grafana Alloy + Prometheus + Grafana 的分布式服务器监控方案。
┌─────────────────────────────────────────────┐ │ 中央服务器 (1 台) │ │ │ ┌──────────────┐ OTLP │ ┌─────────┐ remote ┌────────────┐ │ PromQL ┌─────────┐ │ Agent #1 │─gRPC────▶│ │ Alloy │───write──────▶│ Prometheus │◀─│────────────│ Grafana │ │ (web-01) │ │ │ :4317 │ │ :9090 │ │ │ :3000 │ └──────────────┘ │ └─────────┘ ┌──────────▶└────────────┘ │ └─────────┘ │ ▲ │ │ ┌──────────────┐ OTLP │ │ │ │ │ Agent #2 │─gRPC────▶│───────┘ │ │ │ (db-01) │ │ │ │ └──────────────┘ └─────────────────────────────────────────────┘ ┌──────────────┐ OTLP │ Agent #N │─gRPC────▶ ... │ (app-xx) │ └──────────────┘
核心设计:Push 模式 — 客户端主动推送,中央端配置固定不变。新增监控只需在新机器上部署 Agent。
server/ # 中央服务器端 ├── docker-compose.yaml # 编排 Alloy + Prometheus + Grafana ├── alloy/ │ └── config.alloy # 中央 Alloy 配置 ├── prometheus/ │ └── prometheus.yaml # Prometheus 配置 ├── grafana/ │ ├── datasources/ │ │ └── datasources.yaml # Prometheus 数据源 │ └── dashboards/ │ ├── dashboard.yaml # Dashboard 自动加载配置 │ └── node-exporter.json # Node Exporter Dashboard └── .env # 环境变量 agent/ # 客户端(每台被监控服务器) ├── docker-compose.yaml # 容器编排 ├── Dockerfile # 构建镜像 ├── main.go # 入口:HTTP /metrics 端点 ├── collector.go # 采集器:CPU/内存/磁盘/网络等指标 ├── go.mod / go.sum # Go 依赖
cd server
docker compose up -d
启动后可访问:
将 agent/ 目录拷贝到被监控服务器,通过环境变量注入配置并启动:
cd agent
SERVER_NAME=web-01 HOSTNAME=$(hostname -s) docker compose up -d --build
环境变量说明:
SERVER_NAME:给这台服务器起个可读名称,用于 Dashboard 筛选HOSTNAME:主机名,默认取当前机器的 hostname方式二:直接编译运行(开发/调试用)
cd agent
go build -o node-exporter .
SERVER_NAME=local-mac HOSTNAME=$(hostname -s) ./node-exporter
# 默认监听 :9100,可通过 -port 指定
SERVER_NAME=local-mac HOSTNAME=$(hostname -s) ./node-exporter -port 9200
访问 http://localhost:9100/metrics 验证指标输出。
在新机器上执行同样的启动命令即可,无需修改中央端任何配置:
SERVER_NAME=db-01 HOSTNAME=$(hostname -s) docker compose up -d --build
在目标机器上停止并清理容器:
cd agent
docker compose down
# 查看容器运行状态
docker compose ps
# 查看日志
docker compose logs -f
# 验证指标端点
curl http://localhost:9100/metrics
打开打开 http://<中央IP>:12345,确认组件正常运行(绿色状态)。
打开打开 http://<中央IP>:9090,执行查询:
up node_uname_info
能看到各 Agent 上报的数据即表示链路正常。
# 检查中央端口是否可达
nc -zv <中央IP> 4317
# 检查 Agent 日志
docker compose logs -f
# 检查防火墙
firewall-cmd --list-ports # CentOS
ufw status # Ubuntu
node_uname_infodocker compose logs 看是否有报错node_uname_info 指标,Agent 启动后需要等待约 30-60 秒才会有数据编辑 server/.env 文件,修改 GF_SECURITY_ADMIN_PASSWORD,然后重启:
cd server
docker compose restart grafana