快速部署Prometheus:二进制部署、Docker部署、配置文件详解
好,咱们直接进入正题。Prometheus的部署方式其实就两种主流选择:二进制和Docker。我个人更推荐生产环境用二进制,测试环境用Docker。为什么?往下看你就明白了。
一、二进制部署:最稳的方式
二进制部署,说白了就是把Prometheus的可执行文件下载下来,直接跑。这种方式的好处是——没有依赖,没有容器层的性能损耗。我在项目中遇到过几次因为Docker daemon异常导致监控中断的事故,从那以后,核心监控节点我全换成了二进制。
1. 下载与解压
# 去官网下载最新版(或者用我下面这个链接)
wget https://github.com/prometheus/prometheus/releases/download/v2.45.0/prometheus-2.45.0.linux-amd64.tar.gz
# 解压
tar -xzf prometheus-2.45.0.linux-amd64.tar.gz
# 进入目录
cd prometheus-2.45.0.linux-amd64/
解压后你会看到几个关键文件:prometheus(主程序)、promtool(检查工具)、prometheus.yml(配置文件)。嗯,这里要注意,promtool是个好东西,后面验证配置时会用到。
2. 启动命令
# 最简单的启动方式
./prometheus --config.file=prometheus.yml
# 带参数启动(我常用的方式)
./prometheus \
--config.file=prometheus.yml \
--storage.tsdb.path=/data/prometheus \
--web.listen-address=0.0.0.0:9090 \
--log.level=info
启动后,访问 http://你的IP:9090,看到Prometheus的Web界面就算成功了。
--storage.tsdb.path 我必指定。
二、Docker部署:快速但要注意坑
Docker部署适合快速验证,或者你已经在用容器化运维。但我要提醒你——Docker部署Prometheus,数据持久化是个大坑。
1. 简单启动
docker run -d \
--name prometheus \
-p 9090:9090 \
prom/prometheus
这样启动,容器一删数据全丢。你想想看,生产环境谁敢这么干?
2. 带持久化的启动
# 先创建数据目录和配置文件目录
mkdir -p /data/prometheus/data
mkdir -p /data/prometheus/config
# 把prometheus.yml放到config目录下
# 启动容器
docker run -d \
--name prometheus \
--restart=always \
-p 9090:9090 \
-v /data/prometheus/data:/prometheus \
-v /data/prometheus/config:/etc/prometheus \
prom/prometheus
chown 65534:65534 /data/prometheus/data。65534就是nobody的UID。
三、配置文件详解:核心中的核心
配置文件 prometheus.yml 是Prometheus的大脑。说白了,它告诉Prometheus三件事:全局怎么跑、规则文件在哪、要抓谁的数据。
1. global 全局配置
global:
scrape_interval: 15s # 默认抓取间隔
evaluation_interval: 15s # 规则评估间隔
scrape_timeout: 10s # 抓取超时时间
这里有个细节:scrape_timeout 必须小于 scrape_interval。为什么?你想想看,如果超时时间比抓取间隔还长,那上一次抓取还没结束,下一次又开始了,数据会乱套。
| 参数 | 说明 | 我的建议值 |
|---|---|---|
| scrape_interval | 抓取频率 | 15s(默认) |
| evaluation_interval | 告警规则评估频率 | 15s(默认) |
| scrape_timeout | 单次抓取超时 | 10s |
2. rule_files 规则文件
rule_files:
- "rules/*.yml" # 加载rules目录下所有yml文件
- "alerts.yml" # 加载单个文件
规则文件里放的是告警规则和记录规则。我个人习惯把告警规则和记录规则分开存放,比如 alerts/ 和 records/,这样维护起来清晰很多。
3. scrape_configs 抓取配置
这是最核心的部分。Prometheus要抓谁的数据,全在这里定义。
scrape_configs:
# 抓Prometheus自身
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
# 抓node_exporter
- job_name: 'node_exporter'
static_configs:
- targets: ['192.168.1.10:9100', '192.168.1.11:9100']
job_name 代表一类监控目标。比如 node_exporter 负责所有机器的系统指标,mysql_exporter 负责数据库指标。这样分类,后面在Grafana里做面板时方便很多。
四、启动与验证:别急着上线
配置写好了,别急着直接启动。先用 promtool 检查一下配置有没有语法错误。
# 检查配置文件
./promtool check config prometheus.yml
# 如果输出 "SUCCESS" 说明没问题
# 如果有错误,会明确告诉你哪一行有问题
验证通过后,启动Prometheus。然后做三件事验证:
- 看Web界面:访问
http://IP:9090,确认页面能打开 - 看Targets状态:点击
Status->Targets,所有目标应该是UP状态 - 查一条数据:在查询框输入
up,应该能看到返回结果
DOWN,别慌。先检查网络通不通:curl http://目标IP:端口/metrics。如果curl能拿到数据,那就是Prometheus配置问题;如果curl都拿不到,那就是目标机器的问题。
嗯,到这里,Prometheus的部署和基本配置就完成了。下一章我们会聊Grafana的接入和可视化,到时候你会看到这些配置的价值。