乐于分享
好东西不私藏

从零搭建Prometheus监控:安装、配置与生产实践全指南

从零搭建Prometheus监控:安装、配置与生产实践全指南
监控是运维的眼睛。本文手把手带你部署Prometheus,从下载安装到生产级配置,一文搞定云原生时代的监控利器。

一、Prometheus是什么?

Prometheus(普罗米修斯)是一套开源的系统监控和告警框架,由SoundCloud开发,后捐赠给CNCF(云原生计算基金会)。它使用Go语言编写,具备强大的多维数据模型和灵活的查询语言PromQL。

Prometheus通常与Grafana配合使用:Prometheus负责数据采集和存储,Grafana负责可视化展示。

核心架构组件

组件功能
Prometheus Server核心服务,负责抓取和存储时序数据
Exporter数据采集器,暴露指标接口(如node_exporter)
Alertmanager告警管理,负责告警路由、去重、通知
Pushgateway短期任务推送网关
Grafana数据可视化(第三方)

二、Prometheus vs Zabbix:如何选择?

维度PrometheusZabbix
开发语言GoPHP + C + Go
部署方式二进制解压即用,极其轻量需要数据库、PHP环境,部署复杂
学习曲线PromQL门槛较高Web界面友好,易于上手
监控方式各类Exporter,基于HTTP拉取模板+Agent,支持多种协议
数据存储自带TSDB时序数据库依赖MySQL/PostgreSQL
适用场景微服务、容器、Kubernetes传统物理机、网络设备、硬件
扩展性原生支持服务发现,动态扩展需要手动添加或通过API

选型建议

  • 容器/K8s环境 → Prometheus(事实标准)

  • 传统IDC、硬件监控 → Zabbix

  • 混合环境 → 两者结合使用


三、极速部署指南

3.1 环境准备:时间同步

监控系统对时间精度要求极高,所有节点必须时间同步:

# 配置NTP定时同步(每2分钟)crontab -e*/2 * * * * /sbin/ntpdate ntp1.aliyun.com &>/dev/null# 验证时间date

补充建议:生产环境推荐使用chrony替代ntpdate,精度更高且支持平滑调整:

yum install -y chronysystemctl enable --now chronydchronyc sources -v

3.2 下载与安装

# 创建应用目录mkdir -p /app/# 下载(生产环境选择LTS版本)# AMD64架构wget https://github.com/prometheus/prometheus/releases/download/v3.5.3/prometheus-3.5.3.linux-amd64.tar.gz# ARM64架构# wget https://github.com/prometheus/prometheus/releases/download/v3.5.3/prometheus-3.5.3.linux-arm64.tar.gz# 解压tar xf prometheus-3.5.3.linux-amd64.tar.gz -C /app/# 创建软链接(方便版本升级)ln -s /app/prometheus-3.5.3.linux-amd64/ /app/prometheus

目录结构说明

/app/prometheus/├── prometheus          # 主程序二进制文件├── promtool            # 配置检查和调试工具├── prometheus.yml      # 主配置文件├── consoles/           # 内置控制台模板├── console_libraries/  # 控制台模板库└── data/               # TSDB数据存储目录(启动后自动创建)

3.3 启动服务

方式一:前台启动(调试用)

cd /app/prometheus./prometheus

启动成功后可以看到关键日志:

msg="Server is ready to receive web requests."

方式二:后台启动(临时方案)

nohup /app/prometheus/prometheus &>>/var/log/prometheus.log &

方式三:Systemd管理(生产推荐)

cat > /usr/lib/systemd/system/prometheus.service << 'EOF'[Unit]Description=Prometheus ServerAfter=network.targetWants=network-online.target[Service]Type=simpleUser=prometheusGroup=prometheusExecStart=/app/prometheus/prometheus \--config.file=/app/prometheus/prometheus.yml \--web.listen-address=0.0.0.0:9090 \--web.max-connections=512 \--storage.tsdb.path=/app/prometheus/data/ \--storage.tsdb.retention.time=30dExecReload=/bin/kill -HUP$MAINPIDRestart=on-failureRestartSec=5sLimitNOFILE=65536[Install]WantedBy=multi-user.targetEOF

注意:Type必须设置为simple,不能用notify,因为Prometheus不支持sd_notify协议。

# 创建专用用户(安全最佳实践)useradd -r -s /sbin/nologin prometheuschown -R prometheus:prometheus /app/prometheus# 加载并启动systemctl daemon-reloadsystemctl enable --now prometheus.service# 检查状态systemctl status prometheus.service# 查看实时日志journalctl -f -u prometheus.service

3.4 开机自启动

配置开机自启动有两种方式:

方式一:Systemd enable(推荐)

# 设置开机自启(上面已包含,单独列出便于理解)systemctl enable prometheus.service# 验证是否已设置systemctl is-enabled prometheus.service# 输出 enabled 即表示成功

原理:systemctl enable 会在 /etc/systemd/system/multi-user.target.wants/ 下创建软链接,系统启动到多用户模式时自动拉起服务。

方式二:rc.local(传统方式,不推荐)

如果没有使用Systemd管理,也可以写入rc.local:

