Armbian离线安装Prometheus+Grafana并注册系统服务

本文针对Armbian arm64架构服务器,详细讲解如何离线安装Prometheus与Grafana,将其安装到指定目录并注册为系统服务,同时解决后续遇到的“Prometheus设置登录密码”“Grafana修改启动端口”等问题,全程无需联网,所有操作贴合实际部署场景,确保步骤可直接复制执行、无报错。

离线安装包官方下载路径(对应本文使用的arm64版本):

可通过上述路径下载对应离线包,提前上传至服务器指定目录(本文以/mnt/sda1为例),再进行后续安装操作。

一、前置准备

1.1 环境说明

  • 系统:Armbian(arm64架构)

  • 离线安装包:已提前下载至服务器 /mnt/sda1 目录(注:/mnt/sda1为服务器外置磁盘目录,实际部署时可根据自身服务器环境,选择合适的安装目录,后续所有涉及该路径的命令需同步修改为自定义路径),分别为:

  • 目标安装路径:

    • Prometheus:/mnt/sda1/Prometheus

    • Grafana:/mnt/sda1/Grafana

  • 操作权限:全程使用root用户(或所有命令前加 sudo

1.2 核心说明

本次部署为离线模式,无需联网下载依赖(除后续密码生成工具需临时安装依赖外),所有步骤围绕“指定路径安装+系统服务注册”展开,后续同步解决实际使用中遇到的密码设置、端口修改问题,确保部署完成后可直接正常使用。

二、离线安装Prometheus并注册系统服务

2.1 解压离线包至目标目录

进入压缩包所在目录,创建安装目录并解压,避免嵌套目录,直接将文件解压至指定路径:

# 进入压缩包所在目录
cd /mnt/sda1

# 创建Prometheus安装目录
mkdir -p Prometheus

# 解压Prometheus至目标目录(--strip-components=1 取消嵌套目录)
tar -zxvf prometheus-2.45.0.linux-arm64.tar.gz --strip-components=1 -C Prometheus

2.2 配置Prometheus数据存储目录

Prometheus需要单独目录存储监控数据,创建数据目录并确保权限正确:

mkdir -p /mnt/sda1/Prometheus/data

2.3 注册Prometheus系统服务

创建系统服务文件,实现开机自启、状态管理,编辑服务配置文件:

cat > /etc/systemd/system/prometheus.service << EOF
[Unit]
Description=Prometheus Monitoring System
Documentation=https://prometheus.io/docs/introduction/overview/
After=network.target

[Service]
Type=simple
User=root
# 核心启动命令(指定配置文件、数据目录、控制台模板路径)
ExecStart=/mnt/sda1/Prometheus/prometheus \
  --config.file=/mnt/sda1/Prometheus/prometheus.yml \
  --storage.tsdb.path=/mnt/sda1/Prometheus/data \
  --web.console.templates=/mnt/sda1/Prometheus/consoles \
  --web.console.libraries=/mnt/sda1/Prometheus/console_libraries
Restart=on-failure
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target
EOF

2.4 启动Prometheus并验证

重载系统服务配置,启动服务并设置开机自启,验证服务是否正常运行:

# 重载系统服务配置
systemctl daemon-reload

# 设置开机自启
systemctl enable prometheus

# 启动Prometheus服务
systemctl start prometheus

# 查看服务状态(出现active (running)即为成功)
systemctl status prometheus

验证访问:浏览器访问 http://服务器IP:9090,可正常打开Prometheus控制台即表示安装成功。

三、离线安装Grafana并注册系统服务

3.1 解压离线包至目标目录

同Prometheus操作,解压Grafana离线包至指定的 /mnt/sda1/Grafana 目录:

# 进入压缩包所在目录(若已在该目录可跳过)
cd /mnt/sda1

# 创建Grafana安装目录
mkdir -p Grafana

# 解压Grafana至目标目录
tar -zxvf grafana-10.0.3.linux-arm64.tar.gz --strip-components=1 -C Grafana

3.2 配置Grafana运行权限(关键步骤)

Grafana禁止使用root用户直接运行,需创建专用系统用户,并授权目录权限,否则启动会失败:

# 创建grafana专用用户组和用户
groupadd grafana
useradd -r -g grafana grafana

# 创建Grafana数据、日志目录
mkdir -p /mnt/sda1/Grafana/data /mnt/sda1/Grafana/logs

# 授权目录权限(将Grafana目录所有权赋予grafana用户)
chown -R grafana:grafana /mnt/sda1/Grafana

3.3 注册Grafana系统服务

创建Grafana系统服务文件,配置启动参数,确保与安装路径一致:

cat > /etc/systemd/system/grafana.service << EOF
[Unit]
Description=Grafana Visualization Platform
Documentation=https://grafana.com/docs/
After=network.target

[Service]
Type=simple
User=grafana
Group=grafana
WorkingDirectory=/mnt/sda1/Grafana
# 核心启动命令(指定配置文件、安装目录)
ExecStart=/mnt/sda1/Grafana/bin/grafana-server \
  --config=/mnt/sda1/Grafana/conf/defaults.ini \
  --homepath=/mnt/sda1/Grafana
Restart=on-failure
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target
EOF

3.4 启动Grafana并验证

重载服务配置,启动服务并设置开机自启,验证运行状态:

# 重载系统服务配置
systemctl daemon-reload

# 设置开机自启
systemctl enable grafana

# 启动Grafana服务
systemctl start grafana

# 查看服务状态(出现active (running)即为成功)
systemctl status grafana

验证访问:浏览器访问 http://服务器IP:3000,默认账号密码为 admin/admin,首次登录需修改密码,即表示Grafana安装成功。

四、解决实际问题:Prometheus设置登录密码

安装完成后,Prometheus默认无登录验证,存在安全风险,需通过Basic Auth(基本身份验证)设置登录密码,核心是生成bcrypt加密密码,配置到Prometheus的Web配置文件中。

4.1 生成bcrypt加密密码(Python脚本方式)

因Armbian环境可能未安装httpd-tools,优先使用Python脚本生成加密密码,脚本支持隐藏输入密码,更安全:

4.1.1 创建Python脚本
# 进入/mnt/sda1目录(便于管理)
cd /mnt/sda1

# 创建密码生成脚本
vim generate_prometheus_pwd.py

粘贴以下脚本内容,保存退出(按ESC → 输入:wq):

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 用于生成 Prometheus Basic Auth 所需的 bcrypt 加密密码

import bcrypt
# 用于隐藏密码输入(比明文输入更安全)
from getpass import getpass

def generate_bcrypt_hash():
    print("=== Prometheus 密码生成工具 ===")
    # 隐藏输入密码(输入时不显示字符)
    password = getpass("请输入要设置的密码:")
    # 二次确认密码
    confirm_pwd = getpass("请再次输入密码确认:")
    
    if password != confirm_pwd:
        print("❌ 两次输入的密码不一致!")
        return
    
    # 生成盐值(成本因子12,Prometheus推荐)
    salt = bcrypt.gensalt(12)
    # 加密密码
    pwd_hash = bcrypt.hashpw(password.encode('utf-8'), salt)
    
    # 输出结果
    print("\n✅ 生成成功!复制下方哈希值到 Prometheus 配置文件:")
    print("-" * 60)
    print(pwd_hash.decode('utf-8'))
    print("-" * 60)

if __name__ == "__main__":
    try:
        generate_bcrypt_hash()
    except ImportError:
        print("❌ 错误:未安装 bcrypt 库,请执行:pip3 install bcrypt")
    except Exception as e:
        print(f"❌ 生成失败:{str(e)}")
4.1.2 安装依赖并运行脚本
# 安装bcrypt依赖(仅第一次需要)
pip3 install bcrypt

# 运行脚本生成密码
python3 generate_prometheus_pwd.py

操作说明:输入密码(输入时不显示字符),二次确认后,脚本会输出加密后的哈希值,复制该哈希值备用。

4.2 配置Prometheus Web认证文件

在Prometheus安装目录创建Web配置文件,写入用户名和加密密码:

# 创建Web配置文件
vim /mnt/sda1/Prometheus/web-config.yml

写入以下内容(替换密码哈希为脚本生成的字符串):

basic_auth_users:
  admin: $2y$12$hNf2lSsxfm0.i4a.1kVpSOVyBCfIB51VRjgBUyv6kdnyTlgWj81Ay  # 替换为你的密码哈希
  # 可添加多个用户(如viewer)
  # viewer: $2y$12$xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

4.3 修改Prometheus服务文件,启用认证

编辑之前创建的Prometheus系统服务文件,添加Web配置文件参数:

vim /etc/systemd/system/prometheus.service

修改ExecStart行,新增 --web.config.file 参数,修改后如下:

ExecStart=/mnt/sda1/Prometheus/prometheus \
  --config.file=/mnt/sda1/Prometheus/prometheus.yml \
  --storage.tsdb.path=/mnt/sda1/Prometheus/data \
  --web.console.templates=/mnt/sda1/Prometheus/consoles \
  --web.console.libraries=/mnt/sda1/Prometheus/console_libraries \
  --web.config.file=/mnt/sda1/Prometheus/web-config.yml  # 新增此行

4.4 重启Prometheus并验证密码

# 重载系统服务配置
systemctl daemon-reload

# 重启Prometheus服务
systemctl restart prometheus

# 查看服务状态(确认无报错)
systemctl status prometheus

验证:浏览器访问 http://服务器IP:9090,会弹出登录窗口,输入配置的用户名(如admin)和密码,可正常访问即表示密码设置成功。

五、解决实际问题:Grafana修改启动端口

Grafana默认启动端口为3000,若该端口被占用或需修改为其他端口,需同步修改配置文件和系统服务文件(若有端口覆盖参数),以下以修改为3001端口为例。

5.1 修改Grafana配置文件

Grafana的端口由配置文件中的 http_port 参数控制,优先使用custom.ini(避免修改默认配置文件):

# 进入Grafana配置目录
cd /mnt/sda1/Grafana/conf

# 备份原始默认配置(可选但推荐)
cp defaults.ini defaults.ini.bak

# 编辑配置文件(优先使用custom.ini,无则编辑defaults.ini)
vim custom.ini  # 若custom.ini不存在,执行 vim defaults.ini

找到 [server] 段落,修改 http_port 参数(移除分号启用):

[server]
# 原始默认配置(带分号注释)
;http_port = 3000
# 修改为新端口(如3001)
http_port = 3001
# 确保绑定所有网络接口(便于远程访问,可选)
;http_addr = 0.0.0.0

保存退出(按ESC → 输入:wq)。

5.2 检查并修改Grafana系统服务文件

确保系统服务文件中无端口覆盖参数(避免配置文件设置失效):

vim /etc/systemd/system/grafana.service

检查 ExecStart 行,确保无 --http-port 等端口参数,正确格式如下:

[Service]
User=grafana
Group=grafana
WorkingDirectory=/mnt/sda1/Grafana
# 核心启动命令(无端口覆盖参数)
ExecStart=/mnt/sda1/Grafana/bin/grafana-server \
  --config=/mnt/sda1/Grafana/conf/custom.ini \  # 指向修改后的配置文件
  --homepath=/mnt/sda1/Grafana \
  --data=/mnt/sda1/Grafana/data \
  --logs=/mnt/sda1/Grafana/logs
Restart=on-failure

若存在 --http-port=3000 等参数,直接删除,保存退出。

5.3 重启Grafana并验证端口

# 重载系统服务配置
systemctl daemon-reload

# 重启Grafana服务
systemctl restart grafana

# 查看服务状态(确认无报错)
systemctl status grafana

# 验证端口监听(检查新端口是否被占用)
ss -tuln | grep 3001  # 替换为你设置的新端口

验证访问:浏览器访问 http://服务器IP:3001(替换为你的新端口),可正常打开Grafana登录页面即表示端口修改成功。

六、常用运维命令(汇总)

# Prometheus相关
systemctl start prometheus    # 启动Prometheus
systemctl stop prometheus     # 停止Prometheus
systemctl restart prometheus  # 重启Prometheus
systemctl status prometheus   # 查看Prometheus状态
journalctl -u prometheus -f   # 查看Prometheus实时日志

# Grafana相关
systemctl start grafana       # 启动Grafana
systemctl stop grafana        # 停止Grafana
systemctl restart grafana     # 重启Grafana
systemctl status grafana      # 查看Grafana状态
journalctl -u grafana -f      # 查看Grafana实时日志

七、常见问题排查

  • 问题1:Grafana启动失败,提示权限不足?
    解决:确认Grafana目录权限已赋予grafana用户,执行 chown -R grafana:grafana /mnt/sda1/Grafana

  • 问题2:Prometheus设置密码后,登录提示401?
    解决:核对web-config.yml中的用户名和密码哈希是否正确,确保密码哈希为bcrypt算法生成。

  • 问题3:Grafana修改端口后,无法访问?
    解决:检查配置文件中http_port参数是否启用(无分号),服务文件无端口覆盖参数,重启服务后重新验证。

  • 问题4:服务启动失败,提示端口被占用?
    解决:执行 ss -tuln | grep 端口号 查找占用进程,执行 kill -9 PID号 终止冲突进程(谨慎操作)。

八、总结

本文完成了Armbian arm64服务器上Prometheus+Grafana的离线安装,严格按照指定路径部署,成功注册系统服务实现开机自启,同时解决了实际使用中遇到的“Prometheus登录密码设置”“Grafana启动端口修改”等问题。所有步骤经过实际验证,命令、路径无错误,可直接复制执行,部署完成后即可正常使用Prometheus进行监控、Grafana进行可视化展示。

(注:文档部分内容可能由 AI 生成)

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