5. 服务发现

news2024/10/6 20:40:08

当主机较少时,在抓取配置中手动列出它们的IP地址和端口是常见的做法,但不适用于较大规模的集群。尤其不适用使用容器和基于云的实例的动态集群,这些实例经常会变化、创建或销毁的情况。

Prometheus通过使用服务发现解决了这个问题:通过自动化的机制来检测、分类和识别新的和变更的目标。服务发现可以通过以下几种机制实现:

  • 从配置管理工具生成的文件中接收目标列表。
  • 查询API(例如AWS API)以获取目标列表
  • 使用DNS记录以便返回目标列表

 5.1 静态配置的局限性

在了解服务发现的工作原理前,先回顾下数据抓取的生命周期。如下图所示,当Prometheus 开始作业时,第一步就是服务发现,这将生成作业将要抓取的目标和元数据标签列表。

 在现有的配置中,服务发现机制是在static_configs块中定义的。

scrape_configs:
 config.
  - job_name: "prometheus"
    static_configs:
      - targets: ["localhost:9090"]
  - job_name: "node"
    static_configs:
      - targets: ["localhost:9600"]
  - job_name: "docker"
    static_configs:
     - targets: ["localhost:8080"]   

从上可以看出,目标列表和关联标签都是采用手动服务发现的方式。可以看到在繁杂的工作中维护一长串主机列表并不是一个可扩展的任务。特别是对于大多数动态的集群环境,监控这些大集群的中的主机、应用程序和服务的规模,静态配置及其不方便。

选择成熟的服务发现机制显得尤为重要,常见的服务发现机制有:

  1. 基于文件的方式
  2. 基于云的方式
  3. 基于DNS的方式

5.2 基于文件进行服务发现

相比静态配置进行服务发现而言,基于文件的发现会更先进些。借助基于文件的服务发现,Prometheus 会使用文件中指定的目标。这些文件通常由另一系统生成,例如Puppet、Ansible或Chef等配置管理系统,或者从其他源(如CMDB)查询。定期执行脚本或进行查询可以(重新)生成这些文件。Prometheus 会按指定的时间计划从这些文件重新加载目标。

这些文件可以是YAML或JSON格式,包含定义的目标列表,就像我们在静态配置中定义它们一样。让我们从将现有作业迁移到基于文件的服务发现开始。


