当前位置:首页>Linux>Grafana Alloy部署实践:Linux二进制包部署

Grafana Alloy部署实践:Linux二进制包部署

  • 2026-09-11 16:18:01
Grafana Alloy部署实践:Linux二进制包部署

在 Linux 系统上以独立二进制包的方式部署 Grafana Alloy,重点覆盖离线环境下的完整部署流程,包括目录规划、用户权限、systemd 服务配置、启动验证及日志管理。

适用场景:无法使用包管理器联网安装、需要严格管控软件来源的生产环境、以及需要自定义安装路径的场景。

准备工作

系统要求

项目要求
操作系统Linux(推荐 Ubuntu 20.04+、CentOS 7+、RHEL 8+)
架构AMD64 或 ARM64
权限root 或具备 sudo 权限的用户
依赖无外部依赖,二进制包为静态编译

获取安装包

在线环境

从 GitHub Release 页面获取最新稳定版:

# 查看最新版本号(当前稳定版为 v1.13.x)
# 下载 AMD64 版本
ALLOY_VERSION="v1.13.2"
ARCH="amd64"
wget -O alloy-linux-${ARCH}.zip \
  "https://github.com/grafana/alloy/releases/download/${ALLOY_VERSION}/alloy-linux-${ARCH}.zip"
# 下载校验文件
wget -O alloy-linux-${ARCH}.zip.sha256 \
  "https://github.com/grafana/alloy/releases/download/${ALLOY_VERSION}/alloy-linux-${ARCH}.zip.sha256"

离线环境

在有网络的机器上提前下载以下文件,再通过内网传输至目标服务器:

alloy-linux-amd64.zip          # AMD64 主程序包(约 120MB)
alloy-linux-amd64.zip.sha256   # SHA256 校验文件

ARM64 架构(如鲲鹏、飞腾等国产服务器)则下载对应的 alloy-linux-arm64.zip。

BoringCrypto 版本说明:如果所在环境有 FIPS 合规要求,可下载 alloy-boringcrypto-linux-amd64.zip,该版本使用经过认证的加密模块,目前处于 Public Preview 阶段。

安装部署

校验包完整性

# 校验 SHA256,输出 OK 表示文件完整
sha256sum -c alloy-linux-amd64.zip.sha256

解压与安装二进制

# 解压
unzip alloy-linux-amd64.zip
# 赋予可执行权限
chmod +x alloy-linux-amd64
# 安装到系统路径
sudo mv alloy-linux-amd64 /usr/local/bin/alloy
# 验证版本
alloy --version

规划目录结构

采用清晰的目录布局,便于运维管理:

/usr/local/bin/alloy          # 主二进制文件
/etc/alloy/                   # 配置目录
    config.alloy              # 主配置文件
    conf.d/                   # 可选:拆分配置目录
/var/lib/alloy/               # 数据目录(WAL、持久化缓存)
/var/log/alloy/               # 日志目录(可选,默认输出到 stdout)
/etc/default/alloy            # 服务环境变量文件

创建所需目录:

# 创建配置目录
sudo mkdir -p /etc/alloy/conf.d
# 创建数据目录(存储 WAL 等持久化数据)
sudo mkdir -p /var/lib/alloy
# 创建日志目录(可选)
sudo mkdir -p /var/log/alloy

创建专用用户

为 Alloy 创建无登录权限的系统用户,遵循最小权限原则:

# 创建系统用户 alloy,不创建 home 目录,不允许登录
sudo useradd --system \
  --no-create-home \
  --shell /sbin/nologin \
  --comment "Grafana Alloy" \
  alloy

设置目录权限:

# 配置目录:root 所有,alloy 可读
sudo chown -R root:alloy /etc/alloy
sudo chmod -R 750 /etc/alloy
# 数据目录:alloy 完全控制
sudo chown -R alloy:alloy /var/lib/alloy
sudo chmod -R 755 /var/lib/alloy
# 日志目录(如使用)
sudo chown -R alloy:alloy /var/log/alloy

编写配置文件

最小可用配置

以下是一份最小化的配置示例,验证服务是否能正常启动:

