首页 > 其他分享 >17.prometheus服务发现&基于文件的服务发现

17.prometheus服务发现&基于文件的服务发现

时间:2024-04-25 14:58:38浏览次数:21  
标签:文件 服务 17 Prometheus yml prometheus targets

一、服务发现

Prometheus 中是如何使用服务发现来查找和抓取目标的。我们知道在 Prometheus 配置文件中可以通过一个 static_configs 来配置静态的抓取任务,但是在云环境下,特别是容器环境下,抓取目标地址是经常变动的,所以用静态的方式就不能满足这些场景了,还有特别在很多服务器需要监控时。所以我们需要监控系统能够动态感知这个变化,不可能每次变动都去手动重新配置的,为了应对复杂的动态环境,Prometheus 也提供了与基础设施中的服务发现集成的功能。

Prometheus 已经支持多种内置的服务发现机制:

● 发现云服务商的 VM 虚拟机
● Kubernetes 上的自动发现
● 通用的服务查找,例如 DNS、Consul、Zookeeper 或自定义发现机制

    可以通过 Prometheus 配置文件中的 scrape_config 部分进行配置,Prometheus 会不断更新动态的抓取目标列表,自动停止抓取旧的实例,
开始抓取新的实例,Prometheus 特别适合运行于 Kubernetes 集群下面,可以自动发现监控目标。
    此外大部分服务发现机制还会提供目标的一些元数据,通常都是带有 __ 的前缀, 比如标签、注解、服务名等等,可以在 relabeling 阶段使用这些
元数据来过滤修改目标,这些元信息标签在重新标记阶段后被删除。

二、基于文件的服务发现

除了基于 Consul 的服务发现之外,Prometheus 也允许我们进行自定义的发现集成,可以通过 watch 一组本地文件来获取抓取目标以及标签信息,也就是我们常说的基于文件的服务发现方式

 

基于文件的服务发现提供了一种更通用的方式来配置静态目标,并作为一个接口插入自定义服务发现机制。

它读取一组包含零个或多个 <static_config> 列表的文件,对所有定义的文件的变更通过磁盘监视被检测到并立即应用,文件可以以 YAML 或 JSON 格式提供。文件必须包含一个静态配置的列表:

当然该文件也可以使用 JSON 格式进行配置:

[
  {
    "targets": [ "<host>", ... ],
    "labels": {
      "<labelname>": "<labelvalue>", ...
    }
  },
  ...
]

如果是 YAML 文件则格式为:

- targets:
  [ - '<host>' ]
  labels:
    [ <labelname>: <labelvalue> ... ]

文件内容也会在指定的刷新间隔时间内定期重新读取。

# Patterns for files from which target groups are extracted.
files:
  [ - <filename_pattern> ... ]

# Refresh interval to re-read the files.
[ refresh_interval: <duration> | default = 5m ]

其中 <filename*pattern> 可以是一个以 .json.yml.yaml 结尾的路径,最后一个路径段可以包含一个匹配任何字符序列的 *,例如:my/path/tg_*.json

3.1 创建文件

创建一个用于服务发现的目标文件,在与 prometheus.yml 文件相同目录下面创建一个名为 targets.yml 的文件,内容如下所示:
cd /data/docker-prometheus
mkdir prometheus/targets

cat > prometheus/targets/targets.yml<<"EOF"
- targets: ['localhost:9090']
  labels:
    job: prometheus
- targets: ['cadvisor:8080']
  labels:
    instance: Prometheus服务器 
    job: cadvisor
- targets: ['192.168.10.100:8080']
  labels:
    instance: test服务器 
    job: cadvisor
- targets: ['node_exporter:9100']
  labels:
    instance: Prometheus服务器 
    job: node-exporter
- targets: ['192.168.10.100:9100']
  labels:
    instance: test服务器 
    job: node-exporter
- targets: ['192.168.10.100:9113']
  labels:
    instance: test服务器
    job: nginx_exporter
- targets: ['192.168.10.100:9121']
  labels:
    instance: test服务器
    job: redis_exporter
- targets: ['192.168.10.100:9419']
  labels:
    instance: test服务器
    job: rabitmq_exporter
- targets: ['192.168.10.100:9216']
  labels:
    instance: test服务器
    job: mongodb_exporter
- targets: ['192.168.10.100:9104']
  labels:
    instance: test服务器
    job: mysqld_exporter
- targets: ['192.168.10.100:9256']
  labels:
    instance: test服务器
    job: process
EOF

springboot.yaml

cat >prometheus/targets/springboot.yml<<"EOF"
- targets:
  - 192.168.10.100:8081
EOF

blackbox-exporter-http.yml

cat >prometheus/targets/blackbox-exporter-http.yml<<"EOF"
- targets: 
  - https://www.baidu.com
  - https://www.jd.com
EOF

blackbox-exporter-tcp.yml

cat >prometheus/targets/blackbox-exporter-tcp.yml<<"EOF"
- targets:
  - 192.168.0.14:22
  - 192.168.10.14:9090
EOF

blackbox-exporter-icmp.yml

cat >prometheus/targets/blackbox-exporter-icmp.yml<<"EOF"
- targets:
  - 192.168.10.14
  - 192.168.10.100
EOF
cat >prometheus/targets/domain.yml<<"EOF"
- targets:
  - qq.com
  - baidu.com
EOF

3.2 配置文件服务发现

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

备份文件

cp -a prometheus/prometheus.yml{,.bak}

ls -l promethues/prometheus.yml.bak

使用新的prometheus.yaml文件

cat >prometheus/prometheus.yml<<"EOF"

# 全局配置
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.10.100: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.10.100:9115

