Prometheus 云原生 - 基于 file_sd、http_sd 实现 Service Discovery

news2024/9/22 3:36:58

目录

开始

为什么需要服务发现机制

File Service Discovery(file_sd)

基本概念

配置方式

使用案例

HTTP Service Discovery(http_sd)

基本概念

配置方式

使用案例


开始


为什么需要服务发现机制

我们知道在 Prometheus 配置文件中可以通过 static_configs 来配置静态地址来获取数据,但是在云环境下,特别是容器环境下,抓取的 地址 经常是变动的,也就是说,地址每次变动因此,我们不但需要去修改 prometheus.yml 文件,还需要重启 prometheus 来加载配置,十分麻烦.

因此,就引入了 file_sd 、http_sd 等 服务发现机制.

File Service Discovery(file_sd)

基本概念

file_sd 是基于文件的服务发现机制,来动态更新 prometheus 数据的.

我们只需要把之前在 prometheus.yml 中通过 static_config 配置的方式,都统一写到一个文件中(例如 mysql 集群所有实例写到一个文件,mongo 集群所有实例写道另一个文件...),文件的格式可以以 yml 或 json 格式提供(文件必须包含一个静态配置的列表).

一般更多的使用的是 json 格式,如下(这个文件就是一个大 json 数组,包含一个个目标对象):

[
  {
    "targets": ["10.0.1.1:9100"],
    "labels": {
      "env": "master",
      "job": "mysql"
    }
  },
  {
    "targets": ["10.0.0.1:9100", "10.0.0.2:9100"],
    "labels": {
      "env": "slave",
      "job": "mysql"
    }
  },
  ...
]
  • targets:是一个数组,包含了需要监控的目标地址. 
  • labels:是一个 map,也就是一些键值对,这些键值我们是可以自定义的,但是我们也建议最好至少 有一个 job 标签 和 env 标签 来标识 名称 和 环境.

配置方式

prometheus.yml 配置如下:

scrape_configs:
  - job_name: 'file_sd_example'
    file_sd_configs:
      - files:
          - '/root/prometheus/targets/*.json'
        refresh_interval: 10s

这个示例中,Prometheus 会每 10s 读取 '/root/prometheus/targets/'  目录下的所有以 .json 结尾的文件,获取最新的监控目标.

 

使用案例

a)prometheus.yml 配置文件如下:

scrape_configs:

  - job_name: file_sd_expoter
    file_sd_configs:
      - files: 
        - '/sd/*.json'
        refresh_interval: 5s

Ps:由于是在 docker 中部署的 prometheus,因此要注意 files 的目录也是容器内的目录!建议启动容器时,挂载好目录,以便操作. 

b)目标 JSON 文件如下:

[
    {
        "targets": ["env-base:9100"],
        "labels": {
            "env": "prod",
            "job": "node_exporter"
        }
    },
    {
        "targets": ["env-base:9104", "env-base:9121"],
        "labels": {
            "env": "prod",
            "job": "mysql_and_redis_exporter"
        }
    }
]

c)启动 prometheus 容器之后,在浏览器中输入 env-base:9090 进入 prometheus 主页,在进入 Targets 目录,如下:

HTTP Service Discovery(http_sd)

基本概念

http_sd 方式允许 Prometheus 通过 HTTP 请求动态获取需要监控的目标列表. 

a)工作原理:

  1. 首先需要配置 HTTP 端点,也就是在 prometheus.yml 文件中,只需要指定一个 HTTP 端点,这个端点一般是我们自己的写的 SpringMVC 程序中的一个 web 接口(GET 请求方式).
  2. Prometheus 就会定期向配置的 HTTP 端点发送 GET 请求,获取最新的数据列表.
  3. HTTP 端点返回的目标列表就是 JSON 格式的数据,里面是一个大 JSON 数组.

b)HTTP 端点返回的数据,例如如下:

[
  {
    "targets": ["10.0.0.1:9100", "10.0.0.2:9100"],
    "labels": {
      "env": "prod",
      "job": "node_exporter"
    }
  },
  {
    "targets": ["10.0.1.1:9100"],
    "labels": {
      "env": "staging",
      "job": "node_exporter"
    }
  }
]
  • targets:是一个数组,包含了需要监控的目标地址. 
  • labels:是一个 map,也就是一些键值对,这些键值我们是可以自定义的,但是我们也建议最好至少 有一个 job 标签 和 env 标签 来标识 名称 和 环境.

Ps:labels 中的 key 和 value,第一个字符一定都不能是 数字! 

配置方式

在 prometheus.yml 文件中配置 http_sd 示例如下:

scrape_configs:
  - job_name: 'http_sd_example'
    http_sd_configs:
      - url: 'http://example.com/targets'
        refresh_interval: 10s

这个示例中,Prometheus 会每 10s 向 http://example.com/targets 发送一次 GET 请求,来获取最新的目标列表.

Ps:

  • 上述  url 的格式必须为 http://ip:port
  • 这里不能加 cookie 或者 header,如果需要 token 来鉴权,建议直接 querystring 进行传参

使用案例