// /etc/alloy/config.alloy
// 最小配置示例:采集本机 Node Exporter 指标并上报 Prometheus
// 服务发现:静态定义采集目标
prometheus.exporter.unix "node" {
  // 使用默认配置,采集系统指标
}
// 采集配置
prometheus.scrape "node" {
  targets    = prometheus.exporter.unix.node.targets
  forward_to = [prometheus.remote_write.default.receiver]
  scrape_interval = "15s"
}
// 远端写入
prometheus.remote_write "default" {
  endpoint {
    url = "http://prometheus:9090/api/v1/write"
    // 离线或无认证场景可去掉 basic_auth 块
    // basic_auth {
    //   username = "user"
    //   password = "pass"
    // }
  }
}

配置语法说明:Alloy 使用 .alloy 格式(基于 River 语法),块之间通过 组件类型.实例名.导出字段 的方式引用,形成数据管道。详细语法见第二篇文章。

格式校验与语法检查

# 格式化配置文件(类似 gofmt)
alloy fmt /etc/alloy/config.alloy
# 语法校验
alloy validate /etc/alloy/config.alloy

配置 systemd 服务

创建环境变量文件

sudo tee /etc/default/alloy > /dev/null <<'EOF'
## Grafana Alloy 服务环境变量
## 修改此文件后需执行:sudo systemctl restart alloy
# 配置文件路径
CONFIG_FILE="/etc/alloy/config.alloy"
# 额外的命令行参数(多个参数用空格分隔)
# 示例:暴露 UI 给外部访问
# CUSTOM_ARGS="--server.http.listen-addr=0.0.0.0:12345"
CUSTOM_ARGS=""
# 升级时是否自动重启(默认 true)
RESTART_ON_UPGRADE=true
EOF

创建 systemd Unit 文件

sudo tee /etc/systemd/system/alloy.service > /dev/null <<'EOF'
[Unit]
Description=Vendor-neutral programmable observability pipelines
Documentation=https://grafana.com/docs/alloy/
# 等待网络就绪后启动
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
Restart=always
RestartSec=5s
User=alloy
Group=alloy
# 注入主机名环境变量,可在配置中通过 sys.env("HOSTNAME") 引用
Environment=HOSTNAME=%H
# 读取环境变量文件
EnvironmentFile=/etc/default/alloy
# 数据目录(WAL 及持久化缓存存放位置)
WorkingDirectory=/var/lib/alloy
# 启动命令:$CUSTOM_ARGS 和 $CONFIG_FILE 来自 EnvironmentFile
ExecStart=/usr/local/bin/alloy run \
    $CUSTOM_ARGS \
    --storage.path=/var/lib/alloy \
    $CONFIG_FILE
# 热重载:向主进程发送 HUP 信号触发配置重载(无需重启服务)
ExecReload=/usr/bin/env kill -HUP $MAINPID
# 优雅停止超时(等待进程完成当前工作)
TimeoutStopSec=20s
# 安全加固(可选)
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=full
[Install]
WantedBy=multi-user.target
EOF

重要参数说明

参数说明
--storage.pathWAL(Write-Ahead Log)及组件持久化数据目录,重要,不要指向 tmpfs
--server.http.listen-addrUI 及 API 监听地址,默认 127.0.0.1:12345
--cluster.enabled是否开启集群模式(详见第四篇)
--disable-reporting禁用匿名使用数据上报至 Grafana Labs

完整的禁用遥测数据上报示例:

CUSTOM_ARGS="--disable-reporting"

启动与管理

启动服务

# 重新加载 systemd 配置
sudo systemctl daemon-reload
# 设置开机自启
sudo systemctl enable alloy
# 启动服务
sudo systemctl start alloy
# 查看运行状态
sudo systemctl status alloy

正常运行时输出示例:

alloy.service - Vendor-neutral programmable observability pipelines
     Loaded: loaded (/etc/systemd/system/alloy.service; enabled)
     Active: active (running) since Mon 2025-03-10 10:00:00 CST; 5s ago
   Main PID: 12345 (alloy)

常用管理命令

# 停止服务
sudo systemctl stop alloy
# 重启服务
sudo systemctl restart alloy
# 热重载配置(不中断数据采集,推荐用于配置变更)
sudo systemctl reload alloy
# 或直接发送信号
sudo kill -HUP $(pidof alloy)
# 查看实时日志
sudo journalctl -u alloy -f
# 查看最近 100 行日志
sudo journalctl -u alloy -n 100 --no-pager
# 查看指定时间段日志
sudo journalctl -u alloy --since "2025-03-10 09:00" --until "2025-03-10 10:00"

