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

自动发现

  • 一、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路径,一般都是 /metricsscheme: "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: XXXscheme: "https"kubernetes_sd_configs:- role: endpoints|service|pod|node|ingress      #指定被监控的K8S资源对象类型

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

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

新建工作目录

cd /usr/local/prometheusmkdir targets

在文件中配置所需的 target

vim targets/node-exporter.yaml
- targets:- 192.168.2.108:9100- 192.168.2.106:9100labels:app: node-exporterjob: nodevim targets/mysqld-exporter.yaml
- targets:- 192.168.2.108:9104- 192.168.2.106:9104labels:app: mysqld-exporterjob: mysqld

2.2 修改Prometheus的配置文件

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

vim /usr/local/prometheus/prometheus.yml
......
scrape_configs:- job_name: nodesfile_sd_configs:                  #指定使用文件服务发现- files:                          #指定要加载的文件列表- targets/node*.yaml            #文件加载支持通配符refresh_interval: 2m            #每隔 2 分钟重新加载一次文件中定义的 Targets,默认为 5m- job_name: mysqldfile_sd_configs:- files:- targets/mysqld*.yamlrefresh_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: nodesconsul_sd_configs:                  #指定使用 consul 服务发现- server: 192.168.2.108:8500        #指定 consul 服务的端点列表tags:                             #指定 consul 服务发现的 services 中哪些 service 能够加入到 prometheus 监控的标签- nodesrefresh_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路径,一般都是 /metricsscheme: "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: XXXscheme: "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.mzph.cn/news/168035.shtml

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

相关文章

uniapp 轮播图(含组件封装,自动注册全局组件)

效果预览 组件封装 src\components\SUI_Swiper.vue 可参考官网配置更多属性 swipernavigator <script setup lang"ts"> import { ref } from vue defineProps({config: Object, })const activeIndex ref(0) const change: UniHelper.SwiperOnChange (e) &…

一起学docker系列之八使用 Docker 安装配置 MySQL

目录 前言步骤 1&#xff1a;拉取 MySQL 镜像步骤 2&#xff1a;运行 MySQL 容器步骤 3&#xff1a;检查容器状态步骤 4&#xff1a;进入 MySQL 容器步骤 5&#xff1a;配置 MySQL 字符编码步骤 6&#xff1a;重启 MySQL 容器步骤 7&#xff1a;测试字符编码步骤 8&#xff1a;…

防止应用程序截屏(容器式,防止极域电子教室和录屏软件录制)

核心原理、实现目的 1、使用Panel容器将外部窗口嵌入自己写的程序 2、使用防止截屏的函数来对窗口透明&#xff0c;这可以使本窗口内所有窗口在录屏软件上消失 3、解放&#xff0c;抓取&#xff0c;存储句柄&#xff0c;实现摆脱录屏&#xff08;极域监控&#xff09; 程序…

用 Addon 增强 Node.js 和 Electron 应用的原生能力

前言 Node.js Addon 是 Node.js 中为 JavaScript 环境提供 C/C 交互能力的机制。其形态十分类似 Java 的 JNI&#xff0c;都是通过提供一套 C/C SDK&#xff0c;用于在 C/C 中创建函数方法、进行数据转换&#xff0c;以便 JavaScript / Java 等语言进行调用。这样编写的代码通常…

Spring - Mybatis-设计模式总结

Mybatis-设计模式总结 1、Builder模式 2、工厂模式 3、单例模式 4、代理模式 5、组合模式 6、模板方法模式 7、适配器模式 8、装饰者模式 9、迭代器模式 虽然我们都知道有26个设计模式&#xff0c;但是大多停留在概念层面&#xff0c;真实开发中很少遇到&#xff0c;…

【数据结构】时间和空间复杂度

马上就要进入到数据结构的学习了 &#xff0c;我们先来了解一下时间和空间复杂度&#xff0c;这也可以判断我们的算法是否好坏&#xff1b; 如何衡量一个算法的好坏&#xff1f; 就是看它的算法效率 算法效率 算法效率分析分为两种&#xff1a;第一种是时间效率&#xff0c;第…

CVE-2023-22515:Atlassian Confluence权限提升漏洞复现 [附POC]

文章目录 Atlassian Confluence权限提升(CVE-2023-22515)漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 Atlassian Confluence权限提升(CVE-2023-22515)漏洞复现 [附POC] 0x01 前言 免责声明&…

vue中下载文件后无法打开的坑

