当前位置: 首页 > news >正文

【云原生】Prometheus 服务自动发现使用详解

目录

一、前言

二、Prometheus常规服务监控使用现状​​​​​​​

2.1 Prometheus监控架构图

2.2 Prometheus服务自动发现的解决方案

三、Prometheus服务自动发现介绍

3.1 什么是Prometheus服务自动发现

3.2 Prometheus自动服务发现策略

3.3 Prometheus自动服务发现应用场景

3.4 Prometheus自动服务发现原理

四、Prometheus 基于文件的服务发现​​​​​​​

4.1 Prometheus基于文件服务发现介绍

4.2 Prometheus基于文件服务发现使用场景

4.3 基于文件服务发现配置说明

4.3.1 核心配置文件模板

4.3.2 核心配置文件支持格式

4.3.3 基于文件服务发现动态更新机制

4.4 基于文件服务发现操作实践

4.4.1 环境准备

4.4.2 添加Prometheus配置信息

4.4.3 编辑自动发现文档

4.4.4 重新加载Prometheus服务

4.4.5 自动发现文件添加新的监控指标

五、Prometheus基于Consul的服务自动发现

5.1 Prometheus基于Consul的服务发现介绍

5.2 Prometheus基于Consul的服务发现工作原理

5.3 基于Consul的服务发现使用场景

5.4 基于Consul的服务发现操作实践

5.4.1 安装Consul服务

5.4.2 访问Consul控制台

5.4.3 注册服务到Consul

5.4.4 配置Prometheus文件

5.4.5 重新加载Prometheus服务

5.4.6 注册consul服务实现自动发现

六、写在文末


一、前言

在之前分享的文章中,详细介绍了Prometheus的使用,以及使用Prometheus结合各类exporter监控不同的服务,但是细心的同学可能会发现,每次接入一种新的待监控的组件时,需要在Prometheus的配置文件中添加新的配置信息,然后重启Prometheus的服务,这个过程多少显得有点繁琐,针对这个问题有没有什么解决办法呢?答案是肯定的,这就是Prometheus的服务自动发现机制。

二、Prometheus常规服务监控使用现状

2.1 Prometheus监控架构图

如下是一张在日常使用Prometheus进行服务的配置监控的架构图,通常来说,为了监控某种服务指标,需要做如下几步操作:

  • 被监控的机器上安装部署exporter服务;

  • Prometheus机器上配置job,监控上述的exporter暴露的端点;

  • 上一步配置完成后,重新加载Prometheus服务;

  • 配置Grafana,将待监控的指标通过可视化大屏展示出来;

在上述的操作中,如果是小规模的监控,比如说使用Prometheus监控少量的几个服务,这种操作人力也是可以完成的,但是如果后续待监控的服务越来越多的时候,每次对接一种新的服务,就需要修改一下Prometheus的配置文件然后重新加载服务,这是一个很繁琐的事情,因此是不适合生产环境的大规模监控架构设计的。

2.2 Prometheus服务自动发现的解决方案

基于上述的痛点,所以prometheus提供了这种问题的两种解决方案,基于文档的自动发现和基于网络的自动发现,以基于文档的自动发现来说,有了这种机制,就变成下面这样:

有了这种机制之后,只需要第一次在prometheus的配置文件中配置一次重启一次服务即可,后续只需要维护自动发现文档,对于后续新加入的被监控的服务,只需要按要求将配置维护到该文档中即可让prometheus自动发现被监控的服务了。

三、Prometheus服务自动发现介绍

3.1 什么是Prometheus服务自动发现

Prometheus服务自动发现是一种机制,允许Prometheus监控系统动态地检测并监控网络中新的目标(targets),而无需手动更新配置文件。

在云原生和微服务架构中,服务实例可能会频繁地启动和停止,这使得手动维护监控目标列表变得不切实际。因此,Prometheus引入了自动服务发现功能,以便更高效地管理监控目标。

3.2 Prometheus自动服务发现策略

Prometheus支持多种自动服务发现的策略,以下列举了Prometheus常用的服务发现方法

  • 基于文件的服务发现

    • file_sd,Prometheus可以定期从特定的文件中读取目标列表。这些文件可以被外部程序动态更新,以反映当前的网络状态;

  • DNS 服务发现

    • dns_sd,使用DNS查询来查找目标。Prometheus可以配置为查询特定的DNS记录类型(如SRV记录),以找到要监控的服务实例;

  • Consul 服务发现

    • consul_sd,通过与Consul服务注册中心通信,Prometheus可以自动检测注册在Consul中的服务实例;

  • Kubernetes 服务发现

    • kubernetes_sd,当Prometheus运行在Kubernetes环境中时,可以使用Kubernetes API来自动发现并监控Pods、Services等资源;

  • EC2 服务发现

    • ec2_sd,在AWS EC2环境中,Prometheus可以自动发现并监控EC2实例;

自动服务发现的配置通常包含在Prometheus的prometheus.yml配置文件中,通过scrape_configs部分定义如何寻找和收集目标。例如,使用Kubernetes服务发现,你可能需要配置kubernetes_sd_configs,它将指向Kubernetes API以获取服务信息。

这种自动化的机制极大地简化了监控系统的管理,尤其是在高度动态的环境中,如容器化应用和服务网格。通过自动服务发现,Prometheus能够保持监控目标的最新状态,确保没有服务被遗漏或错误地监控。

3.3 Prometheus自动服务发现应用场景

