Ubuntu 系统安装 Prometheus+Grafana(附shell脚本一键部署↓)

Prometheus与Grafana的组合是云原生环境下高效监控与可视化的黄金搭档,二者通过技术互补形成完整的监控解决方案,适用于容器化应用、微服务架构及传统IT环境的性能管理。

Prometheus:云原生监控的核心引擎

  1. 技术定位与优势
    Prometheus是由SoundCloud开发、后纳入CNCF的开源监控系统,采用Pull模式主动拉取指标数据,支持多维数据模型(时间序列由指标名和键值对标签构成)。其核心优势包括:
    1. 高效存储:单机每秒可采集千万级指标,320万时间序列存储60天仅需228GB磁盘。
    2. 灵活查询:PromQL查询语言支持复杂数学运算,适合动态服务架构的监控需求。
    3. 服务发现:原生支持Kubernetes、DNS、Consul等动态目标发现,适配容器化环境。
    4. 自治架构:单节点独立运行,不依赖分布式存储,故障时仍可提供基础监控能力。
  2. 典型应用场景
    • Kubernetes集群监控:通过Node Exporter采集节点资源(CPU、内存、磁盘),Kube-State-Metrics监控Pod/Deployment状态,cAdvisor跟踪容器资源使用。
    • 微服务性能分析:结合Blackbox Exporter监控服务存活性,通过自定义指标分析接口响应时间、错误率。
    • 日志与事件关联:与Loki集成实现日志与指标的交叉分析,加速故障定位。

Grafana:数据可视化的终极利器

  1. 技术定位与优势
    Grafana是基于Go的开源可视化平台,支持多数据源(Prometheus、InfluxDB、MySQL等),提供动态仪表盘、告警规则配置及插件扩展能力。其核心价值包括:
    • 直观展示:折线图、热力图、仪表盘等20+种图表类型,支持时间范围对比、数据下钻。
    • 告警管理:通过Alerting模块定义阈值规则,支持Email、Slack、Webhook等多渠道通知。
    • 混合数据源:单图聚合不同数据源指标(如Prometheus指标+MySQL业务数据)。
    • 模板变量:动态生成仪表盘(如按服务名筛选Pod指标),提升复用性。
  2. 典型应用场景
    • 实时监控大屏:构建IT运维驾驶舱,集中展示核心业务指标(如订单量、交易成功率)。
    • 告警中心:集成Alertmanager实现告警收敛、分组,减少噪音干扰。
    • 自定义报表:通过SQL或PromQL生成日报/周报,支持PDF导出与分享。