今天在项目开发的时候临时要添加个导出功能我就写了一份请求加导出得代码&#xff0c; 代码&#xff1a; //导出按钮放开exportDutySummarizing (dataRangeInfo) {const params {departmentName: dataRangeInfo.name,departmentQode: dataRangeInfo.qode}//拼接所需得urlcons…

第一百七十八回 介绍一个三方包组件:SlideSwitch

文章目录 1. 概念介绍2. 使用方法3. 代码与效果3.1 示例代码3.2 运行效果 4. 内容总结 我们在上一章回中介绍了"如何创建垂直方向的Switch"相关的内容&#xff0c;本章回中将 介绍SlideSwitch组件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们…

多功能智能灯杆主要功能有哪些?

多功能智能灯杆这个词相信大家都不陌生&#xff0c;最近几年多功能智能灯杆行业发展迅速&#xff0c;迅速取代了传统路灯&#xff0c;那么多功能智能灯杆相比传统照明路灯好在哪里呢&#xff0c;为什么大家都选择使用叁仟智慧多功能智能灯杆呢&#xff1f;所谓多功能智能灯杆着…

【libGDX】Mesh纹理贴图

1 前言 纹理贴图的本质是将图片的纹理坐标与模型的顶点坐标建立一一映射关系。纹理坐标的 x、y 轴正方向分别朝右和朝下&#xff0c;如下。 2 纹理贴图 本节将使用 Mesh、ShaderProgram、Shader 实现纹理贴图&#xff0c;OpenGL ES 的实现见博客 → 纹理贴图。 DesktopLauncher…

超级应用平台(HAP)起航

各位明道云用户和伙伴&#xff0c; 今天&#xff0c;我们正式发布明道云10.0版本。从这个版本开始&#xff0c;我们将产品名称正式命名为超级应用平台&#xff08;Hyper Application Platform, 简称HAP&#xff09;。我们用“超级”二字表达产品在综合能力方面的突破&#xff…

视频监控中的智能算法与计算机视觉技术

智能视频监控是一种基于人工智能技术的监控系统&#xff0c;它能够通过对图像和视频数据进行分析&#xff0c;自动识别目标物体、判断其行为以及进行异常检测等功能&#xff0c;从而实现对场景的智能化监管。以下是常见的一些用于智能视频监控的算法&#xff1a; 1、人脸识别技…

org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder

密码&#xff0c;加密&#xff0c;解密 spring-security-crypto-5.7.3.jar /** Copyright 2002-2011 the original author or authors.** Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file except in compliance with t…

Kafka(一)

一&#xff1a;简介 解决高吞吐量项目的需求 是一款为大数据而生的消息中间件&#xff0c;具有百亿级tps的吞吐量&#xff0c;在数据采集、传输、存储的过程中发挥着作用 二&#xff1a;为什么要使用消息队列 一个普通访问量的接口和一个大并发的接口&#xff0c;它们背后的…

PostgreSQL Patroni 3.0 新功能规划 2023年 纽约PG 大会 (音译)

开头还是介绍一下群&#xff0c;如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, Sql Server等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;&#xff08;…

【技术分享】RK3399 Ubuntu通过Python实现录音和播放功能

​本文基于IDO-SBC3968 Ubuntu 系统通过Python脚本实现录音和播放功能。 IDO-SBC3968采用RK3399国产六核64位CPU高性能处理器&#xff0c;支持4K HDMI2.0显示&#xff0c;接口丰富&#xff0c;拥有千兆以太网&#xff0c;全协议TypeC接口&#xff0c;USB3.0 &#xff0c;eDP 和…

Redis高并发缓存架构

前言&#xff1a; 针对缓存我们并不陌生&#xff0c;而今天所讲的是使用redis作为缓存工具进行缓存数据。redis缓存是将数据保存在内存中的&#xff0c;而内存的珍贵性是不可否认的。所以在缓存之前&#xff0c;我们需要明确缓存的对象&#xff0c;是否有必要缓存&#xff0c;怎…

2022年03月 Scratch(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch等级考试(1~4级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 以下四个选项中,运行哪个积木块,可能得到523这个数值? A: B: C: D: 答案:B 四个选项都遵循统一的公式:随机数ⅹ10+3=523,因此可以得出随

和数集团出席中科院上海高研院​第三十三期“高研交叉论坛”信息能源融合专场

2023年11月21日&#xff0c;中国科学院上海高等研究院第三十三期“高研交叉论坛”信息能源融合专场在上海高研院成功举办。本次论坛由中国科学院上海高等研究院智能信息通信技术研究与发展中心、中国科学院低碳转化科学与工程重点实验室、中科院和数智能区块链与能源系统应用联…