Prometheus的自动服务发现机制适用于许多不同的场景和环境,特别是在动态和云原生架构中,它能够有效地管理和监控各种服务实例的变化。以下是一些典型的应用场景:

  • 微服务架构

    • 在微服务环境中,服务实例的数量和位置经常发生变化。使用Kubernetes或Consul服务发现可以自动检测和添加新的服务实例,保持监控系统的实时性和准确性;

  • 容器化环境

    • 使用Docker或Kubernetes部署的应用程序,可以利用Kubernetes服务发现功能,自动将新的Pod添加到监控目标中,而无需手动更新配置;

  • 传统数据中心

    • 即使在传统的物理或虚拟化数据中心中,文件和静态配置的服务发现方法仍然非常有用。它们提供了一种简单而可靠的方式来管理和监控服务目标;

  • 云平台

    • 在云环境中,例如AWS的EC2实例,使用Prometheus的EC2服务发现可以自动检测和监控新的实例启动和停止,以及其状态变化;

  • 动态扩展

    • 当服务实例需要动态扩展或收缩时,自动服务发现确保新实例可以立即添加到监控中,而无需人工干预

总的来说,Prometheus的自动服务发现功能是为了应对现代复杂和动态变化的IT环境而设计的,它能够显著简化监控系统的维护和管理,同时提升监控的实时性和覆盖范围。

3.4 Prometheus自动服务发现原理

Prometheus的服务自动发现机制用于动态识别和更新监控目标列表,确保监控系统可以适应基础设施的变化。其服务自动发现的主要机制和其工作原理:

  • 目标发现

    • Prometheus通过不同的服务发现插件或机制来获取当前可用的服务实例列表。这些插件包括:

      • Kubernetes API:获取Kubernetes集群中的Pod和服务信息。

      • Consul HTTP API:从Consul中获取服务实例。

      • EC2 API:通过AWS API发现EC2实例。

  • 目标标识

    • 从服务发现中获取的信息会被处理并提取出监控目标的标识符,如IP地址、主机名、端口号及其他相关元数据。这些标识符用于唯一地识别和访问监控目标。

  • 动态更新

    • Prometheus会将发现的目标动态地添加到其内部的监控目标列表中,并开始对这些目标进行指标数据的采集。这个过程是自动化的,无需人工干预。

  • 拉取指标数据

    • 一旦目标被添加到监控列表中,Prometheus会定期从这些目标中获取指标数据。数据采集通常通过HTTP或HTTPS协议进行,具体的抓取频率和方式可以在配置文件中定义

  • 自动清理

    • 如果发现的服务实例不再可用,Prometheus会自动从监控目标列表中删除这些实例,停止对其进行监控。这样可以确保监控数据的准确性和时效性。

总的来说,Prometheus服务自动发现机制的原理是基于动态地从各种来源获取服务实例的信息,并将其集成到监控系统中。这使得监控系统能够自动适应服务实例的变化,保持实时性和全面性。

四、Prometheus 基于文件的服务发现

4.1 Prometheus基于文件服务发现介绍

Prometheus基于文件的服务发现(File Service Discovery),是一种允许Prometheus动态加载和更新监控目标列表的机制,而无需重启Prometheus服务。这种服务发现方式特别适用于那些不能或不需要与Prometheus进行实时交互的服务注册中心的情况。

在基于文件的服务发现中,Prometheus会周期性地检查一个或多个文件,这些文件包含了要监控的目标列表。每个目标都是一个URL,指向一个提供Prometheus格式的指标数据的HTTP端点。当文件中的内容发生变化时,Prometheus会自动调整其监控配置,添加新目标或移除不再存在的目标。

4.2 Prometheus基于文件服务发现使用场景

Prometheus基于文件的服务发现(File-Based Service Discovery)在很多种场景下非常有用,特别是在那些无法或不需要实时交互的服务注册中心的环境中。下面介绍一些常用的使用场景:

  • 离线/预配置环境

    • 在某些情况下,如边缘计算或物联网设备,可能没有实时的网络连接或服务注册中心。在这种情况下,可以预先配置一个文件,其中包含所有需要监控的设备列表。

  • 静态服务监控

    • 如果有一些服务实例不会经常变化,或者变化频率较低,使用基于文件的服务发现可以避免过度复杂的服务发现机制,同时仍然能够有效地监控这些服务。

  • 混合环境监控

    • 如果你的环境既包括云原生服务也包括传统服务,基于文件的服务发现可以帮助你监控所有服务,而不仅仅是那些可以自我注册的服务。例如,你可以在文件中手动列出所有需要监控的传统服务器的地址。

  • 集成第三方工具

    • 有时候,你可能使用了像Ansible、Chef、Puppet这样的配置管理工具,这些工具可以生成Prometheus目标列表的文件。这样,你就可以利用这些工具的自动化能力,根据基础设施的变化自动更新Prometheus的监控目标。

  • 自定义逻辑或脚本

    • 你可以编写自己的脚本来动态生成目标列表文件,该脚本可以根据业务逻辑、环境状态或其他条件来决定哪些目标应该被监控。例如,你可以编写一个脚本来监控只有在特定条件下才激活的微服务。

  • 跨云环境

    • 当你在多个云提供商之间运行服务时,每个云可能都有不同的服务发现机制。基于文件的服务发现可以作为一个统一的解决方案,允许你手动或通过脚本将不同云环境中的服务实例添加到监控列表中。

  • 测试和开发环境

    • 在测试或开发环境中,服务的实例可能由手动启动的容器或虚拟机组成,而不是由编排器或服务注册中心管理。基于文件的服务发现提供了一种简单的方式来管理这些环境的监控目标。

  • 安全性考虑

    • 在一些对安全要求较高的环境中,可能不希望使用网络广播或依赖于可公开访问的服务注册中心。基于文件的服务发现提供了一种更可控的方式,可以限制谁有权修改监控目标列表。

