【Prometheus基于文件的服务发现】

提示:本文原创作品,良心制作,干货为主,简洁清晰,一看就会

文章目录


前言

在Prometheus监控体系中,服务发现是管理采集目标的核心能力。相较于固定地址配置,文件服务发现模式更为灵活通用。本文将围绕基于文件的服务发现展开讲解,介绍其配置方式、使用特点与实际应用场景

一、服务发现

Prometheus 基于文件的服务发现(File Service Discovery, File SD),是一种让 Prometheus 能动态加载监控目标(Targets)的机制,其最大优势是无需重启服务即可生效

它的核心概念是:Prometheus 会持续监听一个或多个特定文件的变化,当这些文件中的目标列表被更新时,它会自动更新自己的抓取目标列表,实现"热加载"

工作原理:

  • 预先编写记录监控端点,标签的目标文件
  • Prometheus定时轮询读取文件内容
  • 对比内容变化,自动更新抓取目标列表
  • 按规律周期性采集指标数据

配置方法:需要在主配置文件 prometheus.yml 中修改配置

  • 定义 Job :在 scrape_configs 下定义一个监控任务(job)
  • 添加配置块 :在该 job 下添加 file_sd_configs 配置块
  • 指定文件路径 :在 files 下列出要监听的文件,支持使用通配符
  • 设置刷新间隔 :通过 refresh_interval 参数,定义周期性扫描文件的频率

二、服务发现实战

2.1 环境介绍

主机名 ip地址 服务 备注
prometheus 192.168.13.141 docker、docker-compose、prometheus、alertmanager、node-exporter、grafana 监控端,已安装
ubuntu 192.168.13.142 docker、docker-compose、各类exporter 被监控端,已安装docker,docker-compose

关于监控端的服务我已经安装好了,prometheus有两种安装方式:二进制安装和docker安装 ,本次实验使用的容器安装的,后续被监控端我也统一使用容器部署,大家可以自行选择

关于监控端的服务如何安装,这里不在赘述,有不懂的同学可以查看此篇文章
Prometheus二进制安装:https://blog.csdn.net/m0_63756214/article/details/161196428?spm=1001.2014.3001.5501
Prometheus容器安装:https://blog.csdn.net/m0_63756214/article/details/161225636?spm=1001.2014.3001.5501

被监控端的docker和docker-compose的安装可以参考此篇文章的2.1和2.2小节
https://blog.csdn.net/m0_63756214/article/details/161240598?spm=1001.2014.3001.5501

2.2 创建文件

接下来我们创建一个用于服务发现的目标文件,在于prometheus.yml文件相同目录下创建一个目录,这个目录存放的就是子yml文件,最后我们需要在prometheus.yml文件中配置子yml文件的地址

yaml 复制代码
root@prometheus:~# mkdir /opt/prometheus/prometheus/targets
root@prometheus:~# cd /opt/prometheus/prometheus/targets
root@prometheus:/opt/prometheus/prometheus/targets# vim targets.yml
- targets: ['localhost:9090']
  labels:
    job: prometheus
- targets: ['cadvisor:8080']
  labels:
    instance: Prometheus服务器 
    job: cadvisor
- targets: ['192.168.13.142:8080']
  labels:
    instance: Linux服务器 
    job: cadvisor
- targets: ['node_exporter:9100']
  labels:
    instance: Prometheus服务器 
    job: node-exporter
- targets: ['192.168.13.142:9100']
  labels:
    instance: Linux服务器 
    job: node-exporter
- targets: ['192.168.13.142:9113']
  labels:
    instance: Linux服务器
    job: nginx_exporter
- targets: ['192.168.13.142:9121']
  labels:
    instance: Linux服务器
    job: redis_exporter
- targets: ['192.168.13.142:15692']
  labels:
    instance: Linux服务器
    job: rabitmq_exporter
- targets: ['192.168.13.142:9104']
  labels:
    instance: Linux服务器
    job: mysqld_exporter
- targets: ['192.168.13.142:9256']
  labels:
    instance: Linux服务器
    job: process
yaml 复制代码
root@prometheus:/opt/prometheus/prometheus/targets# vim springboot.yml
- targets:
  - 192.168.13.142:8081
root@prometheus:/opt/prometheus/prometheus/targets# vim blackbox-exporter-http.yml 
- targets: 
  - https://www.baidu.com
  - https://www.jd.com
