【云原生 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.pswp.cn/news/168035.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/168035.shtml
英文地址,請注明出處:http://en.pswp.cn/news/168035.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spring事務底層原理(待完善)

EnableTransactionManagement 我們經常使用EnableTransactionManagement開啟事務, 這個注解導入一個類,Import(TransactionManagementConfigurationSelector.class), 會在spring容器增加兩個bean, AutoProxyRegistrar和ProxyTransactionManagementConfiguration. AutoProxyRe…

IDEA中常用快捷鍵

整理了一些IDEA開發常用的快捷鍵&#xff1a; 快捷鍵組合實現效果psvm Tab鍵 / main Tab鍵public static void main(String[] args)sout Tab鍵System.out.println()Ctrl X刪除當前行Ctrl D復制當前行AltInsert(或右鍵Generate)生成代碼(如get,set方法,構造函數等)CtrlAltT…

存儲區域

將應用程序加載到內存空間執行時&#xff0c;操作系統負責代碼段、數據段和BSS段的加載&#xff0c;并在內存中為這些段分配空間。 棧段亦由操作系統分配和管理&#xff0c;而不需要程序員顯示地管理&#xff1b;堆段由程序員自己管理&#xff0c;即顯示地申請和釋放空間。 進…

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) &…

WPF面試題入門篇

入門篇[2] 1. 談談什么是WPF&#xff1f; WPF&#xff08;Windows Presentation Foundation&#xff09;是微軟公司開發的一種用于創建Windows應用程序的用戶界面框架。它是.NET Framework的一部分&#xff0c;提供了一種基于XAML&#xff08;可擴展應用程序標記語言&#xf…

【算法技巧】位運算

目錄 1.概述2.位運算技巧2.1.與運算 (&)2.1.1.判斷奇偶性2.1.2.判斷一個數是否是 2 的冪2.1.3.將英文字母轉換為大寫2.1.4.代替取模運算 2.2.或運算 (|)2.2.1.將英文字母轉換為小寫 2.3.異或運算 (^)2.3.1.消除成對相同的數2.3.2.不使用臨時變量來交換兩個數2.3.3.進行英文…

一起學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;第…

C++ Qt QVariant類型使用介紹與代碼演示

作者:令狐掌門 技術交流QQ群:675120140 csdn博客:https://mingshiqiang.blog.csdn.net/ 文章目錄 一、QVariant基本用法二、自定義類型使用QVariant三、其它用法賦值修改和替換值使用`QVariant::setValue()`設置值復制構造函數和賦值操作比較使用`QVariant::swap()`交換值使…

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…

UserRole

Qt::UserRole 是 Qt::ItemDataRole 枚舉中的一個成員&#xff0c;用于表示自定義數據角色&#xff08;Data Role&#xff09;的起始值。 在 Qt 中&#xff0c;Qt::ItemDataRole 枚舉用于標識項&#xff08;Item&#xff09;中不同類型的數據。這些數據角色包括 Qt::DisplayRol…

目標檢測YOLO系列從入門到精通技術詳解100篇-【目標檢測】紅外熱成像

目錄 前言 知識儲備 紅外熱成像儀基礎知識 算法原理 紅外熱成像探測距離 紅外圖像增強

第一百七十八回 介紹一個三方包組件: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…