【云原生 Prometheus篇】Prometheus的动态服务发现机制

news2024/11/14 3:43:05

自动发现

  • 一、Prometheus服务发现 理论部分
    • 1.1 Prometheus数据采集配置
    • 1.2 基于文件的服务发现
    • 1.3 基于consul的服务发现
    • 1.4 基于 Kubernetes API 的服务发现
      • 1.4.1 概念
      • 1.4.2 部分配置参数
      • 1.4.3 配置模板
  • 二、实例一:部署基于文件的服务发现
    • 2.1 创建用于服务发现的文件
    • 2.2 修改Prometheus的配置文件
    • 2.3 浏览器访问测试
  • 三、实例二:部署基于consul的服务发现
    • 3.1 部署Consul服务
    • 3.2 在Consul 上注册 Services
    • 3.3 修改 prometheus 配置文件
  • 四、Prometheus对接Kurbernetes集群的方法
    • 4.1 方式一:外部部署
    • 4.2 方式二:内部部署(以Pod的形式)
  • 五、小结

一、Prometheus服务发现 理论部分

1.1 Prometheus数据采集配置

scrape_configs:
- job_name: XXX              #自定义监控任务的名称
  metrics_path: "/metrics"   #指定获取监控指标数据的URL路径,一般都是 /metrics
  scheme: "https"             #指定拉取监控指标数据的协议,http(默认值)|https
  
  #定义静态配置的监控目标
  static_configs:           
  - targets:                   #指定监控目标的IP和exporter的端口
    - <IP1>:<exporter的端口>
    - <IP2>:<exporter的端口>
    labels:                    #自定义监控目标的标签
	  <标签key>: <标签value>

在这里插入图片描述

1.2 基于文件的服务发现

简介

Prometheus Server 会定期从文件中加载 Target 信息,文件可使用 YAML 和 JSON 格式,它含有定义的 Target 列表,以及可选的标签信息。

基于文件的服务发现不依赖于任何平台或第三方服务,是最为简单和通用的实现方式。

配置模板

#基于文件的服务发现
  file_sd_configs:
  - files:
    - XXX.yaml                 #指定作服务发现的文件的路径
    refresh_interval: 1m       #指定服务发现的刷新间隔时间

1.3 基于consul的服务发现

下载地址:https://www.consul.io/downloads/

简介

Consul 是一款基于 golang 开发的开源工具,主要面向分布式,服务化的系统提供服务注册、服务发现和配置管理的功能。

提供服务注册/发现、健康检查、Key/Value存储、多数据中心和分布式一致性保证等功能。

模板

  #基于consul的服务发现
  consul_sd_configs:
  - server: <consul服务器IP>:8500     #指定consul服务器地址和端口
    tags:                             #指定在consul服务发现中用于作prometheus监控的tags标签
	- 用于作prometheus监控的标签
    refresh_interval: 1m

1.4 基于 Kubernetes API 的服务发现

1.4.1 概念

基于 Kubernetes API 的服务发现机制,支持将API Server 中 Node、Service、Endpoint、Pod 和 Ingress 等资源类型下相应的各资源对象视作 target, 并持续监视相关资源的变动

●Node、Service、Endpoint、Pod 和 Ingress 资源分别由各自的发现机制进行定义

●负责发现每种类型资源对象的组件,在 Prometheus 中称为一个 role

●支持在集群上基于 DaemonSet 控制器部署 node-exporter 后发现各 Node 节点,也可以通过 kubelet 来作为 Prometheus 发现各 Node 节点的入口

1.4.2 部分配置参数

# The API server addresses. If left empty, Prometheus is assumed to run inside of the cluster and will discover API servers automatically
and use the pod's
# CA certificate and bearer token file at /var/run/secrets/kubernetes.io/serviceaccount/.
[ api_server: <host> ]

# The Kubernetes role of entities that should be discovered. One of endpoints, service, pod, node, or ingress.
role: <string>

# Optional authentication information used to authenticate to the API server.
# Note that 'basic_auth', 'bearer_token'和'bearer_token_file' 等认证方式互斥;
[ bearer_token: <secret> ]
[ bearer_token_file: <filename> ]

