2025年外部普米集中监控多个Prometheus实例:Prometheus Agent 模式与Prometheus 联邦模式 超级详细

外部普米集中监控多个Prometheus实例:Prometheus Agent 模式与Prometheus 联邦模式 超级详细外部普米集中监控多个 Prometheus 实例 PrometheusAg 模式与 prometheus 联邦模式超级详细 prometheusag

在这里插入图片描述

Prometheus Agent 模式-使用推送方式来监控

1.外部Prometheus配置

1.需要开放端口,在启动时,需要配置开放监听端口
--web.enable-lifecycle --config.file=/usr/local/prometheus/prometheus.yml --log.level=warn --storage.tsdb.path=/prometheus 
--web.listen-address=0.0.0.0:9090 
--storage.tsdb.retention=30d 
--web.enable-remote-write-receiver
2.添加prometheus启动参数

--enable-feature=remote-write-receiver, 用于启用 Prometheus 的远程写入接收器功能

该功能使 Prometheus 实例能够接收来自其他 Prometheus 实例或监控系统的数据,并将其写入本地时间序列数据库中。通过启用远程写入接收器,可以实现集中式监控数据收集和存储,从而简化监控数据管理和分析过程。

具体来说,启用此功能的目的包括:

  • 数据聚合和中心化 :通过远程写入接收器,多个 Prometheus实例或其他监控系统可以将监控数据发送到单个集中式存储位置。这样可以更轻松地聚合和管理监控数据,并为用户提供统一的监控数据视图。
  • 数据备份和冗余 :将监控数据发送到多个 Prometheus 实例或存储系统可以提供数据备份和冗余。如果一个实例或存储系统发生故障,仍然可以从其他实例或系统中检索数据,确保数据的可用性和持久性。
  • 跨数据中心或云环境的监控 :在分布式环境中,可能存在多个数据中心或云环境,各自运行着不同的 Prometheus实例。启用远程写入接收器可以轻松地将不同地理位置或不同云环境中的监控数据集中到单个存储位置,实现统一的跨数据中心或云环境的监控管理。
  • 实现监控数据的归档和长期存储 :集中式存储位置可以更好地支持监控数据的归档和长期存储需求。通过启用远程写入接收器,可以将监控数据发送到专门的存储系统或服务,实现对监控数据的有效管理和利用。
3.修改配置后重启prometheus即可
docker restart prometheus

2.各个节点的普米配置

1.修改prometheus.yml
vi prometheus.yml 

remote_write:
  - url: http://192.168.1.1:9090/api/v1/write
    # 标签替换配置
    write_relabel_configs:
      - source_labels: [instance]  # 要替换的源标签
        target_label: instance     # 替换后的目标标签
        replacement: "192.168.1.91"      # 替换后的值,可以使用正则表达式

192.168.1.1:9090 外部普米的地址

write_relabel_configs的作用:在 Prometheus 的配置文件中,用于远程写入(remote_write)时对标签进行替换。具体来说,它可以用于以下情况:

  • 标签重命名 :有时,当将监控数据写入到远程存储或其他 Prometheus 实例时,可能需要对标签进行重命名以符合目标系统的要求。例如,源系统使用的标签名与目标系统不一致,需要将其映射到目标系统所需的标签名上。
  • 标签值替换 :在某些情况下,需要修改标签的值。例如,源系统中的标签值包含了敏感信息或不合规定的内容,需要在写入到远程存储之前将其替换为合适的值
  • 标签值修正 :有时,需要根据特定的规则或逻辑来修正标签的值。例如,可能需要基于标签的某些特征来调整其值,以便更好地匹配目标系统的要求或进行数据清洗。 在上述配置中,source_labels 指定了要替换的源标签,target_label 指定了替换后的目标标签,replacement指定了目标标签的替换值。通过这种方式,可以灵活地定义不同的标签替换规则,以满足远程写入的需求。

测试是否成功

访问外部的普米节点:http://192.168.1.1:9090/,会有监控的指标信息,搜索查看即可

在这里插入图片描述

遇到问题
1.外部普米未开启远程写入功能
root@test:etc/prometheus# curl -X POST -d "metric_name{label1=\"value1\", label2=\"value2\"} 1234567890" http://192.168.1.1:9090/api/v1/write
remote write receiver needs to be enabled with --web.enable-remote-write-receiver

需要在prometheus启动参数 --enable-feature=remote-write-receiver

prometheus 联邦模式(联合允许 Prometheus 服务器从另一个 Prometheus 服务器抓取选定的时间序列)

官方文档:https://prometheus.io/docs/prometheus/latest/federation/

–enable-feature=native-histograms

联邦有不同的使用场景。通常,它用于实现可伸缩的Prometheus监控,或将一个服务相关指标从一个Prometheus拉取到另一个中
为了扩展单个Prometheus的采集能力和存储能力,Prometheus引入了联邦概念。多个Prometheus节点组成两级联邦结构,上面一层是联邦节点,负责定时从下面的节点获取数据并汇总,下面的Promethes可以负责不同区域/不同服务的数据采集。
Prometheus 是一个强大的监控平台,它是针对容器和微服务的开源监控预警工具,功能稳健,而且现在很多大厂都在使用一套监控系统(像网易、360等)

一、Prometheus 联邦配置说明

本次我以三台 Prometheus 实例进行简单演示:
实例1:10.xxx.xxx.91/32
实例2:10.xxx.xxx.96/32
实例3:10.xxx.xxx.94/32
说明:实例 1 为主,实例2、实例3为从,实例 1 会从实例 2 、实例3采集数据,并最终在实例 1 进行整合。

二、 配置 Prometheus

1、实例 1 配置
在 Prometheus 实例(主)配置 Prometheus 实例(从)