4.3 基于文件服务发现配置说明

4.3.1 核心配置文件模板

在Prometheus的配置文件(通常是prometheus.yml)中,基于文件的服务发现可通过如下方式配置:

scrape_configs:- job_name: 'my_job'file_sd_configs:- files:- /path/to/targets/*.txt- /path/to/static/*.{json,yaml,yml}

参数说明:

  • job_name 是一组监控目标的标识符,Prometheus会用它来标记从这些目标收集的数据。

  • file_sd_configs 指定了一组文件的位置,Prometheus将从中读取目标列表。

  • files 列出了Prometheus应该检查的文件或文件模式。这里可以是文本文件(每个URL一行),也可以是JSON或YAML文件,其中包含了目标列表的结构化数据。

4.3.2 核心配置文件支持格式

Prometheus可以解析下面几种不同格式的配置文件:

  • 纯文本格式:每行一个目标,目标是一个URL,例如 http://host:port/metrics

  • JSON 格式:目标列表可以嵌套在数组或对象中

  • YAML 或 YAML 格式:与JSON类似,但使用YAML语法

4.3.3 基于文件服务发现动态更新机制

Prometheus 的基于文件的服务发现 (File SD) 允许用户通过定期检查文件中的目标列表来动态更新监控目标。这特别适用于那些不能或不需要使用其他服务发现机制(如 DNS 或 Consul)的情况。以下是基于文件的服务发现如何实现动态更新的机制:

  • 配置文件

    • Prometheus 需要配置文件中指定的 file_sd_configs 来加载和监视目标文件。这个配置通常包含一个或多个文件路径,Prometheus 将从这些文件中读取目标列表。

  • 目标文件

    • 目标文件是一个 JSON 文件,其中包含一个目标数组,每个目标都是一个带有 __address__ 字段的对象,该字段指定了目标的地址和端口。此外,可以包含 labels 字段来添加额外的元数据。

  • 动态更新

    • Prometheus 会周期性地重读配置文件中指定的目标文件。默认情况下,它每分钟检查一次文件更新,但可以通过 refresh_interval 参数调整这个间隔。

  • 自动应用更改

    • 当 Prometheus 检测到目标文件中有任何更改时,它会自动应用这些更改,这意味着新的目标会被添加到监控列表中,而不再存在的目标则会被移除。这使得你可以动态地调整监控配置,而无需重启 Prometheus 服务。

  • 外部管理

    • 目标文件通常由外部系统或脚本管理,这些系统或脚本可以响应环境变化(例如,新服务实例的启动或现有实例的关闭)并更新目标文件。例如,你可以使用 Ansible、Chef 或 Puppet 这样的配置管理系统,或者编写自定义脚本来动态生成和更新目标列表。

  • 错误处理

    • 如果在读取文件过程中发生错误,如文件不存在或格式错误,Prometheus 将继续使用最后成功读取的配置,并在日志中记录错误信息。

4.4 基于文件服务发现操作实践

下面通过实际案例演示下Prometheus基于文件服务发现的具体操作实践过程。

4.4.1 环境准备

两台(或3台)服务器,其中一台安装prometheus,另外的1~2台安装其他的服务,后面作为被监控使用。

第一台服务器部署prometheus

第二台部署了node_exporter

4.4.2 添加Prometheus配置信息

在第一台安装了Prometheus服务的安装目录下,编辑prometheus.yml配置文件,添加下面的配置信息

- job_name: "remote_file_node_job"file_sd_configs:- files:- /usr/local/soft/pro/file-sd/sd-config.yaml

4.4.3 编辑自动发现文档

在上一步的配置中,通过file_sd_configs这个标签,最终是要找到目标目录下sd-config.yml这个配置文件,即自动发现的配置文件,在该文件中添加如下配置信息:

- targets:- '远程机器的node_exporter的IP:9100'labels:job: remote_exporterinstance: 远程机服务器author: james

也可以写成下面这样

- targets: ['远程机器的node_exporter的IP:9100']labels:job: remote_exporterinstance: 远程机服务器author: james

参数说明:

  • targets,即监控的目标,这里监控的是远程机上的node_exporter服务指标,也可以监控远程机上其他的服务指标,在后面继续追加即可;

  • labels,自定义标签信息,可以根据自己的需求添加;

4.4.4 重新加载Prometheus服务

通过上面的几步操作就完成了最基本的配置,然后重启Prometheus服务,等待一会,进入Prometheus的控制台,在Targets菜单下可以发现,当前的Prometheus机器上,就通过文件服务发现的方式监控了远程148这台机器的node_exporter

同时,由于我们在服务发现文件中添加了相应的标签,这里把标签信息也展示出来了,后续就可以在界面上通过标签去搜索指标信息了

4.4.5 自动发现文件添加新的监控指标

如何验证Prometheus在不重启服务的情况下通过上述的自动发现文件自动发现待监控的服务指标呢?下面做过实验,首先,在148被监控机器上安装一个mysql的exporter,启动之后,访问一下端点

修改上述的sd-config.yml配置文件,增加mysql的exporter配置指标地址,如下:

- targets: ['远程机器的node_exporter:9100','远程机器的mysql exporter:9104']labels:job: remote_exporterinstance: 远程机服务器author: james

为了更好的区分不同指标,也可以写成下面这样:

- targets: ['远程机的node_exporter:9100']labels:job: remote_exporterinstance: 远程机服务器的node-exporterauthor: james
- targets: ['远程机的mysql exporter:9104']labels:job: mysql_exporterinstance: 远程机服务器的mysql-exporterauthor: james    

编辑完成后,预计等待10s左右,不需要对prometheus做任何的操作,然后再在prometheus的控制台上看到下面的效果,即通过服务发现文件自动发现了远程机的mysql-exporter服务并对其进行服务监控

通过上面的操作不难发现,只需要在第一次对prometheus的配置文件将服务发现文件配置进去即可,后续如果是类似的待监控的服务,只需要在服务发现文件中追加,即可自动纳入到prometheus的指标监控中,这样就做到了自动发现的效果,避免了对prometheus的服务反复启动

五、Prometheus基于Consul的服务自动发现

5.1 Prometheus基于Consul的服务发现介绍

Prometheus 基于 Consul 的服务发现是一种高级的服务发现机制,它允许 Prometheus 动态地从 Consul 注册表中发现和监控服务。Consul 是一个服务网格解决方案,主要用于服务发现、配置和协调服务间通信。在微服务架构中,服务实例可能频繁地创建和销毁,使用 Consul 作为服务注册中心可以帮助 Prometheus 自动跟踪这些变化。

5.2 Prometheus基于Consul的服务发现工作原理

当服务在 Consul 中注册时,它们会报告自己的状态、位置、健康状况和其他元数据。Prometheus 可以配置为定期查询 Consul 的服务注册表,从而动态地构建和更新其监控目标列表。这意味着当新的服务实例启动时,Prometheus 可以自动开始监控它们;当服务实例关闭时,Prometheus 也会自动停止监控。具体来说,其工作机制如下:

  • Consul 服务注册

    • 在 Consul 中,服务实例(即微服务、应用程序或其他需要监控的组件)在启动时向 Consul 注册自己。注册信息通常包括服务的名称、IP 地址、端口、健康检查信息等。

  • Prometheus 配置

    • 在 Prometheus 的配置文件中,需要定义一个或多个 scrape_configs 来指定 Consul 服务发现的参数。这通常包括 Consul 服务器的地址以及要监控的服务名称。

  • Prometheus 查询 Consul

    • Prometheus 根据配置定期(默认每分钟)查询 Consul,获取注册的服务实例列表。Prometheus 通过调用 Consul 的 HTTP API 来获取这些信息。

  • 目标转换和过滤

    • Prometheus 可能需要对从 Consul 获取的信息进行转换和过滤,以匹配其内部的监控目标模型。这通常是通过 relabel_configs 来实现的。例如,可以将 Consul 的元数据转换成 Prometheus 需要的 __address__ 标签,或者过滤掉不需要的服务实例。

  • 动态更新监控目标

    • 每次 Prometheus 查询 Consul 并收到新的服务实例列表后,它会更新其内部的监控目标列表。这意味着当有新的服务实例注册到 Consul 时,Prometheus 会自动开始监控这些新实例;同样,如果服务实例从 Consul 中注销,Prometheus 也会自动停止监控它们。

  • 健康检查和状态感知

    • Consul 进行服务健康检查,这意味着它会持续监控服务实例的健康状况。Prometheus 可以利用 Consul 的健康检查结果,例如,仅监控健康的服务实例,忽略那些标记为不健康的实例。

  • 监控和数据收集

    • 一旦 Prometheus 更新了其监控目标列表,它就会按照配置的时间间隔(例如,15 秒)从这些目标收集监控数据。收集的数据会被存储在 Prometheus 的时间序列数据库中,供查询和警报使用。

通过上述过程,Prometheus 能够实现动态的服务发现和监控,即使在服务实例频繁变化的情况下也能保持监控的完整性和实时性。这在微服务架构和容器化环境中尤其重要,因为它们往往具有高度动态的服务实例生命周期。

5.3 基于Consul的服务发现使用场景

Prometheus 基于 Consul 的服务发现机制非常适合于微服务架构和动态服务环境,其中服务实例可能频繁地启动和停止。以下列举了常用的几个使用场景:

  • 微服务架构

    • 在微服务架构中,服务实例可能分布在多个主机上,且数量和位置经常变化。Consul 可以作为一个中心化的服务注册和发现平台,帮助 Prometheus 动态地发现和监控这些服务实例。这减少了手动维护监控配置的负担,确保了即使在服务实例变化时,监控也不会中断。

  • 容器化环境

    • 在 Docker、Kubernetes 或其他容器平台上,容器的生命周期管理可能导致服务实例的快速创建和销毁。Consul 可以跟踪这些容器的运行状态,Prometheus 则可以通过 Consul 自动发现和监控这些动态服务实例。

  • 服务健康检查

    • Consul 提供了服务健康检查功能,可以监测服务实例的状态。结合 Prometheus 的基于 Consul 的服务发现,可以确保 Prometheus 只监控健康的服务实例,从而提高监控的准确性和效率。

  • 多数据中心环境

    • 在跨数据中心的部署中,Consul 可以在多个数据中心之间同步服务注册信息。Prometheus 可以配置为从每个数据中心的 Consul 实例中发现服务,从而实现全局范围内的服务监控。

  • 故障切换和高可用性

    • Consul 支持集群模式,可以提供高可用性和故障切换。当其中一个 Consul 节点失效时,Prometheus 可以从其他节点继续发现服务,确保监控的连续性。

  • 配置和动态调整

    • 在大规模或复杂的环境中,手动配置监控目标可能是不可行的。Consul 的服务发现特性允许 Prometheus 根据服务实例的实际状态自动调整监控配置,减少人工干预的需求。

  • 服务迁移和弹性伸缩

    • 当服务实例因负载变化而迁移或弹性伸缩时,Consul 可以及时更新服务注册信息。Prometheus 通过 Consul 的服务发现可以迅速适应这些变化,保持监控的有效性。

通过上述场景的介绍,可以看到,Prometheus 结合 Consul 的服务发现机制,不仅能够简化监控配置,还能够提高监控的可靠性和灵活性,特别是在高度动态和分布式的服务环境中。

5.4 基于Consul的服务发现操作实践

下面通过实际操作来体验下基于Consul的服务发现过程。

5.4.1 安装Consul服务

可以基于二进制的包安装,也可以基于docker安装,这里选择基于docker的方式安装,在第一台安装了Prometheus服务的机器上,执行下面的命令启动consul容器

docker run -d --name consul -p 8500:8500 consul:1.14.5

5.4.2 访问Consul控制台

访问地址,IP:8500,效果如下

5.4.3 注册服务到Consul

通过上面的介绍可以知道,Consul可以作为一个服务注册中心,接收不同的服务注册,其提供了HTTP接口供客户端注册服务,比如,可以将148上面的node-exporter服务注册进去,使用下面的http方式注册。

curl -X PUT -d '{"id":"node_exporter","name":"node_exporter","address":"被监控的服务IP","port":9100,"tags":["node_exporter"],"meta":{"job":"node_exporter","instance":"Prometheus监控的node_exporter"},"checks": [{"http":"http://被监控的服务IP:9100","interval":"10s"}]}' http://consul服务地址:8500/v1/agent/service/register

参数说明:

  • id:注册到consul上面的服务唯一标识;

  • name:自定义的名称;

  • address:注册的服务自身的IP地址,比如需要将node_exporter服务注册进去,即148的机器IP;

  • port:对应的服务端口,这里node_exporter端口为9100;

  • tags:服务打的标签信息;

  • meta:自定义的元信息参数(非必须);

  • checks:被监控的服务被检测监控状况的时间;

  • 注册的consul的服务地址;

在consul服务所在的节点上执行上面的请求地址:

执行成功后,进入到consul控制台查看,可以看到有一个node-exporter服务注册进来了

当然,上面注册服务时,也可以将请求参数的信息写到json文件里面,自定义一个node_exporter.json的文件,内容如下:

{"id":"node_exporter","name":"node_exporter","address":"注册的服务自身的IP地址","port":9100,"tags":["node_exporter"],"meta":{"job":"node_exporter","instance":"Prometheus监控的node_exporter"},"checks": [{"http":"http://注册的服务自身的IP地址:9100","interval":"10s"}]
}

定义完成json文件之后,使用下面的方式进行注册

curl --request PUT --data @node_exporter.json http://consul服务地址:8500/v1/agent/service/register

5.4.4 配置Prometheus文件

找到prometheus.yml文件,将consul信息配置进去,这样才能通过consul来监控注册进去的服务指标信息,参考下面的配置:

- job_name: 'consul-discovery'consul_sd_configs:- server: consul服务IP:8500services: []relabel_configs:- source_labels: [__meta_consul_service]regex: .*exporter.*action: keep

参数说明:

  • services标签,不填,表示所有服务;

  • source_labels,匹配consul的源标签字段,这里表示服务的名称;

  • regex,指定源标签的正则表达式,若不定义,默认值为"(.*)";

  • action,执行动作,默认值为"replace",有效值: replace, keep, and drop

5.4.5 重新加载Prometheus服务

参照上面的配置完成后,重新加载Prometheus服务,再次访问控制台可以发现,通过Consul就能自动监控148远程机上面的node-exporter服务指标信息了

5.4.6 注册consul服务实现自动发现

通过这种方式是不是也可以在不用重启Prometheus服务的情况下,自动监控其他注册到consul的服务呢?下面我们再将148机器上的mysql的exporter服务注册进去,执行下面的命令:

curl -X PUT -d '{"id":"mysql_exporter","name":"mysql_exporter","address":"注册的服务自身的IP地址","port":9104,"tags":["mysql_exporter"],"meta":{"job":"mysql_exporter","instance":"Prometheus监控的mysql_exporter"},"checks": [{"http":"http://注册的服务自身的IP地址:9104","interval":"10s"}]}' http://concul服务IP:8500/v1/agent/service/register

注册成功后,在consul控制台上可以看到注册成功的mysql的exporter服务信息

回到Prometheus控制台,可以看到mysql的exporter指标信息也被纳入监控了

六、写在文末

本文详细介绍了Prometheus 服务自动发现的使用,理论结合实践,全方位展示了常用的两种服务发现机制的如何配置和使用,如果在你的项目中还有更多的服务需要通过自动发现的方式进行管理,可以提供一个参考,本文到此结束,感谢观看。

相关文章:

【云原生】Prometheus 服务自动发现使用详解

目录 一、前言 二、Prometheus常规服务监控使用现状​​​​​​​ 2.1 Prometheus监控架构图 2.2 Prometheus服务自动发现的解决方案 三、Prometheus服务自动发现介绍 3.1 什么是Prometheus服务自动发现 3.2 Prometheus自动服务发现策略 3.3 Prometheus自动服务发现应用…...

(十九)原生js案例之h5地里位置信息与高德地图的初使用

h5 地里位置信息 1. 获取当前位置信息 window.onload function () {const oBtn document.querySelector("#btn");const oBox document.querySelector("#box");oBtn.onclick function () {window.navigator.geolocation.getCurrentPosition(function (…...

三、基础语法2(30小时精通C++和外挂实战)

三、基础语法2(30小时精通C和外挂实战) B-02内联函数B-04内联函数与宏B-05_constB-06引用B-07引用的本质B-08-汇编1-X86-X64汇编B-09-汇编2-内联汇编B-10-汇编3-MOV指令C-02-汇编5-其他常见指令C-05-汇编8-反汇编分析C-07-const引用、特点 B-02内联函数 …...

gitee设置ssh公钥密码频繁密码验证

gitee中可以创建私有项目,但是在clone或者push都需要输入密码, 比较繁琐。 公钥则可以解决该问题,将私钥放在本地,公钥放在gitee上,当对项目进行操作时带有的私钥会在gitee和公钥进行验证,避免了手动输入密…...

BGP选路之Next Hop

原理概述 当一台BGP路由器中存在多条去往同一目标网络的BGP路由时,BGP协议会对这些BGP路由的属性进行比较,以确定出去往该目标网络的最优BGP路由,然后将该最优BGP路由与去往同一目标网络的其他协议路由进行比较,从而决定是否将该最优BGP路由放进P路由表中…...

牛客14666(优先屏障) + 牛客14847(Masha与老鼠)

文章目录 写在前面14666-优先屏障思路编程 14847-Masha与老鼠思路编程 写在前面 昨天刷的这两道题写了很久,特别是Masha与老鼠这道题,写了都快3个小时,主要还是理解代码逻辑有点难,不过写完之后感觉收获挺大的,给我以…...

Git下载与安装

下载网址:https://git-scm.com/downloads 下载之后开始安装 选择安装路径,next 选择需要安装的组件,这里默认即可,next 选择菜单文件夹,这里默认即可,next 选择默认编辑器,默认推荐的即可&…...

创建vue2/vue3项目

目录 创建一个Vue2项目创建一个Vue3项目 创建一个Vue2项目 ## 安装Vue-Cli : npm install -g vue/cli // Vue CLI 4.x 需要 Node.js v8.9 或更高版本 (推荐 v10 以上)vue --version // 检测版本是否正确## 创建一个项目: vue create hello-world // hel…...

IOS七层模型对应的网络协议和物理设备

以下是网络模型、对应的协议以及对应的物理设备的表格总结: 网络模型层次主要功能对应协议对应物理设备物理层透明的传输比特流,确定机械及电气规范RS-232、V.35、RJ-45、FDDI等中继器、集线器、网线、调制解调器、网卡数据链路层将比特组装成帧和点到点…...

论文复现:Predictive Control of Networked Multiagent Systems via Cloud Computing

Predictive Control of Networked Multiagent Systems via Cloud Computing论文复现 文章目录 Predictive Control of Networked Multiagent Systems via Cloud Computing论文复现论文摘要系统参数初始化系统模型观测器预测过程控制器设计系统的整体框图仿真结果 论文摘要 翻译…...

JSON 文件存储

JSON 全称为: JavaScript Object Notation 也就是 javaScript 对象标记,通过对象和数组的组合来表示数据, 虽然构造简洁,但是结构化程度非常高, 是一种轻量级的数据交换格式 对象和数组 在 JavaScript 语言中&#…...

python——pynput

pynput 是一个 Python 库,用于控制和监听键盘与鼠标输入。它在 Windows、macOS 和 Linux 上都可以工作,为用户提供了一个跨平台的输入事件处理方式。pynput 包含两个主要模块:keyboard 和 mouse,分别用于处理键盘和鼠标事件。 主…...

[用AI日进斗金系列]用码上飞在企微接单开发一个项目管理系统!

今天是【日进斗金】系列的第二期文章。 先给不了解这个系列的朋友们介绍一下,在这个系列的文章中,我们将会在企微的工作台的“需求发布页面”中寻找有软件开发需求的用户 并通过自研的L4级自动化智能软件开发平台「码上飞CodeFlying」让AI生成应用以解…...

《JavaEE篇》--多线程(2)

《JavaEE篇》--多线程(1) 线程安全 线程不安全 我们先来观察一个线程不安全的案例: public class Demo {private static int count 0;public static void main(String[] args) throws InterruptedException {Thread t1 new Thread(() -> {//让count自增5W次…...

防爆智能手机如何助力电气行业保驾护航?

在电气行业的智能化转型浪潮中,防爆智能手机以其强大的数据处理能力、实时通讯功能及高度集成的安全特性,正成为保障电力网络稳定运行、预防安全隐患的得力助手。 防爆智能手机在电气行业中发挥着重要的保驾护航作用,主要体现在以下几个方面&…...

24.7.24数组|那几个课后得做的题

1、对长整形数据进行反转 2、对字符串进行反转 一、题目地址: 1. 实现一个函数atoi,使其能够将字符串转换整数 (Leetcode 8/中等). - 力扣(LeetCode) 2. 颠倒给定的32位无符号整数的二进制位(Leetcode 190/简单&…...

03Spring底层架构核心概念解析

为了感谢罕哥对我工作的帮助,特此记录下学习过程,期待成为和罕哥一样优秀的人 时间:2024.7.13 内容:spring源码课程3学习记录 一、BeanDefinition BeanDefinition表示Bean的定义,BeanDefinition中存在很多属性用来…...

Vue学习---vue 防抖处理函数,是处理什么场景

Vue防抖处理函数是用来处理在快速连续操作中,只执行最后一次操作的情况。 例如,在输入框输入时,我们可能希望只在用户完成输入后进行处理,而不是在每次键入时都处理。(n秒后触发一次) 以下是一个简单的Vue防抖处理函数的例子&am…...

力扣爆刷第166天之TOP100五连刷96-100(单词拆分、回溯、旋转数组)

力扣爆刷第166天之TOP100五连刷96-100(单词拆分、回溯、旋转数组) 文章目录 力扣爆刷第166天之TOP100五连刷96-100(单词拆分、回溯、旋转数组)一、24. 两两交换链表中的节点二、139. 单词拆分三、560. 和为 K 的子数组四、209. 长…...

2024在线PHP加密网站源码

源码介绍 2024在线PHP加密网站源码 更新内容: 1.加强算法强度 2.优化模版UI 加密后的代码示例截图 源码下载 https://download.csdn.net/download/huayula/89568335...

网络驱动移植(RTL8189)

1、把驱动放到内核文件夹中(linux/drivers/net/wireless),对应的驱动可以在网上下载 2、修改该目录下的Kconfig和Makefile文件 3、配置内核(make menuconfig) 配置支持IEEE 802.11,选中8189模块&#xff0…...

go语言中map学习

在 Go 语言中,map 是一种引用类型,这意味着它有以下特点: 内存结构: map 实际上是一个指向底层数据结构的指针。这个底层数据结构包含键值对的集合。 赋值与传参: 当你给一个变量赋值一个 map 时,或者将 map 作为函数参数传递时,实际上传递的是指针,而不是完整的数据结构副本。…...

【C#】| 与 及其相关例子

按位或(|) 按位或运算符 | 对两个数的每一位进行比较,如果两个数中至少有一个为 1,则结果位为 1;否则,结果位为0。 1010 (10 in decimal) | 1100 (12 in decimal) ------1110 (14 in decimal) 力扣相关…...

【数据结构 | 哈希表】一文了解哈希表(散列表)

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…...

go创建对象数组

在 Go 语言中,可以使用字面量的方式创建结构体对象数组。以下是一个示例代码,展示了如何使用字面量创建一个结构体对象数组: package mainimport "fmt"// 定义一个结构体 type Person struct {Name stringAge intAddress Address…...

Golang | Leetcode Golang题解之第278题第一个错误的版本

题目: 题解: func firstBadVersion(n int) int {return sort.Search(n, func(version int) bool { return isBadVersion(version) }) }...

自动化网络爬虫:如何它成为提升数据收集效率的终极武器?

摘要 本文深入探讨了自动化网络爬虫技术如何彻底改变数据收集领域的游戏规则,揭示其作为提升工作效率的终极工具的奥秘。通过分析其工作原理、优势及实际应用案例,我们向读者展示了如何利用这一强大工具加速业务决策过程,同时保持数据收集的…...

软件测试---测试需求分析

课程目标 什么是软件测试需求 软件测试需求的必要性 如何对软件测试需求进行分析(重点) 课程补充 灰度测试(基于功能):先发布部分功能,然后看用户的反馈,再去发布另外一部分的功能更新。 A/B测…...

Android11 framework 禁止三方应用通过广播开机自启动-独立方案

之前的文章Android11 framework 禁止三方应用开机自启动记录了我调试Android11应用自启动限制的全过程,但是之前的方案感觉还能再研究,所以有了这一篇文章。 这一篇文章主要探讨Android11上,以广播来进行自启动的应用的限制,极个别…...

Node:解决Error: error:0308010C:digital envelope routines::unsupported的解决方法

问题描述 在使用vuepress搭建博客的时候,运行项目发现报错了,检查了node的版本是18,之前用的是16或14的版本,现在报:Error: error:0308010C:digital envelope routines::unsupported错误。 查找了一些资料&#xff0…...

spring boot(学习笔记第十四课)

spring boot(学习笔记第十四课) Spring Security的密码加密,基于数据库认证 学习内容: Spring Security的密码加密基于数据库认证 1. Spring Security的密码加密 如果用户的密码保存在数据库中是以明文保存,对于公司的安全将是灾难性的&…...

Android 11 Unable to start/bind service

今天在Android11上发现了一个的问题,如果目标Service的进程没有启动,那么无论是bindService还是startService都没有办法拉起指定的Service。 网上查了很多资料如下: 1.目标Service 设置 android:exported"true" 2.目标Service需要声明自定义权…...

走难而正确的路并持之以恒

走难而正确的路并持之以恒 接近八月,台风频繁。气象台说台风“格美”今夜将至,往粤北走,而留在粤东的将是持续的高温。高温的广州,这几晚的天空惊喜不断,成片的火烧云,站在猎德大桥观望,丹红的凤…...

规范:Redis规范

在公司项目中,redis属于高频使用,在使用中,我们遇到了各种各样的redis问题,于是针对自身情况梳理了一个redis使用规范。 一、键名设计 1、key名设计 1. 禁止包含特殊字符(比如空格、换行、单双引号以及其他转义字符) 2. 建议以…...

比较 WordPress 、 Baklib 和 BetterDocs

对于希望管理其产品和服务的在线文档或知识库以支持其客户和员工的组织来说,市场上有太多的平台和工具。一些组织使用 WordPress 作为 Web 内容管理,并打算使用可用的插件。如果您是这样的组织之一,正在考虑使用广泛使用的 WordPress 插件之一…...

Redis 哨兵搭建

Redis哨兵(sentinel)搭建 7.2.5 文章目录 一、单节点哨兵1. 环境介绍2. 环境前准备工作3. 安装 Redis 7.2.54. redis 配置修改并且启动4.1 修改配置文件4.2 编写启动脚本 5. 开启主从5.1 开启5.2 主库实例查看主从信息 6. 创建sentinel的配置文件并启动6.1 创建配置文件6.2 启…...

HackTheBox--Knife

Knife 测试过程 1 信息收集 端口扫描 80端口测试 echo "10.129.63.56 knife.htb" | sudo tee -a /etc/hosts网站是纯静态的,无任何交互功能,检查网页源代码也未发现任何可利用的文件。 检查页面请求时,请求与响应内容&#xff0…...

Linux_实现TCP网络通信

目录 1、实现服务器的逻辑 1.1 socket 1.2 bind 1.3 listen 1.4 accept 1.5 read 1.6 write 1.7 服务器代码 2、实现客户端的逻辑 2.1 connect 2.3 客户端代码 3、实现服务器与客户端的通信 结语 前言: 在Linux下,实现传输层协议为TCP…...

正则表达式与文本三剑客之grep

目录 前言 一、grep命令 二、基础正则表达式常见元字符 2.1、特殊字符 2.2、定位符 2.3、非打印字符 三、元字符操作实例 3.1、查找特定字符 3.2、利用中括号“[]”来查找集合字符 3.3、查找行首“^”与行尾字符“$” 3.4、查找任意一个字符“.”与重复字符“*” 3.…...

微信小程序开发:项目程序代码构成

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…...

【云原生】Kubernetes微服务Istio:介绍、原理、应用及实战案例

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...

【Docker】Docker-consul容器服务自动发现与注册

目录 一.Consul概述 1.解决了什么问题 2.什么叫微服务或者注册与发现 3.consul的模式 4.相关命令 二.consul 部署 1.consul服务器部署 2.部署docker容器 3.Nginx负载均衡器 3.1.安装启动nginx 3.2.配置nginx负载均衡 3.3.创建配置consul complate模板文件 3.4.添加…...

Go 1.22 remote error: tls: handshake failure

Golang 1.22 remote error: tls: handshake failure 1.22之前运行下面代码是没有错误 package mainimport ("crypto/tls""fmt""net/http" )func main() {http.DefaultTransport.(*http.Transport).TLSClientConfig &tls.Config{InsecureS…...

迈向通用人工智能:AGI的到来与社会变革展望

正文: 随着科技的飞速发展,通用人工智能(AGI)的来临似乎已不再遥远。近期,多位行业领袖和专家纷纷预测,AGI的到来时间可能比我们想象的要早。在这篇博客中,我们将探讨AGI的发展趋势、潜在影响以…...

大模型额外篇章三:vercel搭建openai中转服务器

文章目录 一、起因和注意1)起因2)注意二、实现方法(原理:透传)1)nginx方案2)node服务3)纯 js 方案4)选择国外的域名服务商(DNS 解析路径缩短,建议方案国外提供 CDN 云服务商结合自建云服务业务做负载均衡)三、实践(vercel部署OpenAI代理服务器)四、测试搭建的Ope…...

使用 jQuery 中的 this 实例

在 jQuery 中,this 关键字用于表示指向当前操作的 DOM 元素。本篇博客将详细介绍如何在 jQuery 中使用 this 实例。 一、选择器中的 this 在选择器中,this 可以方便地指向当前操作的 DOM 元素。例如,当用户点击一个按钮时,我们想…...

下载最新版Anaconda、安装、更换源、配置虚拟环境并在vscode中使用

文章目录 进入官网进入下载页安装更换源配置虚拟环境env安装包requests在vscode中使用虚拟环境 进入官网 https://repo.anaconda.com/ 或进入清华大学下载 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 进入下载页 安装 更换源 查看已经存在的镜像源 bash cond…...

极狐GitLab Git LFS(大文件存储)如何管理?

GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab :https://gitlab.cn/install?channelcontent&utm_sourcecsdn 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署…...

迭代学习笔记

一、迭代学习定义和分类 1、直观理解 迭代学习一般应用于重复性的场景。比如控制一个单自由度的小车以特定的速度曲线移动到指定位置,整个时间是10s,控制频率是0.01,那么整个控制序列就会有1000个点。这1000个点在10s内依次发出&#xff0c…...

【安全】系统安全设计规范(DOC完整版)

1.1安全建设原则 1.2 安全管理体系 1.3 安全管理规范 1.4 数据安全保障措施 1.4.1 数据库安全保障 1.4.2 操作系统安全保障 1.4.3 病毒防治 1.5安全保障措施 1.5.1实名认证保障 1.5.2 接口安全保障 1.5.3 加密传输保障 1.5.4终端安全保障 软件资料清单列表部分文档&…...