访问内置 UI

Alloy 内置了 Web 调试界面,默认仅监听本地:

# 在目标服务器上通过浏览器或 curl 访问
curl http://127.0.0.1:12345

如需从其他机器访问,修改 /etc/default/alloy:

CUSTOM_ARGS="--server.http.listen-addr=0.0.0.0:12345"

然后重启服务,在浏览器中访问 http://<服务器IP>:12345,可以看到:

  • Graph 视图:可视化展示组件之间的数据流
  • 组件状态:每个组件的健康状态和导出值
  • Live Debugging:实时查看流经各组件的数据

升级与版本管理

升级流程

# 1. 下载新版本二进制(离线时同样适用此流程)
wget -O alloy-linux-amd64-new.zip \
  "https://github.com/grafana/alloy/releases/download/v1.14.0/alloy-linux-amd64.zip"
# 2. 校验完整性
sha256sum -c alloy-linux-amd64-new.zip.sha256
# 3. 解压
unzip alloy-linux-amd64-new.zip -d /tmp/alloy-new
# 4. 停止服务
sudo systemctl stop alloy
# 5. 备份旧版本
sudo cp /usr/local/bin/alloy /usr/local/bin/alloy.bak
# 6. 替换二进制
sudo cp /tmp/alloy-new/alloy-linux-amd64 /usr/local/bin/alloy
sudo chmod +x /usr/local/bin/alloy
# 7. 启动服务
sudo systemctl start alloy
# 8. 验证版本
alloy --version

回滚

sudo systemctl stop alloy
sudo cp /usr/local/bin/alloy.bak /usr/local/bin/alloy
sudo systemctl start alloy

卸载

# 停止并禁用服务
sudo systemctl stop alloy
sudo systemctl disable alloy
# 删除 systemd 配置
sudo rm /etc/systemd/system/alloy.service
sudo systemctl daemon-reload
# 删除二进制文件
sudo rm /usr/local/bin/alloy
# 删除配置与数据(谨慎操作,WAL 数据将丢失)
sudo rm -rf /etc/alloy
sudo rm -rf /var/lib/alloy
sudo rm -rf /var/log/alloy
# 删除用户
sudo userdel alloy

常见问题排查

服务无法启动

现象:systemctl status alloy 显示 failed

排查步骤:

# 查看详细错误信息
sudo journalctl -u alloy -n 50 --no-pager
# 手动以 alloy 用户运行,便于直接看到错误输出
sudo -u alloy /usr/local/bin/alloy run --storage.path=/var/lib/alloy /etc/alloy/config.alloy

常见原因:

错误信息原因解决方案
permission denied on /var/lib/alloy数据目录权限不对chown -R alloy:alloy /var/lib/alloy
config file not found配置文件路径错误检查 CONFIG_FILE 环境变量
unknown flag: --config.file错误使用了旧版参数格式Alloy 使用 run  而非 --config.file
address already in use12345 端口被占用修改 --server.http.listen-addr 端口

配置热重载不生效

# 确认进程收到了信号
sudo journalctl -u alloy -f
# 然后执行 reload
sudo systemctl reload alloy
# 日志中应出现 "config reloaded" 字样

若日志无输出,检查配置文件是否有语法错误:

alloy validate /etc/alloy/config.alloy

WAL 数据过大

WAL(Write-Ahead Log)默认不自动清理超龄数据,在 prometheus.remote_write 组件中配置 WAL 保留时间:

prometheus.remote_write "default" {
  endpoint {
    url = "http://prometheus:9090/api/v1/write"
  }
  wal {
    // 最大保留时长,默认 4h,可根据网络稳定性调整
    max_keepalive_time = "8h"
    // 最小保留时长
    min_keepalive_time = "5m"
  }
}

内存占用过高

Alloy 内存占用主要来自 WAL 缓冲和 series 缓存。估算公式:

内存 ≈ 活跃 Series 数 × 10KB + WAL 缓冲

若内存持续增长,检查是否有 label cardinality 过高的问题,可在 UI 的 Graph 视图查看各组件的 series 数量。

最新文章

随机文章