Ubuntu 系统安装 Prometheus+Grafana(附shell脚本一键部署↓)
Prometheus与Grafana的组合是云原生环境下高效监控与可视化的黄金搭档,二者通过技术互补形成完整的监控解决方案,适用于容器化应用、微服务架构及传统IT环境的性能管理。
Prometheus:云原生监控的核心引擎
- 技术定位与优势
Prometheus是由SoundCloud开发、后纳入CNCF的开源监控系统,采用Pull模式主动拉取指标数据,支持多维数据模型(时间序列由指标名和键值对标签构成)。其核心优势包括:- 高效存储:单机每秒可采集千万级指标,320万时间序列存储60天仅需228GB磁盘。
- 灵活查询:PromQL查询语言支持复杂数学运算,适合动态服务架构的监控需求。
- 服务发现:原生支持Kubernetes、DNS、Consul等动态目标发现,适配容器化环境。
- 自治架构:单节点独立运行,不依赖分布式存储,故障时仍可提供基础监控能力。
- 典型应用场景
- Kubernetes集群监控:通过Node Exporter采集节点资源(CPU、内存、磁盘),Kube-State-Metrics监控Pod/Deployment状态,cAdvisor跟踪容器资源使用。
- 微服务性能分析:结合Blackbox Exporter监控服务存活性,通过自定义指标分析接口响应时间、错误率。
- 日志与事件关联:与Loki集成实现日志与指标的交叉分析,加速故障定位。
Grafana:数据可视化的终极利器
- 技术定位与优势
Grafana是基于Go的开源可视化平台,支持多数据源(Prometheus、InfluxDB、MySQL等),提供动态仪表盘、告警规则配置及插件扩展能力。其核心价值包括:- 直观展示:折线图、热力图、仪表盘等20+种图表类型,支持时间范围对比、数据下钻。
- 告警管理:通过Alerting模块定义阈值规则,支持Email、Slack、Webhook等多渠道通知。
- 混合数据源:单图聚合不同数据源指标(如Prometheus指标+MySQL业务数据)。
- 模板变量:动态生成仪表盘(如按服务名筛选Pod指标),提升复用性。
- 典型应用场景
- 实时监控大屏:构建IT运维驾驶舱,集中展示核心业务指标(如订单量、交易成功率)。
- 告警中心:集成Alertmanager实现告警收敛、分组,减少噪音干扰。
- 自定义报表:通过SQL或PromQL生成日报/周报,支持PDF导出与分享。
Prometheus + Grafana:1+1>2的监控实践
- 技术协同原理
Prometheus负责数据采集与存储,Grafana通过API拉取指标并可视化,二者通过以下机制深度集成:- 数据源配置:在Grafana中添加Prometheus数据源,指定URL(如
http://prometheus-server:9090
)。 - 仪表盘模板:利用社区模板(如Node Exporter Full、Kubernetes Cluster)快速部署监控面板。
- 告警联动:Grafana Alerting调用Alertmanager API,实现可视化告警规则配置与通知。
- 数据源配置:在Grafana中添加Prometheus数据源,指定URL(如
- 部署架构示例
- 单机部署:同一服务器安装Prometheus(端口9090)与Grafana(端口3000),通过Nginx反向代理实现统一访问。
- 集群部署:Prometheus联邦模式分散采集压力,Grafana集群通过HA配置保障高可用。
- 安全配置:启用Prometheus TLS认证,Grafana配置LDAP集成实现权限管理。
- 最佳实践建议
- 标签设计:遵循
<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 为中文
- 登录 Grafana 后,点击左侧齿轮图标 "Administration"
- 进入 General > Default preferences
- 将 Language 设置为 中文(简体)
- 点击 Save,点击下面的 Save
四、在 Grafana 中添加 Prometheus 数据源
- 登录 Grafana
- 点击左侧 连接 号,选择 "数据源(Data Source)"
- 选择 Prometheus
- 在 HTTP 区域的 URL 输入框中填写:http://localhost:9090
- 向下滚动,点击 Save & Test
- 如果显示 "绿色√",表示连接成功。
五、监控本机指标 —— 安装 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 Colorecho -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: 15sevaluation_interval: 15sscrape_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这一强大的监控组合,实现了从数据采集、存储到可视化的闭环。这不仅为系统性能观测提供了有力工具,也为后续构建全面的告警体系和深入的运维分析奠定了坚实基础。