vim prometheus.yml

  - job_name: 'prometheus-federate-xahmat'
    honor_labels: true
    metrics_path: '/federate'
    params:
     'match[]':
      - '{job=~".*"}'
    static_configs:
    - targets: ["公网IP:9090"]

params一些配置参考

    params:
      'match[]':    #match[]用指定查询条件,即只从其他Prometheus抓取符合条件的数据
      - '{job="prometheus"}'    #job用于匹配指定名称的job,这里表示抓取prometheus job对应的指标数据
      - '{__name__=~"job:.*"}'    #__name__表示匹配指定名称的指标数据,这里表示抓取以job开头的指标数据
      - '{job=~"node.*"}'    #抓取以node开头的job的指标

配置说明:

  • job_name:自定义工作名;
  • honor_labels:保持原标签不变;
  • metrics_path:匹URL(即配置完成后可通过此URL 来验证是否采集到实例 2 上的数据);
  • params:匹配(可进行正则匹配),下面的 {job=~“.*”} 采集所有来自实例 2的指标数据,根据实际情况自定义即可;
  • static_configs:即实例 2 的地址(IP+Port)这里的 IP 为实例 2 的公网 IP,如果有多个实例,依次往下添加即可。

三、实例 2 配置

实例 2 就是正常的配置,我这里配置的是blackbox-exporter的监控信息

 - job_name: 'blackbox-91'
    scrape_interval: 5s
    metrics_path: /probe
    params:
      module: [icmp]
    static_configs:
      - targets:
          - '2.2.2.2'
        labels:
          # 节点用途,此处固定为node
          instanceType: 'blackbox'
          targetType: 'icmp'
          zone: '测试'
          sourcePlace: '10.2.2.91'
          targetPlace: '2.2.2.2'
      - targets:
          - '3.3.3.3'
        labels:
          # 节点用途,此处固定为node
          instanceType: 'blackbox'
          targetType: 'icmp'
          zone: '测试'
          sourcePlace: '10.2.2.91'
          targetPlace: '3.3.3.3'
    relabel_configs:
    - source_labels: ['__address__']
      target_label: __param_target
    - source_labels: ['__param_target']
      target_label: target
    - target_label: '__address__'
      replacement: '10.2.2.91:9115'
    - source_labels: ['__address__']
      target_label: instance
      regex: '(.*):.*'
      replacement: '${1}'

四、实例3配置

 - job_name: 'blackbox-94'
    scrape_interval: 5s
    metrics_path: /probe
    params:
      module: [icmp]
    static_configs:
      - targets:
          - '3.3.3.93'
        labels:
          # 节点用途,此处固定为node
          instanceType: 'blackbox'
          targetType: 'icmp'
          zone: '生产机房'
          sourcePlace: '10.2.2.94'
          targetPlace: '3.3.3.93'
      - targets:
          - '10.2.2.93'
        labels:
          # 节点用途,此处固定为node
          instanceType: 'blackbox'
          targetType: 'icmp'
          zone: '生产机房'
          sourcePlace: '10.2.2.94'
          targetPlace: '10.2.2.93'

    relabel_configs:
    - source_labels: ['__address__']
      target_label: __param_target
    - source_labels: ['__param_target']
      target_label: target
    - target_label: '__address__'
      replacement: '10.2.2.94:9115'
    - source_labels: ['__address__']

4.实例1最终配置

- job_name: 'federate'
    scrape_interval: 5s
    honor_labels: true
    metrics_path: '/federate'
    params:
      'match[]':
         - '{job="blackbox-91"}'
         - '{job="blackbox-94"}'
    static_configs:
      - targets: ['10.2.2.91:60909','10.2.2.94:60909']

Prometheus 联邦验证结果

1、数据验证
在实例 1(主)上验证实例 2 的数据是否已经采集:

在这里插入图片描述

遇到的问题

Prometheus 联邦模式拉取不到各个节点的数据

Prometheus 联邦模式在使用过程中一直拉取不到节点的数据,经排查发现params:匹配的问题,最终改成抓取所有的可行,然后再根据具体的job配置这个参数

 params:
     'match[]':
      - '{job=~".*"}'
如何确认job为何值?

方式1:查看 Prometheus 目标页面:
在 Prometheus 的目标页面中,你可以查看当前由 Prometheus 监控的所有作业及其相关信息。你可以通过浏览器访问 Prometheus 的目标页面,通常 URL 是 http://<prometheus_ip>:<prometheus_port>/targets
在这里插入图片描述

方式2:检查 Prometheus 配置文件:
在 Prometheus 的配置文件中,通常会列出所有配置的作业及其详细信息。你可以查看 Prometheus 的配置文件(通常是 prometheus.yml)中的作业部分,以确认哪些作业正在被配置和监控。

在这里插入图片描述

推拉分析

推【Prometheus Agent 模式】

  • 网络问题 需要在各个节点配置外部prometheus 的地址 【可由页面下发外部普米的地址】
  • 只需要外部普米开放端口,各个分支不需要【配置开放监听端口0.0.0.0】
  • 需要在各个分支配置外部普米的地址
  • 外部的prometheus启动参数需要加–enable-feature=remote-write-receiver,用于启用 Prometheus 的远程写入接收器功能

拉【联邦模式】

  • 需要考虑每个分支采集的时间间隔
  • 中心节点配置所有采集点的IP 端口 ,手动配置,当分支IP改变后,需要手动调整
  • 各个节点prometheus需要开放端口,在启动时,需要配置开放监听端口 0.0.0.0

具体使用哪种模式根据市局情况而定

编程小号
上一篇 2025-03-06 22:21
下一篇 2025-02-15 18:27

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/97319.html