scrape_configs:
  - job_name: "prometheus"
    file_sd_configs:
      - files:
        - targets/prometheus/*.json
        refresh_interval: 5m
  - job_name: "node"
    file_sd_configs:
      - files:
        - targets/node/*.json
        refresh_interval: 5m
  - job_name: "docker"
    file_sd_configs:
      - files:
        - targets/docker/*.json
        refresh_interval: 5m

我们用file_sd_configs块替换prometheus.yml文件中的 static_configs块。在这些块中,已经指定了文件列表,并包含在files列表中。我们在父目录targets下为每个作业指定对应的文件,并为每个作业创建一个子目录。你可以创建适合你的任何文件结构。

然后使用*.json的glob样式来指定文件。每当这些文件发生更改时,系统都将从此目录中所有以.json结尾的文件加载目标。我们选择JSON格式,因此它是一种方便使用各种语言和集成来编写的流行格式。

每次作业运行或这些文件发生变化时,Prometheus都会重新加载文件的内容。以防万一,我们还指定了refresh_interval选项,该选项将在每个间隔结束加载文件列表中的目标——对这个示例来说是5分钟。

让我们快速创建上述的目录结构。

sudo mkdir targets

sudo mkdir targets/{prometheus,node,docker}

 将prometheus、节点和Docker守护进程列表移动到新的JSON文件,创建三个文件类保存这些目标。

sudo touch targets/prometheus/prometheus.json
sudo touch targets/node/node.json
sudo touch targets/docker/daemons.json

填充json文件,当然也可以使用yaml进行文件配置。

prometheus.json如下:

[{
	"targets": [
		"localhost:9090"
	]
}]

node.json如下:

[{
	"targets": [
		"localhost:9600"
	]
}]

daemons.json如下:

[{
	"targets": [
		"localhost:8080"
	],
	"labels": {
		"datacenter": "nj"
	}
}]

在这里,我们向Docker守护进程目标添加了值为nj的标签datacenter。基于文件的服务发现会在重新标记阶段自动给每个目标添加一个元数据标签_meta_filepath,它包含配置目标的文件路径和文件名。

编写文件

由于编写的JSON文件已经非常明确地定义了抓取目标的来源,当然可以使用能集中配置存储或配置管理数据库(CMDB)或者PuppetDB会更方便。

自定义编写脚本是,需要遵守以下几条简单的规则:

  • 服务发现可配置——不要采用硬编码的方式。最好确保你的文件发现能够使用默认配置自动运行。如确保默认配置选项采用目标来源的默认安装状态。
  • 不要在配置中暴露API或者秘钥、密码等信息,应该是依靠秘钥来保管库或环境变量。
  • 针对输出目标的文件的操作应该是原子的。

PS: 在Prometheus文档中还有一个基于文档的服务发现集成列表。

服务启动

 /usr/local/prometheus/prometheus --config.file="/usr/local/prometheus/prometheus.yml" &

启动后Prometheus结果如下: 

 5.3 基于API的服务发现

原生的服务发现集成在某些工具和平台上提供,它们内置支持Prometheus。这些服务发现插件使用工具和平台现有的数据存储或API来返回目标列表。

当前可用的本机服务发现插件包罗以下平台:

  • Azure
  • Amazon EC2
  • Consual
  • Google Compute Cloud
  • Kuberneteszhe

Amazon EC2服务发现插件使用Amazon Web Service EC2 API来获取EC2实例列表,以用作 Prometheus目标。要是用该服务发现插件,需要拥有AWS账号,这里就不操作了。

5.4 基于DNS服务发现

当你不想选择基于文件的服务发现和基于API的服务发现,那么你可以选择基于DNS的服务发现。

这里不多做介绍,如果有兴趣可以在评论取留言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/859766.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

测试人员该怎样写软件缺陷报告?

软件测试过程中,每个公司都制订了软件的缺陷处理流程,每个公司的软件缺陷处理流程不尽相同,但是它们遵循的最基本流程是一样的,都要经过提交、分配、确认、处理、复测、关闭等环节,如图1所示。 缺陷处理流程 关于图1所…

Linux:shell脚本:基础使用(3)

for循环语句 语句格式 for for变量 in 取值列表(可以是变量或者自己定义) do 循环内容 done 工作方式就是通过取值列表去判断循环的次数,每次循环的同时把列表一行的值赋予到for变量。取值方式如果是数字,那就通过数字去…

MySQL 索引 详解

一、索引概述 索引是帮助 MySQL 高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上…

设计师常用的6款UI设计工具

在选择UI设计工具时,设计师需要关注UI设计工具的功能。市场上有很多设计UI的工具。既然UI设计工具这么多,设计师应该如何选择UI设计工具?本文盘点了6种流行的UI设计工具,快来看看。 1.即时设计 即时设计是一款免费的在线 UI 设计…

利用ChatGPT绘制思维导图——以新能源汽车竞品分析报告为例

随着人们对环境保护的日益关注和传统燃油汽车的限制,全球范围内对新能源汽车的需求不断增长。新能源汽车市场的激烈竞争使得了解各个竞品的特点和优劣成为关键。然而,针对这一领域的详尽竞品分析却常常需要大量时间和精力。 在此背景下,人工智…

行业追踪,2023-08-10

自动复盘 2023-08-10 凡所有相,皆是虚妄。若见诸相非相,即见如来。 k 线图是最好的老师,每天持续发布板块的rps排名,追踪板块,板块来开仓,板块去清仓,丢弃自以为是的想法,板块去留让…

maven Jar包反向install到本地仓库

maven Jar包反向install到本地仓库 需求实现 需求 项目打包时报错,缺少一个jar包。 但是在maven仓库都找不到此jar包,其他人提供了这个jar包。 需要把这个jar包install到本地仓库,使项目能正常打包运行。 实现 使用git bash命令执行以下脚…

qt5.15.2 使用mysql8.1

报错&#xff1a; QMYSQL driver not loaded 报错&#xff1a;无 QMYSQL 使用 QStringList drivers QSqlDatabase::drivers(); //获取现在可用的数据库驱动 foreach(QString driver, drivers) qDebug() << driver; “QSQLITE” “QMARIADB” “QMYSQL” “QMYSQL3” “…

UML-状态图

目录 状态图 状态图的图符 状态机 状态 ​转换 电话机状态图 活动图和状态图区别&#xff1a; 状态图 状态图(Statechart Diagram)是描述一个实体基于事件反应的动态行为&#xff0c;显示了该实体如何根据当前所处的状态对不同的事件做出反应。通常我们创建一个UML状态…

基于金融行业的软件测试分析

随着银行业务不断增加&#xff0c;业务模式不断复杂化&#xff0c;对我们的银行软件也要求越来越高&#xff0c;产出高质量的产品也非常重要&#xff0c;下面对银行软件测试进行分析总结。 银行软件集中度高&#xff0c;规模庞大&#xff0c;往往是以系统群的方式存在&#xff…

“去没有天花板的地方” | 小红书用户情绪数据

最近&#xff0c;话题#人就要待在没有天花板的地方#社媒讨论度居高不下&#xff0c;小红书相关话题近90天互动量超百万。 生活的无常之外&#xff0c;越来越多人渴望与大自然更深层次的链接&#xff0c;以此寻找情绪的不同出口。或许&#xff0c;剖析这些情绪的生成机理&#x…

全球飞机电磁阀总体规模分析

电磁阀是一种液压管路的电磁装置&#xff0c;通过使用电流产生磁场&#xff0c;从而驱动螺线管&#xff0c;控制阀中流体的流动。电磁阀作为流体控制自动化系统的执行器之一&#xff0c;有着结构紧凑、尺寸小、重量轻、密封良好、维修简便和可靠性高、节能降耗的特点&#xff0…

cpolar内网穿透的安装

群晖6.X安装cpolar内网穿透 文章目录 群晖6.X安装cpolar内网穿透前言1. 下载cpolar的群晖套件1.1 打开群晖套件中心1.2 选择“手动安装”1.3 选择下载cpolar套件位置 2. 打开cpolar的Web-UI界面3. 注册会员 前言 随着硬件设备和软件技术的发展&#xff0c;以及数据量的发福暴涨…

[低端局][cx32L003] 移植U8G2

文章目录 一、简介&#xff08;1&#xff09;U8g2&#xff08;2&#xff09;U8x8 二、配置要求三、移植步骤&#xff08;1&#xff09;文件准备和添加&#xff08;2&#xff09;实现回调接口(I2C的读写函数)①软件I2C②硬件I2C &#xff08;3&#xff09;功能裁剪① u8g2_d_set…

数据结构链表——单链表

数据结构链表——单链表 概念及结构单链表的实现结构体类型的定义和头文件接口函数打印链表创建新节点尾插头插尾删头删查找任意插入指定位置之前插入指定位置之后插入 指定位置删除指定位置后删除单链表空间的销毁 概念及结构 概念&#xff1a;链表是一种物理存储结构上非连续…

PHP 使用ThinkPHP实现电子邮件发送示例

文章目录 首先我们需要设置我们的邮箱客户端授权&#xff0c;获取到授权码找到我们的邮箱设置去账号中找到这一堆服务&#xff0c;找到后开启smtp服务开启服务后管理服务 接下来需要去下载相应的第三方类库(我这里使用的是PHPMailer)在thinkPHP中封装一下邮件服务类实际调用效果…

Java 常用编辑器 IntelliJ IDEA

文章目录 IDEA 概述IDEA 下载和安装IDEA 中的第一个代码IDEA 的项目和模块操作&#xff08;一&#xff09;类的操作&#xff08;二&#xff09;模块的操作&#xff08;三&#xff09;项目的操作 IDEA 概述 IntelliJ IDEA是一款由JetBrains开发的集成开发环境&#xff08;IDE&am…

Android T 窗口层级其二 —— 层级结构树的构建(更新中)

如何通过dump中的内容找到对应的代码&#xff1f; 我们dump窗口层级发现会有很多信息&#xff0c;adb shell dumpsys activity containers 这里我们以其中的DefaultTaskDisplayArea为例 在源码的framework目录下查找该字符串&#xff0c;找到对应的代码就可以通过打印堆栈或者…

计算机的构造和原理

本资料转载于B站up主芯片超人-花 仅用于学习和讨论&#xff0c;如有侵权请联系 计算机工作原理之3D动画揭秘&#xff1a;计算机内部如何工作_哔哩哔哩_bilibili 1.CPU的部分 1.1 CPU放大看 1.2 一个芯片中&#xff0c;有80亿至100亿晶体管 1.3 放大磁道 1.4 共享3级缓存 1.5 …

kafka是有序的吗?如何保证有序?

首先&#xff0c;Kafka无法保证消息的全局有序性&#xff0c;这是因为Kafka的设计中允许多个生产者并行地向同一个主题写入消息。而且&#xff0c;一个主题可能会被划分为多个分区&#xff0c;每个分区都可以在独立的生产者和消费者之间进行并行处理。因此&#xff0c;生产者将…