Prometheus + Grafana:1+1>2的监控实践

  1. 技术协同原理
    Prometheus负责数据采集与存储,Grafana通过API拉取指标并可视化,二者通过以下机制深度集成:
    • 数据源配置 :在Grafana中添加Prometheus数据源,指定URL(如http://prometheus-server:9090)。
    • 仪表盘模板:利用社区模板(如Node Exporter Full、Kubernetes Cluster)快速部署监控面板。
    • 告警联动:Grafana Alerting调用Alertmanager API,实现可视化告警规则配置与通知。
  2. 部署架构示例
    • 单机部署:同一服务器安装Prometheus(端口9090)与Grafana(端口3000),通过Nginx反向代理实现统一访问。
    • 集群部署:Prometheus联邦模式分散采集压力,Grafana集群通过HA配置保障高可用。
    • 安全配置:启用Prometheus TLS认证,Grafana配置LDAP集成实现权限管理。
  3. 最佳实践建议
    • 标签设计 :遵循<metric_name>{label="value"}规范,避免高基数标签(如用户ID)。
    • 采集频率 :根据指标重要性设置scrape_interval(默认1分钟),关键业务指标可缩短至15秒。
    • 告警策略:采用"紧急>警告>通知"分级机制,结合抑制规则减少重复告警。
    • 扩展性:长期历史数据存储可对接Thanos或Cortex,实现全局视图与降采样查询。

一、安装 Prometheus

1. 下载 Prometheus

复制代码
sudo apt update    #更新软件包列表
wget https://githubfast.com/prometheus/prometheus/releases/download/v2.53.2/prometheus-2.53.2.linux-amd64.tar.gz

2. 解压并移动文件

复制代码
tar xvf prometheus-2.53.2.linux-amd64.tar.gz
sudo mv prometheus-2.53.2.linux-amd64 /usr/local/prometheus-2.53.2   # 移动到系统目录
sudo ln -s /usr/local/prometheus-2.53.2 /usr/local/prometheus        # 创建软链接便于未来升级

3. 创建专用用户和权限

复制代码
sudo useradd -s /sbin/nologin -M prometheus                  # 创建prometheus用户,禁止登录
sudo chown -R prometheus:prometheus /usr/local/prometheus*   # 授权

4. 创建数据存储目录

复制代码
sudo mkdir -p /data/prometheus
sudo chown -R prometheus:prometheus /data/prometheus/

5. 配置 systemd 服务

复制代码
sudo tee /etc/systemd/system/prometheus.service > /dev/null << 'EOF'
[Unit]
Description=Prometheus
Documentation=https://prometheus.io/
After=network.target

[Service]
Type=simple
User=root
ExecStart=/usr/local/prometheus/prometheus \
  --config.file=/usr/local/prometheus/prometheus.yml \
  --storage.tsdb.path=/data/prometheus \
  --web.enable-lifecycle \
  --web.listen-address=:9090
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

6. 启动 Prometheus 服务

复制代码
# 重新加载systemd配置
sudo systemctl daemon-reload

# 启动并设置开机自启
sudo systemctl start prometheus
sudo systemctl enable prometheus

# 查看状态
sudo systemctl status prometheus --no-pager

7. 访问 Prometheus Web UI

打开浏览器访问:http://<IP>:9090

二、安装 Grafana

1. 添加 Grafana 官方仓库

复制代码
# 安装依赖
sudo apt-get install -y software-properties-common wget

# 添加GPG密钥
wget -q -O - https://packages.grafana.com/gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/grafana.gpg

# 添加仓库
echo "deb [signed-by=/usr/share/keyrings/grafana.gpg] https://packages.grafana.com/oss/deb stable main" | \
    sudo tee /etc/apt/sources.list.d/grafana.list

2. 更新并安装 Grafana

复制代码
sudo apt-get update
sudo apt-get install grafana -y

3 启动 Grafana 服务

复制代码
sudo systemctl daemon-reload
sudo systemctl start grafana-server
sudo systemctl enable grafana-server

# 查看状态
sudo systemctl status grafana-server --no-pager

4. 访问 Grafana Web UI

打开浏览器访问:http://<IP>:3000

  • 默认用户名 : admin
  • 默认密码 : admin

首次登录后会提示修改密码,请立即设置新密码。

三、配置 Grafana 为中文

  1. 登录 Grafana 后,点击左侧齿轮图标 "Administration"
  2. 进入 General > Default preferences
  3. Language 设置为 中文(简体)
  4. 点击 Save, 点击下面的 Save

四、在 Grafana 中添加 Prometheus 数据源

  1. 登录 Grafana
  2. 点击左侧 连接 号,选择 "数据源(Data Source)"
  3. 选择 Prometheus
  4. HTTP 区域的 URL 输入框中填写:http://localhost:9090
  5. 向下滚动,点击 Save & Test
  6. 如果显示 "绿色√",表示连接成功。

五、监控本机指标 ------ 安装 Node Exporter

1. 下载并运行 Node Exporter

复制代码
wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz
tar xvf node_exporter-*.tar.gz
sudo cp node_exporter-*/node_exporter /usr/local/bin/

创建一个 systemd 服务来管理 Node Exporter

复制代码
sudo tee /etc/systemd/system/node-exporter.service > /dev/null << 'EOF'
[Unit]
Description=Node Exporter
After=network.target

[Service]
User=root
ExecStart=/usr/local/bin/node_exporter
Restart=always

[Install]
WantedBy=multi-user.target
EOF

启用并启动服务

复制代码
sudo systemctl daemon-reload
sudo systemctl start node-exporter
sudo systemctl enable node-exporter

2. 配置 Prometheus 抓取 Node Exporter

编辑 Prometheus 配置文件:

复制代码
sudo vim /usr/local/prometheus/prometheus.yml

scrape_configs 下添加:

复制代码
  - job_name: 'node_exporter'
    static_configs:
      - targets: ['localhost:9100']

3. 重载 Prometheus 配置

复制代码
sudo systemctl reload prometheus
sudo kill -HUP $(pgrep prometheus)     # 或发送 HUP 信号

七、shell脚本自动化安装

复制代码
#!/bin/bash

# +--------------------------------------------------+
# |     Ubuntu 自动部署 Prometheus + Grafana        |
# |     作者:LoneEon
# |     2025 年 9 月 29 日
# |     适用于 Ubuntu 20.04/22.04 LTS                |
# +--------------------------------------------------+

set -e  # 遇到错误立即退出

# 颜色定义
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

echo -e "${GREEN}开始部署 Prometheus + Grafana 监控系统(精简版)...${NC}"

# 1. 更新系统
echo -e "${YELLOW}【步骤1】更新系统软件包...${NC}"
sudo apt update && sudo apt upgrade -y
sudo apt install -y wget curl gnupg2 software-properties-common

# 2. 创建专用用户
echo -e "${YELLOW}【步骤2】创建 prometheus 用户...${NC}"
sudo useradd -s /sbin/nologin -M prometheus 2>/dev/null || true

# 3. 下载 Prometheus 2.53.2
echo -e "${YELLOW}【步骤3】下载 Prometheus 2.53.2...${NC}"
wget https://githubfast.com/prometheus/prometheus/releases/download/v2.53.2/prometheus-2.53.2.linux-amd64.tar.gz
tar xvf prometheus-2.53.2.linux-amd64.tar.gz
sudo mv prometheus-2.53.2.linux-amd64 /usr/local/prometheus-2.53.2
sudo ln -sf /usr/local/prometheus-2.53.2 /usr/local/prometheus

# 4. 创建数据目录
echo -e "${YELLOW}【步骤4】创建数据和配置目录...${NC}"
sudo mkdir -p /data/prometheus
sudo chown -R prometheus:prometheus /usr/local/prometheus*
sudo chown -R prometheus:prometheus /data/prometheus

# 5. 创建 prometheus.yml 配置文件
echo -e "${YELLOW}【步骤5】生成 Prometheus 配置文件...${NC}"
sudo tee /usr/local/prometheus/prometheus.yml > /dev/null << 'EOF'
global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']
EOF
sudo chown prometheus:prometheus /usr/local/prometheus/prometheus.yml

# 6. 创建 Prometheus systemd 服务
echo -e "${YELLOW}【步骤6】配置 Prometheus 服务...${NC}"
sudo tee /etc/systemd/system/prometheus.service > /dev/null << 'EOF'
[Unit]
Description=Prometheus
Documentation=https://prometheus.io/
After=network.target

[Service]
Type=simple
User=root
ExecStart=/usr/local/prometheus/prometheus \
  --config.file=/usr/local/prometheus/prometheus.yml \
  --storage.tsdb.path=/data/prometheus \
  --web.enable-lifecycle \
  --web.listen-address=:9090
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

# 7. 添加 Grafana 官方仓库
echo -e "${YELLOW}【步骤7】添加 Grafana 仓库...${NC}"
wget -q -O - https://packages.grafana.com/gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/grafana.gpg
echo "deb [signed-by=/usr/share/keyrings/grafana.gpg] https://packages.grafana.com/oss/deb stable main" | \
    sudo tee /etc/apt/sources.list.d/grafana.list

# 8. 安装 Grafana
echo -e "${YELLOW}【步骤8】安装 Grafana...${NC}"
sudo apt update
sudo apt install -y grafana

# 9. 启动所有服务
echo -e "${YELLOW}【步骤9】启动并启用 Prometheus 和 Grafana 服务...${NC}"
sudo systemctl daemon-reload

# 启动 Prometheus
sudo systemctl start prometheus
sudo systemctl enable prometheus

# 启动 Grafana
sudo systemctl start grafana-server
sudo systemctl enable grafana-server

# 10. 输出完成信息
echo -e "${GREEN}==================================================${NC}"
echo -e "${GREEN}✅ Prometheus + Grafana 部署完成(精简版)!${NC}"
echo -e "${GREEN}==================================================${NC}"
echo
echo -e "${GREEN}📊 Prometheus 访问地址:${NC} http://$(hostname -I | awk '{print $1}'):9090"
echo -e "${GREEN}📈 Grafana 访问地址:${NC}   http://$(hostname -I | awk '{print $1}'):3000"
echo -e "${GREEN}🔑 Grafana 默认账号:${NC}    admin / admin"
echo
echo -e "${YELLOW}📌 首次登录 Grafana 后请立即修改密码!${NC}"
echo
echo -e "${GREEN}🎉 部署成功!${NC}"

八、 常见问题排查

问题 解决方案
apt-get update 报错 GPG 密钥 确保正确执行了 gpg --dearmor 步骤
Grafana 无法启动 检查 /etc/apt/sources.list.d/grafana.list 文件内容是否正确
权限错误 确保 /data/prometheus 目录属于 prometheus 用户: sudo chown -R prometheus:prometheus /data/prometheus/
服务无法开机自启 确认已执行 systemctl enable 命令

通过本文的完整实践,我们成功在Ubuntu系统上部署了Prometheus与Grafana这一强大的监控组合,实现了从数据采集、存储到可视化的闭环。这不仅为系统性能观测提供了有力工具,也为后续构建全面的告警体系和深入的运维分析奠定了坚实基础。

相关推荐
莫克_Cheney2 小时前
Ubuntu 24.04 安装搜狗输入法完整教程
linux·运维·ubuntu
阿巴~阿巴~5 小时前
MySQL索引特性(重点)
服务器·数据库·sql·mysql·ubuntu
woshihonghonga7 小时前
Ubuntu 如何安装.NET6 runtime
linux·ubuntu·.net
铁手飞鹰12 小时前
从零复现论文:深度学习域适应1
linux·pytorch·python·深度学习·ubuntu·ai·迁移学习
1560820721915 小时前
在飞腾D2000/8平台下ubuntu内核添加WX1860和WX1820的驱动
linux·ubuntu
CheungChunChiu17 小时前
在嵌入式 Linux 上配置 PulseAudio 默认输出设备的完整指南
linux·运维·ubuntu·audio·pulseaudio
^Lim17 小时前
ubuntu编译freerype报错找不到libfreetype.la
linux·chrome·ubuntu
davenian19 小时前
< 自用文 备份 script :intar.sh> 使用 tar cvfz 命令打包成 .tar.gz 文件来备份多目标(目录,文件)
ubuntu·bash script
老黄编程20 小时前
禁用内核模块,是否需要执行脚本 $ sudo update-initramfs -u $ sudo update-grub ?
ubuntu