一般公司在做项目前,都会写一个发布系统,这个发布系统就用来复杂把我们写好的程序发布到 预发、生产 等环境.     那么在这个发布系统上,我们就可以给 Prometheus 提供 HTTP 接口,这个接口就可以从 发布系统 的数据库中拿到所有的 服务器示例套接字(ip:port),组装成 json 指定格式,最后返回.

Note:在公司,一般不会全部放到一个 HTTP 接口中,而是提供很多个 HTTP 接口,例如:

  • MySQL 集群所有实例信息对应一个 HTTP 接口
  • Kafak 集群所有实例信息对应一个 HTTP 接口.
  • 所有跑在 jvm 上的程序(SpringBoot 程序)对应一个 HTTP 接口.

下面我来演示一个简单的例子:

a)SpringBoot 应用如下:

@RestController
class HttpApi {

//    {
//        "targets": ["env-base:9100"],
//        "labels": {
//        "env": "prod",
//        "job": "node_exporter"
//    }
//    },
//    {
//        "targets": ["env-base:9104", "env-base:9121"],
//        "labels": {
//        "env": "prod",
//        "job": "mysql_and_redis_exporter"
//    }

    @RequestMapping("/targets")
    fun targets(): List<PrometheusVo> {
        //1. 从数据库中获取对应的 套接字 信息,
        //...

        //2. 组装 json 数据
        val v1 = PrometheusVo(
            targets = listOf("env-base:9100"),
            labels = Labels(
                env = "prod",
                job = "node_exporter"
            )
        )
        val v2 = PrometheusVo(
            targets = listOf("env-base:9104", "env-base:9121"),
            labels = Labels(
                env = "prod",
                job = "mysql_and_redis_exporter"
            )
        )
        return listOf(v1, v2)
    }

}

data class PrometheusVo (
    val targets: List<String>,
    val labels: Labels
)

//注意,根据 prometheus 的要求,不允许值的第一个字符为数字!!
data class Labels (
    val env: String,
    val job: String
)

 访问 100.94.135.96:9000/targets 如下:

b)配置文件如下:

scrape_configs:

  - job_name: http_sd_expoter
    http_sd_configs:
      - url: 'http://100.94.135.96:9000/targets'
        refresh_interval: 5s

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

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

相关文章

【Linux】:文件fd

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家带来关于文件fd的相关知识点&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精通 数据…

Java二十三种设计模式-单例模式(1/23)

引言 在软件开发中&#xff0c;设计模式是一套被反复使用的、大家公认的、经过分类编目的代码设计经验的总结。单例模式作为其中一种创建型模式&#xff0c;确保一个类只有一个实例&#xff0c;并提供一个全局访问点。本文将深入探讨单例模式的概念、实现方式、使用场景以及潜…

C语言 ——— 模拟实现strcpy函数

目录 strcpy函数功能介绍 strcpy函数的模拟实现 strcpy函数功能介绍 学习并使用strcpy函数-CSDN博客 strcpy函数的模拟实现 代码演示&#xff1a; #include<stdio.h> #include<assert.h> char* my_strcpy(char* destination, const char* source) {assert(des…

单目3D和bev综述

文章目录 SOTA2D 检测单目3d检测3d bev cam范式1 Transformer attention is all you need 20172 ViT vision transformer ICLR 2021google3 swin transformer 2021 ICCV bestpaper MS4 DETR 20205 DETR3D 20216 PETR 20227 bevformerLSSbevdetcaddn指标 mAP NDS标注&#xff1a…

kubernetes——Istio(三)

一、安全 将单一应用程序分解为微服务可提供各种好处&#xff0c;包括更好的灵活性、 可伸缩性以及服务复用的能力。但是&#xff0c;微服务也有特殊的安全需求&#xff1a; 为了抵御中间人攻击&#xff0c;需要流量加密。为了提供灵活的服务访问控制&#xff0c;需要双向 TL…

【P2P_BMA_P2MP_NBMA】

基本概念介绍 1. BMA&#xff08;Broadcast&#xff09; 广播型多路访问技术&#xff0c;在一个MA&#xff08;多路访问&#xff0c;在一个网段内的节点数量不限制。&#xff09;网络中同时存在广播机制。 特点&#xff1a; 允许将数据包广播到网络上的所有主机。路由器之间…

科普文:微服务技术栈梳理

概叙 如上两图所示&#xff0c;微服务架构下&#xff0c;需要的组件很多&#xff0c;上面中也并未列全。下面将梳理一下国内微服务架构下&#xff0c;用到的技术栈&#xff0c;仅供参考。 科普文&#xff1a;12种常见的软件架构-CSDN博客 没有最好的架构&#xff0c;只有最适…

开启音乐新纪元,AI人工智能创新歌词

在音乐的漫长历史长河中&#xff0c;每一次的创新都如同璀璨星辰&#xff0c;照亮了前行的道路。如今&#xff0c;人工智能的崛起正引领着音乐创作步入一个全新的纪元&#xff0c;为歌词领域带来了前所未有的变革。 “妙笔生词智能写歌词软件&#xff08;veve522&#xff09;”…