# TLS configuration.
tls_config:
# CA certificate to validate API server certificate with.
[ ca_file: <filename> ]

# Certificate and key files for client cert authentication to the server.
[ cert_file: <filename> ]
[ key_file: <filename> ]

# ServerName extension to indicate the name of the server.
[ server_name: <string> ]

# Optional namespace discovery. If omitted, all namespaces are used.
namespaces:
names:
[ - <string> ]

1.4.3 配置模板

 #基于K8S的服务发现
- job_name: XXX
  scheme: "https"
  kubernetes_sd_configs:
  - role: endpoints|service|pod|node|ingress      #指定被监控的K8S资源对象类型

二、实例一:部署基于文件的服务发现

2.1 创建用于服务发现的文件

新建工作目录

cd /usr/local/prometheus

mkdir targets

在文件中配置所需的 target

vim targets/node-exporter.yaml
- targets:
  - 192.168.2.108:9100
  - 192.168.2.106:9100
  labels:
    app: node-exporter
    job: node


vim targets/mysqld-exporter.yaml
- targets:
  - 192.168.2.108:9104
  - 192.168.2.106:9104
  labels:
    app: mysqld-exporter
    job: mysqld

2.2 修改Prometheus的配置文件

修改 prometheus 配置文件,发现 target 的配置,定义在配置文件的 job 之中。

vim /usr/local/prometheus/prometheus.yml
......
scrape_configs:
  - job_name: nodes
    file_sd_configs:                  #指定使用文件服务发现
    - files:                          #指定要加载的文件列表
      - targets/node*.yaml            #文件加载支持通配符
      refresh_interval: 2m            #每隔 2 分钟重新加载一次文件中定义的 Targets,默认为 5m
  
  - job_name: mysqld
    file_sd_configs:
    - files:
      - targets/mysqld*.yaml
      refresh_interval: 2m

在这里插入图片描述

2.3 浏览器访问测试

#先重启服务
systemctl reload prometheus
#然后
浏览器查看 Prometheus 页面的 Status -> Targets

在这里插入图片描述

三、实例二:部署基于consul的服务发现

3.1 部署Consul服务

cd /opt/
unzip consul_1.9.2_linux_amd64.zip
mv consul /usr/local/bin/
#创建 Consul 服务的数据目录和配置目录
mkdir /var/lib/consul-data
mkdir /etc/consul/
#使用 server 模式启动 Consul 服务
consul agent \
-server \
-bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-config-dir=/etc/consul/ \
-bind=192.168.2.108 \
-client=0.0.0.0 \
-node=consul-server01 &> /var/log/consul.log &

在这里插入图片描述

#查看 consul 集群成员
consul members

在这里插入图片描述

3.2 在Consul 上注册 Services

#在配置目录中添加文件
vim /etc/consul/nodes.json
{
  "services": [
    {
      "id": "node_exporter-node01",
      "name": "node01",
      "address": "192.168.2.108",
      "port": 9100,
      "tags": ["nodes"],
      "checks": [{
        "http": "http://192.168.2.108:9100/metrics",
        "interval": "5s"
      }]
    },
    {
      "id": "node_exporter-node02",
      "name": "node02",
      "address": "192.168.2.106",
      "port": 9100,
      "tags": ["nodes"],
      "checks": [{
        "http": "http://192.168.2.106:9100/metrics",
        "interval": "5s"
      }]
    }
  ]
}
#让 consul 重新加载配置信息
consul reload		

浏览器访问:http://192.168.2.108:8500

在这里插入图片描述

3.3 修改 prometheus 配置文件

vim /usr/local/prometheus/prometheus.yml
......
  - job_name: nodes
    consul_sd_configs:                  #指定使用 consul 服务发现
    - server: 192.168.2.108:8500        #指定 consul 服务的端点列表
      tags:                             #指定 consul 服务发现的 services 中哪些 service 能够加入到 prometheus 监控的标签
      - nodes
      refresh_interval: 2m

在这里插入图片描述

systemctl reload prometheus
浏览器查看 Prometheus 页面的 Status -> Targets

在这里插入图片描述

#让 consul 注销 Service
consul services deregister -id="node_exporter-node02"

#重新注册
consul services register /etc/consul/nodes.json