#icmp检查配置 ping
  - job_name: "blackbox_icmp"
    metrics_path: /probe
    params:
      module: [icmp]
    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.10.100:9115
  - job_name: domain
    #scrape_interval: 1h
    scrape_interval: 15s
    metrics_path: /probe
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - target_label: __address__
        replacement: 192.168.10.100:9222 # domain_exporter address
    file_sd_configs:
    - refresh_interval: 10s
      files:
      - targets/domain.yml
EOF

重新载入:curl -X POST http://localhost:9090/-/reload

重新 reload 或者重启下 Prometheus 让其重新读取配置文件信息,然后同样前往 Prometheus UI 的 targets 页面下面查看

http://192.168.10.14:9090/targets?search=

然后我们可以尝试改变 targets.yml 的内容,比如为192.168.10.100:8080实例nginx_exporter增加一个 env: test的标签,不用重新加载 Prometheus 配置,Prometheus 将 watch 该文件,并自动接收任何变化。

注意:当在生产环境 Prometheus 服务器中改变 file_sd 目标文件时,确保改变是原子的,以避免重新加载出现错误,最好的方法是在一个单独的位置创建更新的文件,然后将其重命名为目标文件名(使用 mv 命令或 rename() 系统调用)

基于文件的通用服务发现机制,可以让我们动态地改变 Prometheus 的监控目标,而不需要重新启动或重新加载 Prometheus 服务。

 

 

 

 

 

 

 

标签:文件,服务,17,Prometheus,yml,prometheus,targets
From: https://www.cnblogs.com/yangmeichong/p/18157697

相关文章

  • CF1709E XOR Tree
    linkSolution:PART1:转化首先套路地预处理出每个节点到根节点(\(1\)号节点)路径上的点权异或和\(w[u]\)。可以发现题意容易转化为:给定一棵\(n\)个节点的树,问你最少可以把它分成多少个联通块,使得每个连通块中的节点两两路径上的异或和不为0。易知对于一个节点,若它要被割......
  • 利用 Amazon EMR Serverless、Amazon Athena、Apache Dolphinscheduler 以及本地 TiDB
    引言在数据驱动的世界中,企业正在寻求可靠且高性能的解决方案来管理其不断增长的数据需求。本系列博客从一个重视数据安全和合规性的B2C金融科技客户的角度来讨论云上云下混合部署的情况下如何利用亚马逊云科技云原生服务、开源社区产品以及第三方工具构建无服务器数据仓库的解......
  • cf 393017C 石头剪刀布 Metacamp2022-onlineA-dev
     Problem-C-Codeforces 五维的DPg[i][D][r][s][p]i:到了第i个位置D:最后有D个点放在后面r,s,p:已经选择了r,s,p个石头,剪刀,布放到后面 四维的DPf[i][D][r][s][p]i:到了第i个位置D:目前有D个点放在后面r,s,p:已经选择了r,s,p个石头,剪刀,布放到后面其......
  • 碎片和水位线回收的验证过程 转发 https://www.modb.pro/db/1780420808865845248
    1、数据库基础内容表空间-数据文件-段-区-块一个表空间由一个或者多个数据文件组成高水位线和表碎片的示意图其中被划掉的字代表delete删除,其中耶就是后续的insert,只会在末尾增加,而不是填充被删除的字段,这样就会导致数据库在搜寻数据时会浪费很多资源。整理碎片后大概是这......
  • Taurus.MVC 微服务框架 入门开发教程:项目集成:7、微服务间的调用方式(调整):引用程序集及
    前言:今天补充一下 Taurus.MVC微服务教程,介绍一下微服务中针对RPC方面调整或新增的功能。之前系列文章目录:Taurus.MVC微服务框架入门开发教程:项目集成:1、服务端:注册中心、网关(提供可运行程序下载)。Taurus.MVC微服务框架入门开发教程:项目集成:2、客户端:ASP.NET Core(C#)项目......
  • 这款国产ftp服务器 可实现安全、稳定的文件传输!
    FTP传输风靡了多年,具有一定优势,不过也存在一些弊端,所以很多机构也会寻找国产ftp服务器,来替代国外的一些开源的FTP服务器。  FTP服务器的优势和劣势如下:优势:跨平台文件共享:FTP能够实现不同操作系统和文件系统之间的文件上传和下载,提高工作效率和协作能力。多任务处理:支持......
  • 使用Spring HttpExchange替代FeignClient进行http远程服务调用
    背景springboot3.0使用的springframework6.0里有一个全新的http服务调用注解@HttpExchange,该注解的用途是可以进行申明式http远程服务调用。与Feign作用相同,在springboot3.x里,由于本身spring内置,相比Feign可以大幅减少第三方包依赖,且比Feign进轻巧。依赖:@HttpExchange位......
  • 12.prometheus监控之Domain域名过期监控
    一、域名过期时间监控域名的监控通过domain_exporter来完成domain_exporter:https://github.com/caarlos0/domain_exporter/releases二、domain_exporter安装2.1源码安装方法https://prometheus.io/download/wgethttps://github.com/caarlos0/domain_exporter/releases/......
  • Net8微服务实战
    前言学习杨中科老师开源项目在线英语网站微服务1.需求服务拆分2.项目源码项目类说明Peng.ASPNETCoreDistributedCacheHelper分布式缓存帮助类MemoryCacheHelper内存缓存帮助类UnitOfWorkFilter工作单元筛选器Peng.CommonsValidators文件夹Fluen......
  • Net8微服务之Consul、Ocelot、IdentityServer4
    前言情绪的尽头是沉默1.微服务概念1.1微服务发展分布式解决性能问题,微服务解决维护性、扩展性、灵活性。1.2微服务概念微服务(或称微服务架构),是一种现代化的软件架构方法,它将一个应用程序分解为多个小型、独立的服务单元,每个服务都负责特定的业务功能,并且可以独立开发、测......