# 确保rc.local有执行权限chmod +x /etc/rc.d/rc.local# 追加启动命令cat >> /etc/rc.local << 'EOF'/app/prometheus/prometheus \--config.file=/app/prometheus/prometheus.yml \--web.listen-address=0.0.0.0:9090 \--web.max-connections=512 \  &>/var/log/prometheus.log &EOF

两种方式对比

维度systemctl enablerc.local
服务管理支持start/stop/restart/status仅启动,无法管理
依赖控制可指定After/Wants依赖顺序无依赖管理
异常重启支持Restart=on-failure自动恢复进程挂了不会自动拉起
日志管理journalctl统一管理需手动管理日志文件
推荐程度生产环境首选仅作为备用方案

3.4 验证访问

浏览器访问:http://<服务器IP>:9090

  • Status → Targets:查看监控目标状态

  • Graph:执行PromQL查询

  • Alerts:查看告警规则


四、命令行核心选项详解

选项说明默认值
--config.file配置文件路径prometheus.yml
--web.listen-addressWeb监听地址和端口0.0.0.0:9090
--web.max-connections最大并发连接数512
--storage.tsdb.pathTSDB数据存储路径data/
--storage.tsdb.retention.time数据保留时间15d
--storage.tsdb.retention.size数据保留大小上限0(无限制)
--log.level日志级别(debug/info/warn/error)info
--log.format日志格式(logfmt/json)logfmt
--web.enable-lifecycle启用热重载APIfalse

生产建议:添加--web.enable-lifecycle后,可以通过HTTP请求热重载配置,无需重启服务:

curl-X POST http://localhost:9090/-/reload

五、配置文件深度解析

5.1 完整配置结构

# 全局配置global:  scrape_interval15s        # 数据采集间隔(多久拉取一次指标)  evaluation_interval15s    # 规则评估间隔(多久执行一次告警规则)  scrape_timeout10s         # 采集超时时间# 告警管理器配置alerting:  alertmanagers:    - static_configs:        - targets:            - alertmanager:9093# 告警规则文件rule_files:  - "rules/*.yml"# 数据采集配置(核心)scrape_configs:# 监控Prometheus自身  - job_name"prometheus-server"    static_configs:      - targets: ["localhost:9090"]

5.2 采集配置方式

静态配置(适合固定节点):

scrape_configs:  - job_name"linux-nodes"    static_configs:      - targets:          - "192.168.2.10:9100"          - "192.168.2.11:9100"          - "192.168.2.12:9100"        labels:          envproduction          teamops

基于文件的服务发现(推荐,修改无需重启):

scrape_configs:  - job_name"linux-nodes"    file_sd_configs:      - files:          - "targets/nodes/*.json"        refresh_interval30s

对应的JSON文件:

[  {"targets": ["192.168.2.10:9100""192.168.2.11:9100"],"labels": {"env""production","datacenter""bj"    }  }]

5.3 配置检查工具

修改配置后,务必先验证语法:

/app/prometheus/promtool check config /app/prometheus/prometheus.yml

六、常用Exporter部署(补充)

Prometheus通过Exporter采集不同对象的指标:

Exporter用途默认端口
node_exporterLinux系统指标(CPU/内存/磁盘/网络)9100
mysqld_exporterMySQL数据库指标9104
redis_exporterRedis指标9121
nginx-prometheus-exporterNginx指标9113
blackbox_exporterHTTP/TCP/ICMP探测9115
cadvisor容器指标8080

Node Exporter快速部署示例

# 下载wget https://github.com/prometheus/node_exporter/releases/download/v1.11.1/node_exporter-1.11.1.linux-amd64.tar.gz# 解压并启动tar xf node_exporter-1.11.1.linux-amd64.tar.gz -C /app/ln-s /app/node_exporter-1.11.1.linux-amd64 /app/node_exporternohup /app/node_exporter/node_exporter &>/var/log/node_exporter.log &# 验证curl http://localhost:9100/metrics

七、安全加固建议(补充)

生产环境中Prometheus的安全不可忽视:

  1. 网络隔离:Prometheus端口不要暴露到公网,通过Nginx反向代理+认证访问

  2. Basic Auth认证

# web.yml(Prometheus原生支持)basic_auth_users:  admin$2y$10$xxx...  # bcrypt加密的密码

启动时加载:

--web.config.file=/app/prometheus/web.yml
  1. TLS加密:配置HTTPS避免数据被窃听

  2. 最小权限:使用非root用户运行服务

  3. 防火墙:仅允许Grafana和告警服务访问9090端口


八、常见问题排查

问题原因解决方案
启动失败,Type=notifyPrometheus不支持notify改为Type=simple
Target状态DOWNExporter未启动/防火墙检查端口连通性
数据丢失retention到期/磁盘满调整retention或扩容
内存占用高采集目标过多/查询复杂优化标签、分片部署
配置重载失败YAML语法错误使用promtool检查

九、总结

Prometheus部署清单:

  1. 所有节点时间同步(chrony/ntpdate)

  2. 二进制解压安装,创建软链接便于升级

  3. 使用Systemd管理,Type设为simple

  4. 配置文件使用file_sd_configs实现动态发现

  5. 修改配置前用promtool验证语法

  6. 生产环境开启认证和TLS

  7. 合理设置数据保留策略,监控磁盘使用

下一篇我们将介绍如何配置Grafana实现精美的监控大屏展示,敬请关注。