四、Prometheus对接Kurbernetes集群的方法

4.1 方式一:外部部署

在K8S集群外部署的prometheus的认证配置。

  #第一种老版本配置方法
  api_server: <apiserver的IP>:6443          #指定apiserver的地址和端口
  tls_config:
    ca_file: <filename>     #指定ca证书的路径
    cert_file: <filename>   #指定客户端证书的路径
    key_file: <filename>    #指定客户端私钥的路径
  #第二种新版本配置方法
  kubeconfig_file: <filename>   #指定kubeconfig集群引导配置文件路径,kubeconfig文件会包含集群参数(ca证书、apiserver地址)和客户端参数(客户端证书和私钥信息)

部署思路

  1. 生成认证密钥: 首先,需要生成用于认证的密钥。

    可以使用 htpasswd 命令行工具来生成一个包含用户名和密码的密钥文件。

    例如,使用以下命令生成一个名为 auth 的密钥文件:

    htpasswd -c -B -C 12 auth username
    #上述命令将提示你输入密码
    #然后在当前目录下生成一个名为 `auth` 的密钥文件,
    #并将用户名和密码添加到该文件中。
    
  2. 创建 Secret 对象: 在 Kubernetes 集群中,使用 Secret 对象来存储认证密钥。

    kubectl create secret generic prometheus-auth --from-file=auth
    #创建一个名为 `prometheus-auth` 的 Secret 对象,并将 `auth` 文件的内容存储在其中。
    
  3. 更新 Prometheus 配置: 编辑 Prometheus 的配置文件 prometheus.yml,添加认证相关的配置。

  4. 部署 Prometheus: 根据你的部署方式,可以使用 Docker 或其他工具将 Prometheus 部署在Kubernetes集群外部。

  5. 部署配置文件和 Secret 对象: 将更新后的 prometheus.yml 文件和创建的 Secret 对象应用到 Prometheus 的部署中。

    比如使用容器编排工具(如 Docker Compose),将这些文件挂载到容器中。

完成上述步骤后, Prometheus 将使用认证配置来保护其 Web UI 和其他功能。

只有提供正确的用户名和密码才能访问相关页面。

4.2 方式二:内部部署(以Pod的形式)

在K8S集群内以Pod形式部署的prometheus的认证配置。

#在K8S集群内以Pod形式部署的prometheus的认证配置
  tls_config:
    ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
  #第一种老版本配置方法
  bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
  #第二种新版本配置方法
  authorization:
    credentials_file: /var/run/secrets/kubernetes.io/serviceaccount/token

五、小结

Prometheus数据采集配置
scrape_configs:
- job_name: XXX              #自定义监控任务的名称
  metrics_path: "/metrics"   #指定获取监控指标数据的URL路径,一般都是 /metrics
  scheme: "http"             #指定拉取监控指标数据的协议,http(默认值)|https
  
  #定义静态配置的监控目标
  static_configs:           
  - targets:                   #指定监控目标的IP和exporter的端口
    - <IP1>:<exporter的端口>
    - <IP2>:<exporter的端口>
    labels:                    #自定义监控目标的标签
	  <标签key>: <标签value>

  #基于文件的服务发现
  file_sd_configs:
  - files:
    - XXX.yaml                 #指定作服务发现的文件的路径
    refresh_interval: 1m       #指定服务发现的刷新间隔时间

  #基于consul的服务发现
  consul_sd_configs:
  - server: <consul服务器IP>:8500     #指定consul服务器地址和端口
    tags:                             #指定在consul服务发现中用于作prometheus监控的tags标签
	- 用于作prometheus监控的标签
    refresh_interval: 1m

  #基于K8S的服务发现
- job_name: XXX
  scheme: "https"
  kubernetes_sd_configs:
  - role: endpoints|service|pod|node|ingress      #指定被监控的K8S资源对象类型
  
#在K8S集群外部署的prometheus的认证配置
  #第一种老版本配置方法
  api_server: <apiserver的IP>:6443          #指定apiserver的地址和端口
  tls_config:
    ca_file: <filename>     #指定ca证书的路径
    cert_file: <filename>   #指定客户端证书的路径
    key_file: <filename>    #指定客户端私钥的路径
  #第二种新版本配置方法
  kubeconfig_file: <filename>   #指定kubeconfig集群引导配置文件路径,kubeconfig文件会包含集群参数(ca证书、apiserver地址)和客户端参数(客户端证书和私钥信息)

