第2章 环境准备与依赖安装
2.1 操作系统要求与原理
Matrix 框架设计为跨平台运行,但不同操作系统在包管理器、内核参数和性能隔离上存在差异。以下为各系统的最低要求与推荐配置:
| 操作系统 | 最低版本 | 包管理器 | 内核参数建议 |
|---|---|---|---|
| Ubuntu / Debian | 22.04 LTS | APT | net.core.somaxconn=65535 |
| CentOS / Rocky | 9 | DNF | vm.max_map_count=262144 |
| macOS | Ventura (13.0) | Homebrew | — |
| Windows (WSL2) | Windows 10 22H2 | Chocolatey / winget | wsl --set-default-version 2 |
⚠️ 关键告诫:不要在生产环境的 Windows 上直接运行 Prometheus/InfluxDB,推荐使用 WSL2 或 Docker Desktop WSL2 后端。matrix-agent 在 Windows 裸机下存在信号处理缺陷。
2.2 Go 运行时环境安装
原理
Matrix 核心运行时采用 Go 编写,依赖 Go 1.22+ 的泛型、telemetry 和 goroutine 调度优化。系统必须安装 Go 并确保 $GOPATH 和 $GOROOT 正确设置。
实现流程
- 下载官方二进制包(推荐,避免包管理器版本滞后)
- 设置环境变量:
export GOROOT=/usr/local/go; export PATH=$PATH:$GOROOT/bin - 验证安装:
go version输出应为go1.22.2 linux/amd64或更新。
命令示例
# Linux / macOS
wget https://go.dev/dl/go1.22.5.linux-amd64.tar.gz
sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.22.5.linux-amd64.tar.gz
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
source ~/.bashrc
go version
常见错误与调试
- “go: command not found” —— 检查 PATH 是否包含
/usr/local/go/bin,或重新执行source ~/.bashrc。 - “go: unsupported GOOS/GOARCH pair” —— 跨编译时出现,确保
GOOS和GOARCH组合正确。 - 版本低于 1.22 —— Matrix 编译将失败,显示类似
requires go1.22的错误。
🔧 优化提示:使用
GOMAXPROCS 环境变量限制 CPU 并发,避免与 Prometheus 采集器争抢资源。建议设置 export GOMAXPROCS=2 在低配机器上。
2.3 Prometheus / InfluxDB 安装
原理
Matrix 支持两种后端存储:Prometheus(内置 tsdb,适合短期告警和趋势)和 InfluxDB(列式存储,适合长期聚合和自定义保留策略)。双存储可在同一集群中共存,通过 matrix-router 进行分流。
安装对比
| 组件 | 安装方式 | 默认端口 | 数据目录 | 启动命令 |
|---|---|---|---|---|
| Prometheus | 二进制 / Docker | 9090 | /var/lib/prometheus | ./prometheus --config.file=prometheus.yml |
| InfluxDB | 二进制 / Docker | 8086 | /var/lib/influxdb2 | influxd --reporting-disabled |
二进制安装命令
# Prometheus 2.53.0
wget https://github.com/prometheus/prometheus/releases/download/v2.53.0/prometheus-2.53.0.linux-amd64.tar.gz
tar xvf prometheus-*.tar.gz
cd prometheus-*
./prometheus --config.file=prometheus.yml &
# InfluxDB 2.7.5
wget https://dl.influxdata.com/influxdb/releases/influxdb2-2.7.5-linux-amd64.tar.gz
tar xvf influxdb2-*.tar.gz
cd influxdb2-*
./influxd --reporting-disabled &
调试命令
# 检查 prometheus 就绪
curl http://localhost:9090/-/ready
# 检查 influxdb 就绪
curl -v http://localhost:8086/health
# 常见错误:端口被占用 → netstat -tlnp | grep 9090
⚠️ 性能注意:InfluxDB 的 TSM 引擎在写放大严重时会导致磁盘 I/O 飙升。生产环境务必为
/var/lib/influxdb2 使用单独 SSD 或 NVMe,并在配置文件 influxdb.conf 中设置 storage-cache-max-memory-size = "1G"。
2.4 Docker Compose 快速部署
原理
Docker Compose 将 matrix-agent、Prometheus、InfluxDB、Grafana 打包为多容器声明式部署,降低环境差异。所有容器共享自定义网络 matrix-net,通过服务名互访。
实现流程
- 安装 Docker 和 Docker Compose v2(
apt install docker-compose-plugin) - 编写
docker-compose.yml - 执行
docker compose up -d - 验证:
docker compose ps应显示所有服务为 Running
docker-compose.yml 完整示例
version: "3.9"
services:
prometheus:
image: prom/prometheus:v2.53.0
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prom_data:/prometheus
networks:
- matrix-net
influxdb:
image: influxdb:2.7.5
ports:
- "8086:8086"
environment:
DOCKER_INFLUXDB_INIT_MODE: setup
DOCKER_INFLUXDB_INIT_USERNAME: admin
DOCKER_INFLUXDB_INIT_PASSWORD: matrix@2024
DOCKER_INFLUXDB_INIT_ORG: matrix
DOCKER_INFLUXDB_INIT_BUCKET: metrics
volumes:
- influx_data:/var/lib/influxdb2
networks:
- matrix-net
matrix-agent:
build:
context: ./matrix
ports:
- "8080:8080"
environment:
MATRIX_PROMETHEUS_URL: http://prometheus:9090
MATRIX_INFLUXDB_URL: http://influxdb:8086
depends_on:
- prometheus
- influxdb
networks:
- matrix-net
volumes:
prom_data:
influx_data:
networks:
matrix-net:
driver: bridge
调试与常见错误
- 容器无法启动(exited with code 139) —— 通常为
seccomp限制导致;在docker run中添加--security-opt seccomp=unconfined。 - 网络不通:检查
docker compose down并重新up -d;必要时清理网络docker network prune。 - InfluxDB 不匹配:首次启动会初始化访问令牌,可在
docker compose logs influxdb中查看,或设置DOCKER_INFLUXDB_INIT_ADMIN_。
💡 稳定性优化:在 Compose 文件中增加
restart: always 和 healthcheck 配置。例如:
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9090/-/healthy"]
interval: 30s
timeout: 5s
retries: 3
2.5 全量验证命令
完成安装后,执行以下命令确认所有组件就绪:
# 1. Go 版本
go version
# 2. Docker 和 Compose
docker compose version
docker info | grep "Server Version"
# 3. Prometheus 目标发现 (如果已配置)
curl -s http://localhost:9090/api/v1/targets | jq .
# 4. InfluxDB 健康
curl -s http://localhost:8086/health
# 5. Matrix Agent 指标端点 (默认 /metrics)
curl -s http://localhost:8080/metrics | head -20
📌 最小化部署建议:如果仅做功能验证,可将 Prometheus 和 InfluxDB 合并为一台容器;Matrix 框架允许动态切换后端,无需同时启动两者。生产环境务必使用
docker compose --profile 分离职责。