root@prometheus:/opt/prometheus/prometheus/targets# vim blackbox-exporter-tcp.yml
- targets:
  - 192.168.13.141:22
  - 192.168.13.141:9090
root@prometheus:/opt/prometheus/prometheus/targets# vim blackbox-exporter-icmp.yml
- targets:
  - 192.168.13.141
  - 192.168.13.142

2.3 配置服务发现

用于发现的目标文件创建完成后,要让 Prometheus 能够从上面的 targets.yml 文件中自动读取抓取目标,需要在 prometheus.yml 配置文件中的 scrape_configs 部分添加如下所示的抓取配置

yaml 复制代码
root@prometheus:/opt/prometheus/prometheus# cp prometheus.yml prometheus.yml.bak
root@prometheus:/opt/prometheus/prometheus# vim prometheus.yml
# 全局配置
global:
  scrape_interval:     15s # 将搜刮间隔设置为每15秒一次。默认是每1分钟一次。
  evaluation_interval: 15s # 每15秒评估一次规则。默认是每1分钟一次。

# Alertmanager 配置
alerting:
  alertmanagers:
  - static_configs:
    - targets: ['alertmanager:9093']

# 报警(触发器)配置
rule_files:
  - "alert.yml"
  - "rules/*.yml"

# 搜刮配置
scrape_configs:
  - job_name: "file-sd-test"
    file_sd_configs:
    - refresh_interval: 10s
      files:
      - "targets/targets.yml"

#  Spring Boot 2.x 应用数据采集配置
  - job_name: 'file-springboot-demo'
    metrics_path: '/actuator/prometheus'
    file_sd_configs:
    - refresh_interval: 10s
      files:
      - targets/springboot.yml
#http配置
  - job_name: "file-blackbox_http"
    metrics_path: /probe
    params:
      module: [http_2xx]
    file_sd_configs:
    - refresh_interval: 10s
      files:
      - targets/blackbox-exporter-http.yml
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: 192.168.13.142:9115

#tcp检查配置
  - job_name: "file-blackbox_tcp"
    metrics_path: /probe
    params:
      module: [tcp_connect]
    file_sd_configs:
    - refresh_interval: 10s
      files:
      - targets/blackbox-exporter-tcp.yml
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: 192.168.13.142:9115

#icmp检查配置 ping
  - job_name: "file-blackbox_icmp"
    metrics_path: /probe
    params:
      module: [icmp]
    file_sd_configs:
    - refresh_interval: 10s
      files:
      - targets/blackbox-exporter-icmp.yml
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: 192.168.13.142:9115
root@prometheus:/opt/prometheus/prometheus# curl -X POST http://localhost:9090/-/reload

浏览器访问192.168.13.141:9090

yaml 复制代码
root@prometheus:/opt/prometheus/prometheus# vim targets/targets.yml
- targets: ['192.168.13.142:8080']
  labels:
    # 添加一个测试标签
    env: test
    instance: Linux服务器 
    job: cadvisor

再次访问Prometheus页面,可以看到配置直接自动更新了


注:

文中若有疏漏,欢迎大家指正赐教。

本文为100%原创,转载请务必标注原创作者,尊重劳动成果。

求赞、求关注、求评论!你的支持是我更新的最大动力,评论区等你~

相关推荐
zhojiew4 小时前
在Ray集群中使用vLLM部署LLM模型并集成Prometheus和Grafana进行指标观测的实践
grafana·prometheus·vllm
Cat_Rocky7 小时前
K8S部署EFK日志收集技术栈
容器·kubernetes·prometheus
D4c-lovetrain9 小时前
云原生实战:K8s 一键部署 Prometheus+Grafana+EFK 完整可观测平台
云原生·kubernetes·prometheus
眷蓝天9 小时前
基于K8s部署Prometheus与EFK栈
容器·kubernetes·prometheus
zxd02031110 小时前
K8S 中部署 Prometheus 监控体系:从原理到实战
容器·kubernetes·prometheus
成为你的宁宁10 小时前
【基于 Consul 实现 Prometheus 服务发现部署与实战】
prometheus·consul
zxd0203111 天前
Prometheus + Grafana 监控平台搭建实战指南
grafana·prometheus
脑子加油站1 天前
Prometheus 抑制告警风暴的方法
prometheus
笨鸟先飞的橘猫1 天前
skynet——服务发现学习
学习·服务发现