#在K8S集群内以Pod形式部署的prometheus的认证配置
  tls_config:
    ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
  #第一种老版本配置方法
  bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
  #第二种新版本配置方法
  authorization:
    credentials_file: /var/run/secrets/kubernetes.io/serviceaccount/token

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

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

相关文章

【pandas数据处理】数据结构

数据结构 Series基于列表创建数据结构自定义元素的行标签基于字典创建数据结构 DataFrame对象基于列表创建数据结构设置参数来定义行列标签基于字典 Series 一维数组对象&#xff0c;不仅包含数据元素&#xff0c;还包含一组与数据元素对应的行标签。 基于列表创建数据结构 …

2023年【制冷与空调设备安装修理】考试报名及制冷与空调设备安装修理考试资料

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 制冷与空调设备安装修理考试报名考前必练&#xff01;安全生产模拟考试一点通每个月更新制冷与空调设备安装修理考试资料题目及答案&#xff01;多做几遍&#xff0c;其实通过制冷与空调设备安装修理模拟试题很简单。…

上市公司-股权性质数据(国企、央企)2003-2022年

上市公司-股权性质数据&#xff08;国企、央企&#xff09;是一个针对上市公司的数据集&#xff0c;主要涵盖了A股公司股权性质的详细信息&#xff0c;区分了公司是否为民营企业、国企或央企。这份数据集提供了每家上市公司的股权结构背景&#xff0c;对投资者、市场分析师和经…

深度学习卷积神经网络参数计算难点重点

目录 一、卷积层图像输出尺寸 二、池化层图像输出尺寸 三、全连接层输出尺寸 四、卷积层参数数量 五、全连接层参数数量 六、代码实现与验证 以LeNet5经典模型为例子并且通道数为1 LeNet5网络有7层&#xff1a; ​ 1.第1层&#xff1a;卷积层 ​ 输入&#xff1a;原始的图片像素…

简答的体系架构分析

背景 一点体系架构的分析 体系架构图

单片机、ARM、嵌入式开发、Android 底层开发有什么关系?

单片机、ARM、嵌入式开发、Android 底层开发有什么关系&#xff1f; 从我目前的见识来看&#xff1a; 单片机是个系统&#xff08;比如&#xff1a;51、AVR、PLC...&#xff09;&#xff0c;其中包含了去除了输入输出之外的运算器、控制器、存储器&#xff0c;我们用程序可以非…

文献速递:人工智能(AI)用于神经学家:数字神经元会梦见电子羊吗?

这篇文章详细讨论了人工智能&#xff08;AI&#xff09;在神经学领域的应用及其对医疗保健行业的深远影响。主要内容可以分为以下几个部分&#xff1a; **1.AI和机器学习的基础知识&#xff1a;**文章首先解释了AI的基本概念&#xff0c;回顾了从最初的基于规则的方法到当前的…

【经典小练习】简单的文件加密解密

文章目录 &#x1f339;什么是文件加密⭐应用场景 &#x1f6f8;案例&#x1f33a;描述&#x1f33a;代码 &#x1f339;什么是文件加密 Java文件加密是指使用Java编程语言和相关的加密算法对文件进行加密处理。通过这种方式&#xff0c;可以将文件内容转换为一种非常规的形式…

金融机构如何高效率考勤?这个技巧帮了大忙!

在现代社会&#xff0c;随着科技的不断发展&#xff0c;人脸识别技术作为一种高效、便捷的身份验证手段&#xff0c;逐渐应用于各个领域&#xff0c;其中之一便是人脸考勤系统。 传统的考勤方式存在一系列问题&#xff0c;如卡片打卡容易被冒用、签到表容易造假等&#xff0c;而…

「首届广州百家新锐企业」名单出炉!数说故事遴选入围

11月20日&#xff0c;由中共广州市委统战部、市工商联、市工信局、市国资委、市科技局联合主办的首届广州百家新锐企业融通创新交流会在广州成功举办。 为推动广州市中小民营企业的创新发展&#xff0c;践行新发展理念&#xff0c;厚植广州产业根基&#xff0c;现场发布首届广…

