【30天精通Prometheus:一站式监控实战指南】第2天:Prometheus从入门到实战:安装、配置详解与生产环境搭建指南

亲爱的读者们👋

  欢迎加入【30天精通Prometheus】专栏!📚 在这里,我们将探索Prometheus的强大功能,并将其应用于实际监控中。这个专栏都将为你提供宝贵的实战经验。🚀

  Prometheus是云原生和DevOps的核心监控工具,我们将从基础概念开始,逐步涵盖配置、查询、告警和可视化。💪

  在接下来的30天里,我们将解锁Prometheus的实战技巧,通过案例和分享,助你深入理解其工作原理。📆

  目标:30天后,你将熟练掌握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官方网站 🌐

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

5.3 在Docker Swarm中部署Prometheus 🐝——待更新,敬请期待!!!

5.4 在Kubernetes(K8s)上部署Prometheus 🚀——待更新,敬请期待!!!

相关资料下载地址📚

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜提yBei冰美式

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值