文章目录
- 一、Prometheus安装与配置概述📘
- 二、安装Prometheus 💾
- 2.1 访问Prometheus官方网站 🌐
- 2.2 选择适合的版本🔍
- 2.3 下载Prometheus ⬇️
- 2.4 解压安装包📂
- 2.5 运行Prometheus 🚀
- 三、Prometheus配置文件详解📖
- 3.1 prometheus.yml🔧
- 3.2 prometheus.service🛠️
- 四、实战演练:生产搭建基础监控环境🔨
- 4.1 创建普通用户管理pormetheus 👤
- 4.2 解压prometheus.tar.gz📦
- 4.3 更改prometheus软件包名称✂️
- 4.4 编辑prometheus.service文件📝
- 4.4 启动prometheus.service🔌
- 4.5 查看服务是否正常启动🔍
- 五、基于云原生的部署方案 🚀
- 5.1 使用Docker部署Prometheus 🐳
- 5.1.1 获取Prometheus Docker镜像 📸
- 5.1.2 准备prometheus数据目录和配置文件
- 5.1.3 编辑prometheus.yml,添加要监控的指标项
- 5.1.4 运行Prometheus Docker容器 🏃
- 5.1.5 如果添加监控项,可直接重新加载配置使其生效
- 5.1.6 验证Docker部署 ✅
- 5.2 利用Docker-Compose简化部署 📘
- 5.2.1 编写docker-compose.yml配置文件 📜
- 5.2.2 使用Docker-Compose启动服务 🚀
- 5.2.3 验证Docker部署 ✅
- 5.3 在Docker Swarm中部署Prometheus 🐝——待更新,敬请期待!!!
- 5.4 在Kubernetes(K8s)上部署Prometheus 🚀——待更新,敬请期待!!!
- 相关资料下载地址📚
一、Prometheus安装与配置概述📘
安装步骤
1.下载Prometheus:从Prometheus的官方网站下载适合你操作系统的二进制包。
2.解压安装包:将下载的压缩包解压到你想要安装的目录。
3.运行Prometheus:在解压后的目录中,找到prometheus或prometheus.exe(Windows系统)并执行它。这将会启动Prometheus服务器。
配置文件的基本结构
Prometheus的配置文件通常名为prometheus.yml,它定义了Prometheus如何监控目标系统。配置文件的基本结构大致如下:
1.global:全局配置部分,可以设置一些全局的参数,如抓取间隔(scrape_interval)、评估规则间隔(evaluation_interval)等。
2.scrape_configs:抓取配置部分,定义了Prometheus从哪些目标系统抓取数据。每个目标系统可以配置为一个job,包括目标系统的地址(targets)、端口(port)、协议(scheme)等。
3.alerting:告警配置部分(可选),用于定义告警规则。告警规则描述了当监控数据满足某些条件时,Prometheus应该触发告警。
4.remote_write 和 remote_read(可选):分别用于配置Prometheus将数据存储到远程存储系统和从远程存储系统读取数据的设置。
作用和重要性
1.global 部分的全局配置决定了Prometheus的基本行为,如数据抓取的频率和告警规则评估的频率。
2.scrape_configs 部分定义了Prometheus需要监控的目标系统,是配置的核心部分。
3.alerting 部分使得Prometheus能够根据监控数据触发告警,帮助运维人员及时发现和处理问题。
4.remote_write 和 remote_read 部分使得Prometheus能够与其他系统(如远程存储系统)集成,扩展其功能。
二、安装Prometheus 💾
注意事项和常见问题
1.权限问题:确保你有足够的权限来执行安装和启动Prometheus的命令。如果你使用的是Linux系统,可能需要使用sudo命令来获取管理员权限。
2.防火墙设置:Prometheus默认监听在9090端口。如果你的服务器启用了防火墙,请确保9090端口是开放的,以便外部客户端能够访问Prometheus的Web UI。
3.配置文件:Prometheus的配置文件(prometheus.yml)对于其运行至关重要。在安装过程中,请确保配置文件的路径和设置是正确的。如果你修改了配置文件,请务必重新加载或重启Prometheus以使更改生效。
4.日志和错误消息:如果Prometheus无法启动或运行不正常,请检查终端或日志文件中的错误消息。这些消息通常会提供关于问题的详细信息,并帮助你找到解决方案。
5.无法下载资料:如果无法下载资料可跳转到最后一章”相关资料下载地址“,进行离线下载
2.1 访问Prometheus官方网站 🌐
- 打开浏览器,访问Prometheus的官方网站:https://prometheus.io/download/
2.2 选择适合的版本🔍
- 在下载页面,你将看到不同操作系统的Prometheus二进制包。根据你的操作系统选择适合的版本。例如,如果你使用的是Linux 64位系统,就选择prometheus-x.x.x.linux-amd64.tar.gz(其中x.x.x是版本号)
2.3 下载Prometheus ⬇️
- 点击所选版本的下载链接,将Prometheus的二进制包下载到你的本地计算机。
2.4 解压安装包📂
- 将下载的Prometheus压缩包解压到你想要安装的目录。你可以使用命令行工具(如tar)来完成这个步骤。解压后,你将看到一个名为prometheus-x.x.x.linux-amd64的目录,其中包含Prometheus的二进制文件和其他相关文件。
tar -xzf prometheus-x.x.x.linux-amd64.tar.gz
2.5 运行Prometheus 🚀
- 进入解压后的目录,并运行Prometheus服务器。在Linux下,你可以使用如下命令。这样就使用默认的配置文件prometheus.yml启动了Prometheus服务器。如果一切正常,你应该能在终端看到Prometheus的启动日志。
cd prometheus-x.x.x.linux-amd64
./prometheus --config.file=prometheus.yml
如下执行结果示例....
......
level=info component="rule manager" msg="Starting rule manager..."
三、Prometheus配置文件详解📖
3.1 prometheus.yml🔧
global
global部分用于定义全局的配置参数,这些参数可以应用于整个Prometheus实例。
- scrape_interval: 定义Prometheus抓取目标的时间间隔,默认为1分钟。
- evaluation_interval: 定义Prometheus评估告警规则的时间间隔,默认为1分钟。
global:
scrape_interval: 15s # 设置为15秒
evaluation_interval: 15s # 设置为15秒
scrape_configs
scrape_configs部分定义了Prometheus如何抓取目标的数据。每个scrape_config块代表一组抓取目标及其相关的配置
- job_name: 用于标识这组抓取目标的名称。
- static_configs: 静态配置的目标列表。
- targets: 目标地址列表,Prometheus将从这些地址抓取数据。
注意:
为了监控不同的服务和应用,你通常需要为每个服务或应用配置一个或多个scrape_config块。每个块定义了一组具有相同配置参数的目标。例如,你可能有一个用于监控所有数据库实例的scrape_config块,以及另一个用于监控所有Web服务器的块。
示例:监控一个名为“node_exporter”和”pushgateway“的服务
scrape_configs:
- job_name: 'node_exporter'
static_configs:
- targets: ['localhost:9100'] # 假设node_exporter运行在本地9100端口
- job_name: 'pushgateway'
static_configs:
- targets: ['localhost:9080'] # 假设pushgateway运行在本地9080端口
alerting
alerting部分用于定义告警相关的配置。
- alert_relabel_configs: 用于在发送告警之前重新标记告警的标签。
- alertmanagers: 定义Prometheus将告警发送给哪些Alertmanager实例。
示例:配置Prometheus将告警发送给Alertmanager实例
alerting:
alertmanagers:
- static_configs:
- targets:
- localhost:9093 # 假设Alertmanager运行在本地9093端口
rule_files
虽然你在请求中没有直接提到rule_files,但这是配置告警规则和记录规则的关键部分。
- rule_files: 指定Prometheus加载告警和记录规则的文件列表。
示例:加载告警规则文件(注意:近几个版本才支持)
rule_files:
- "alert_rules.yml" # 假设告警规则定义在alert_rules.yml文件中
3.2 prometheus.service🛠️
基本配置
- –config.file=“prometheus.yml”
Prometheus的配置文件路径。这个文件定义了Prometheus如何发现目标、抓取指标等。
Web服务配置
- –web.listen-address=“0.0.0.0:9090”
Prometheus的UI、API和遥测数据的监听地址和端口。默认情况下,Prometheus在9090端口上监听所有接口。 - –web.config.file=“”
用于指定启用TLS或身份验证的配置文件路径。 - –web.read-timeout=5m
请求读取超时前的最大持续时间,以及空闲连接的关闭时间。 - –web.max-connections=512
最大并发连接数。 - –web.external-url=<URL>
Prometheus对外可达的URL,通常用于反向代理设置。它用于生成指向Prometheus自身的相对和绝对链接。 - –web.route-prefix=<path>
Web端点的内部路由前缀。默认为–web.external-url的路径部分。 - –web.user-assets=<path>
静态资源目录的路径,可通过/user访问。 - –[no-]web.enable-lifecycle
通过HTTP请求启用关闭和重载。 - –[no-]web.enable-admin-api
启用用于管理控制操作的API端点。 - –[no-]web.enable-remote-write-receiver
启用接受远程写入请求的API端点。 - –web.console.templates=“consoles”
控制台模板目录的路径,可通过/consoles访问。 - –web.console.libraries=“console_libraries”
控制台库目录的路径。 - –web.page-title=“Prometheus Time Series Collection and Processing Server”
Prometheus实例的文档标题。 - –web.cors.origin=“.*”
CORS源的正则表达式。用于跨域资源共享配置。
存储配置
- –storage.tsdb.path=“data/”
指标存储的基本路径。仅用于服务器模式。 - –storage.tsdb.retention.time 和 --storage.tsdb.retention.size
分别指定在存储中保留样本的时间长度和最大字节数。 - –[no-]storage.tsdb.no-lockfile
不在数据目录中创建锁文件。 - –storage.tsdb.head-chunks-write-queue-size=0
实验性功能,用于写入头块到磁盘的队列大小。 - –storage.agent.path=“data-agent/”
仅用于代理模式的指标存储基本路径。 - –storage.agent.wal-compression
压缩代理的WAL(写前日志)。 - –storage.agent.retention.min-time 和 --storage.agent.retention.max-time
定义代理WAL截断时样本的最小和最大年龄。
告警通知配置
- —alertmanager.notification-queue-capacity=10000
待处理的Alertmanager通知队列的容量。
查询配置
- –query.lookback-delta=5m
在表达式评估和联邦过程中检索指标的最大回溯持续时间。 - –query.timeout=2m
查询可能执行的最长时间,之后将被中止。 - –query.max-concurrency=20
最大并发查询数。 - –query.max-samples=50000000
单个查询可以加载到内存中的最大样本数。这也限制了查询可以返回的样本数。
日志配置
- –log.level=info
仅记录给定严重程度或以上的日志消息。 - –log.format=logfmt
日志消息的输出格式。
功能标志
- –enable-feature= …
启用特定的功能标志。这可以用于启用实验性或高级功能。
四、实战演练:生产搭建基础监控环境🔨
通过一个实战案例,描述如何搭建一个基础的Prometheus监控环境,这里使用的是非root用户管理prometheus
4.1 创建普通用户管理pormetheus 👤
useradd deploy
4.2 解压prometheus.tar.gz📦
注意
我的是x86,所以使用prometheus-2.47.0.linux-amd64.tar.gz,您可以使用uname -a命令查看系统架构
tar xvf prometheus-2.47.0.linux-amd64.tar.gz -C /home/deploy/
4.3 更改prometheus软件包名称✂️
mv /home/deploy/prometheus-2.47.0.linux-amd64 /home/deploy/prometheus
4.4 编辑prometheus.service文件📝
注意
prometheus相关参数您可参考上述参数详解,根据实际环境需求自行更改
cat > /etc/systemd/system/prometheus.service <<EOF
[Unit]
Description=Prometheus Server
After=network.target
Documentation=https://prometheus.io/docs/introduction/overview/
[Service]
Type=simple
User=deploy
Group=deploy
ExecStart=/home/deploy/prometheus/prometheus \
--config.file=/home/deploy/prometheus/prometheus.yml \
--web.listen-address=0.0.0.0:9090 \
--web.read-timeout=5m \
--web.max-connections=4096 \
--storage.tsdb.retention=1d \
--storage.tsdb.min-block-duration=1h \
--storage.tsdb.path=/home/deploy/prometheus/data \
--query.timeout=2m \
--web.enable-lifecycle \
--log.level=info \
--log.format=logfmt
ExecReload=/bin/kill -HUP
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
4.4 启动prometheus.service🔌
sudo systemctl daemon-reload
sudo systemctl enable --now prometheus.service
4.5 查看服务是否正常启动🔍
# 查看service服务是否启动
sudo systemctl status prometheus.service
# 查看端口是否存在
sudo ss -ntulp | grep 9090
五、基于云原生的部署方案 🚀
5.1 使用Docker部署Prometheus 🐳
5.1.1 获取Prometheus Docker镜像 📸
- 从docker-hub下载镜像
docker pull prom/prometheus:v2.52.0
docker tag prom/prometheus:v2.52.0 prometheus:v2.52.0
- 从阿里云下载镜像(如果访问不到docker-hub)
// 如果访问不到docker-hub的可以访问如下地址
docker pull registry.cn-beijing.aliyuncs.com/insights-ops/prometheus:v2.52.0
docker tag registry.cn-beijing.aliyuncs.com/insights-ops/prometheus:v2.52.0 prometheus:v2.52.0
- 从百度网盘下载镜像
docker load -i prometheus-v2.52.0.tar
docker tag prom/prometheus:v2.52.0 prometheus:v2.52.0
5.1.2 准备prometheus数据目录和配置文件
mkdir -p /usr/local/prometheus/prometheus-data
touch /usr/local/prometheus/prometheus.yml
chmod -R 0777 /usr/local/prometheus/
5.1.3 编辑prometheus.yml,添加要监控的指标项
vi /usr/local/prometheus/prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
alerting:
alertmanagers:
- static_configs:
- targets:
rule_files:
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
5.1.4 运行Prometheus Docker容器 🏃
- 开启持久化存储
mkdir /usr/local/prometheus
docker run -itd \
--name prometheus \
-p 9090:9090 \
-v /etc/localtime:/etc/localtime:ro \
-v /usr/local/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
-v /usr/local/prometheus/prometheus-data:/prometheus \
prometheus:v2.52.0 \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/prometheus \
--web.console.libraries=/usr/share/prometheus/console_libraries \
--web.console.templates=/usr/share/prometheus/consoles \
--web.enable-lifecycle \
--log.level=debug
5.1.5 如果添加监控项,可直接重新加载配置使其生效
- 我在启动参数中添加了
--web.enable-lifecycle
标志来启用 Prometheus 的生命周期 API。现在,你可以通过发送 POST 请求到 Prometheus 的/-/reload
端点来重新加载配置文件,而无需重启 Prometheus 容器。
curl -X POST http://localhost:9090/-/reload
5.1.6 验证Docker部署 ✅
# 查看容器是否正常启动,Status为Up为正常
docker ps -a | grep prometheus
# 端口监听
ss -ntulp | grep 9090
5.2 利用Docker-Compose简化部署 📘
5.2.1 编写docker-compose.yml配置文件 📜
version: '3'
services:
prometheus:
image: prometheus:v2.52.0
restart: always
container_name: prometheus
volumes:
- /etc/localtime:/etc/localtime:ro
- /usr/local/prometheus/:/etc/prometheus/
- /usr/local/prometheus/prometheus-data:/prometheus-data
command:
--config.file=/etc/prometheus/prometheus.yml
--web.listen-address=0.0.0.0:9090
--web.read-timeout=5m
--web.max-connections=4096
--storage.tsdb.retention="3d"
--storage.tsdb.min-block-duration=1h
--storage.tsdb.path=/prometheus-data
--web.enable-lifecycle
ports:
- 9090:9090
5.2.2 使用Docker-Compose启动服务 🚀
docker-compose up -d
5.2.3 验证Docker部署 ✅
# 查看容器是否正常启动,Status为Up为正常
docker ps -a | grep prometheus
# 端口监听
ss -ntulp | grep 9090