Mac Ubuntu双系统解决WiFi和WiFi 5G网络不可用问题

文章目录 设备信息1. Ubuntu WiFi不可用解决方式查看Mac的网卡型号根据网卡型号搜索获取到的解决方法查看WiFi名字问题参考链接 2. 解决WiFi重启后失效问题打开终端创建.sh脚本文件编辑脚本文件复制粘贴脚本修改脚本权限创建并编辑systemd service文件复制粘贴下文到systemd se…

百度搜索框中的下拉提示关键词提取

效果图 代码有点多&#xff0c;绑定资源了 导出excel如下 贴心养眼背景图鼠标点击小爱心

c语言判断三角形

以下是一个用C语言编写的程序&#xff0c;用于判断输入的三个数能否构成三角形。 #include <stdio.h>int main() { int a, b, c; printf("请输入三角形的三条边长&#xff1a;\n"); scanf("%d%d%d", &a, &b, &c); if (a b…

【​用运算放大器设计恒流电流源电压4V-74V适应范围 ​】2021-11-29

缘由用运算放大器设计恒流电流源-编程语言-CSDN问答直流恒流源设计&#xff0c;要求用到运算放大器-硬件开发-CSDN问答求助恒流驱动电路&#xff0c;运放端口电压的问题&#xff1f; - 电路设计论坛 - 电子技术论坛 - 广受欢迎的专业电子论坛!(不能实现恒流坏的电路设计反面例子…

mac 修改 hosts 文件

打开 hosts 所在文件夹 command shift G 快捷键 输入&#xff1a;“/private/etc/hosts” 后回车 如下所示 进入 hosts 文件所在位置&#xff0c;找到 hosts 文件&#xff0c;双击打开 修改 hosts 文件 将所需要的配置信息追加到hosts 文件中&#xff0c;或者修改需要改…

数据结构与算法【哈希表】的Java实现

目录 介绍 实现哈希表 大体框架 实现数组扩容 实现查询key 实现新增元素 实现删除元素 哈希算法 String中重写的hashCode()方法 介绍 哈希表也叫散列表&#xff0c;哈希表是一种数据结构&#xff0c;它提供了快速的插入操作和查找操作&#xff0c;无论哈希表总中有多…

Flink 常用物理分区算子(Physical Partitioning)

Flink 物理分区算子(Physical Partitioning) 在Flink中&#xff0c;常见的物理分区策略有&#xff1a;随机分配(Random)、轮询分配(Round-Robin)、重缩放(Rescale)和广播(Broadcast)。 接下来&#xff0c;我们通过源码和Demo分别了解每种物理分区算子的作用和区别。 (1) 随机…

数组题目: 665. 非递减数列、453. 最小移动次数使数组元素相等、283. 移动零、189. 旋转数组、396. 旋转函数

665. 非递减数列 题解&#xff1a; 题目要求一个非递减数列&#xff0c;我们可以考虑需要更改的情况&#xff1a; nums {4, 2, 5} 对于这个nums&#xff0c;由于2的出现导致非递减&#xff0c;更改的情况就是要么4调到<2&#xff0c;要么2调到4,5. nums {1, 4, 2, 5} …

从Redis反序列化UserDetails对象异常后发现FastJson序列化的一些问题

最近在使用SpringSecurityJWT实现认证授权的时候&#xff0c;出现Redis在反序列化userDetails的异常。通过实践发现&#xff0c;使用不同的序列化方法和不同的fastJson版本&#xff0c;异常信息各不相同。所以特地记录了下来。 一、项目代码 先来看看我项目中redis相关配置信息…

为什么说巴罗洛是意大利葡萄酒中的极品?

在来自南欧国家的众多优秀葡萄酒中&#xff0c;巴罗洛是最好最著名的意大利红酒之一。巴罗洛是一种来自意大利的高品质红酒&#xff0c;巴罗洛红酒是干的&#xff0c;浓郁的&#xff0c;富含单宁和酒精&#xff0c;典型的水果和泥土的味道。巴罗洛产区位于该国北部的皮埃蒙特地…