智慧园区智能化解决方案PPT(173页)

智慧园区智能化解决方案摘要 智慧园区智能化解决方案是一项综合性的系统工程&#xff0c;它通过集成先进的信息技术&#xff0c;实现园区管理的自动化、智能化&#xff0c;提高园区的安全性、效率和舒适度。本文详细介绍了某智慧园区项目的规划与设计&#xff0c;该项目建筑面…

python的字符串

字符串 简单操作 创建 利用 ‘ ’ 或 “ ” 将字符或数字包裹起来的都为字符串 a"你好" 格式化字符串 元组的字符格式化 字符串格式化函数 srt.format() f格式化 方法 split()//指定分割符经行分割 strip()//指定移除字符头尾的字符 join()//指定序列中的字符连接成新…

C#学习

C#学习 1.B站丑萌气质狗C#的循环-判断泛型错误处理面向对象static的使用定义showInfo类和Hero类 在这里插入图片描述 然后在该解决方案add新建一个类库&#xff0c;点击rebuild&#xff0c;会在bin文件夹下生成.dll文件 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direc…

SAC-IA粗配准算法记录

1. 算法思路 SAC-IA(Sample Consensus Initial Aligment,SAC-IA)粗配准算法是一种基于局部特征描述子的点云粗配准算法,其需要计算点云的快速点特征直方图(FPFH)来保持对应点对之间的相似关系,根据相似关系来搜索点云中的对应点。其基本原理是采用采样一致性的思想,通过查…

Zabbix6.0使用自带模板(Redis by Zabbix agent 2)监控Redis数据库

注意&#xff1a;Zabbix6.0使用Redis by Zabbix agent 2 模板可直接监控Redis数据。 1、添加Redis账号密码信息(如果Redis没有设置密码可省略此步骤) vim zabbix_agent2.confPlugins.Redis.Sessions.redis.Uritcp://redis.huayunworld.com:6379 Plugins.Redis.Sessions.redis…

工具推荐|语音轻松记笔记,AI帮你识别和润色

# 你日常有没有遇到这样的场景&#xff1f; 偶尔有一些奇思妙想想要记录下来&#xff0c;但没有一个轻量的工具&#xff0c;往往会想着想着就把这个想法抛之脑后。特别是搞短视频的&#xff0c;你也许希望把当时的想法录下来&#xff0c;稍微剪辑下就能出一条不错的口播视频。…

外泌体相关基因肝癌临床模型预测——2-3分纯生信文章复现——5.拷贝数变异及突变图谱(1)

内容如下: 1.外泌体和肝癌TCGA数据下载 2.数据格式整理 3.差异表达基因筛选 4.预后相关外泌体基因确定 5.拷贝数变异及突变图谱 6.外泌体基因功能注释 7.LASSO回归筛选外泌体预后模型 8.预后模型验证 9.预后模型鲁棒性分析 10.独立预后因素分析及与临床的相关性分析…

CMU 15-213 CSAPP. Ch9. Virtual Memory

CMU 15-213 CSAPP (Ch1~Ch3) CMU 15-213 CSAPP (Ch5~Ch7) CMU 15-213 CSAPP (Ch8) CMU 15-213 CSAPP (Ch9) CMU 15-213 CSAPP (Ch10) 视频链接 课件链接 课程补充 该课程使用 64位 编译器&#xff01; Ch9. Virtual Memory 9.1 Address spaces 将内存看成数组&#xff0c;物…

OpenGL笔记十二之实现三角形在屏幕横向上往复运动的动画

OpenGL笔记十二之实现三角形在屏幕横向上往复运动的动画 —— 2024-07-14 晚上 bilibili赵新政老师的教程看后笔记 code review! 文章目录 OpenGL笔记十二之实现三角形在屏幕横向上往复运动的动画1.运行2.vs3.fs4.main.cpp的关键部分 1.运行 2.vs #version 330 core layout …

成都工业学院2022级数据库原理及应用专周课程学生选课系统(进阶篇)

运行环境 操作系统&#xff1a;Windows 11 家庭版 运行软件&#xff1a;Visual Studio Code Navicat Premium 16 进阶内容 过程函数改为触发器 例如将学生选课的过程函数改为对选课表添加触发器 使用ruoyi-vue实现可视化 配置并运行ruoyi-vue 进行代码生成 将生成的代码添…

【Linux】03.权限

一、权限的概念 Linux下有两种用户&#xff1a;超级用户&#xff08;root&#xff09;、普通用户。 超级用户&#xff1a;可以在 linux 系统下做任何事情&#xff0c;不受限制普通用户&#xff1a;在linux下做有限的事情超级用户的命令提示符是“#”&#xff0c;普通用户的命…

ctfshow-web入门-php特性(web104-web108)

目录 1、web104 2、web105 3、web106 4、web107 5、web108 1、web104 需要传入的 v1 和 v2 进行 sha1 加密后相等。 解法1&#xff1a; 这里都没有判断 v1 和 v2 是否相等&#xff0c;我们直接传入同样的内容加密后肯定也一样。 ?v21 post&#xff1a; v11 拿到 flag…