[云原生] Prometheus自动服务发现部署

一、部署服务发现

1.1 基于文件的服务发现

基于文件的服务发现是仅仅略优于静态配置的服务发现方式,它不依赖于任何平台或第三方服务,因而也是最为简单和通用的实现方式。
Prometheus Server 会定期从文件中加载 Target 信息,文件可使用 YAML 和 JSON 格式,它含有定义的 Target 列表,以及可选的标签信息。

(1)创建用于服务发现的文件,在文件中配置所需的 target  
cd /usr/local/prometheus
mkdir targetsvim targets/node-exporter.yaml
- targets:- 192.168.80.130:9100labels:from: node-exportervim targets/mysqld-exporter.yaml
- targets:- 192.168.80.160:9104labels:from: mysqld-exporter

(2)修改 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: 2msystemctl reload prometheus
浏览器查看 Prometheus 页面的 Status -> Targets

1.2  基于 Consul 的服务发现

Consul 是一款基于 golang 开发的开源工具,主要面向分布式,服务化的系统提供服务注册、服务发现和配置管理的功能。
       提供服务注册/发现、健康检查、Key/Value存储、多数据中心和分布式一致性保证等功能。

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

(1)部署 Consul 服务 
cd /opt/
mkdir cnsul
unzip consul_1.9.2_linux_amd64.zip
mv consul /usr/local/bin/#创建 Consul 服务的数据目录和配置目录
mkdir data logs conf#使用 server 模式启动 Consul 服务
consul agent -server -bootstrap -ui -data-dir=./data -config-dir=./conf  -bind=192.168.136.160 -client=0.0.0.0 -node=consul-server01 &> ./logs/consul.log &#查看 consul 集群成员
consul members

(2)在 Consul 上注册 Services 
#在配置目录中添加文件
cd conf/
vim nodes.json{"services": [{"id": "node_exporter-node01","name": "node01","address": "192.168.136.130","port": 9100,"tags": ["nodes"],"checks": [{"http": "http://192.168.136.130:9100/metrics","interval": "5s"}]}]
}vim mysqld.json{"services": [{"id": "mysqld_exporter-node01","name": "node02","address": "192.168.136.160","port": 9104,"tags": ["mysqld"],"checks": [{"http": "http://192.168.136.160:9104/metrics","interval": "5s"}]}]
}vim nginx.json{"services": [{"id": "nginx_exporter-node01","name": "node03","address": "192.168.136.160","port": 9913,"tags": ["nginx"],"checks": [{"http": "http://192.168.136.160:9913/metrics","interval": "5s"}]}]
}


(3)修改 prometheus 配置文件 
vim /usr/local/prometheus/prometheus.yml
......- job_name: nodesconsul_sd_configs:                  #指定使用 consul 服务发现- server: 192.168.136.160:8500        #指定 consul 服务的端点列表tags:                             #指定 consul 服务发现的 services 中哪些 service 能够加入到 prometheus 监控的标签- nodesrefresh_interval: 1m
........systemctl reload prometheus
浏览器查看 Prometheus 页面的 Status -> Targets#让 consul 注销 Service
consul services deregister -id="node_exporter-node02"#重新注册
consul services register /etc/consul/nodes.json

1.3 基于 Kubernetes API 的服务发现 

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

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

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

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

#基于 Kubernetes 发现机制的部分配置参数
# 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> ]
在K8S节点上 

如果Prometheus是部署在k8s集群内部的,可以直接和apiserver通信。如果是集群外部的Prometheus可以通过以下步骤配置通过API Server实现服务发现。

RBAC授权
集群外部的Prometheus访问apiserver需要认证,还需要一定权限查询对应的资源对象。所以,这里先创建一个ServiceAccount和一个ClusterRole,并将它们绑定,之后集群外的Prometheus会以此ServiceAccount的身份访问apiserver。yaml文件内容如下:

apiVersion: v1
kind: Namespace
metadata:name: monitoring---
apiVersion: v1
kind: ServiceAccount
metadata:name: outside-prometheusnamespace: monitoring---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:name: outside-prometheus
rules:
- apiGroups:- ""resources:- nodes- services- endpoints- pods- nodes/proxyverbs:- get- list- watch
- apiGroups:- "networking.k8s.io"resources:- ingressesverbs:- get- list- watch
- apiGroups:- ""resources:- configmaps- nodes/metricsverbs:- get
- nonResourceURLs:- /metricsverbs:- get---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: outside-prometheus
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: outside-prometheus
subjects:
- kind: ServiceAccountname: outside-prometheusnamespace: monitoring

获取ServiceAccount对应Secret资源对象中保存的token,然后将token保存到Prometheus节点上的文件里。TOKEN=`kubectl get secret/$(kubectl -n monitoring get secret | awk '/outside-prometheus/{print $1}') -n monitoring -o jsonpath={.data.token} | base64 -d`

scp /etc/kubernetes/pki/ca.crt <prometheus_node>:/usr/local/prometheus/
在Prometheus 节点上 

 

echo <token-value> > /usr/local/prometheus/kubernetes-api-tokencat /usr/local/prometheus/kubernetes-api-token	#和上面获取的对比是否一致修改Prometheus配置,添加job#集群api-server自动发现job- job_name: kubenetes-apiserverkubernetes_sd_configs:- role: endpointsapi_server: https://192.168.80.10:6443	#指定API Server地址#这里的配置证书和token是连接API Server做服务发现时使用tls_config:ca_file: /usr/local/prometheus/pki/ca.crt	#指定kubernetes ca根证书,用于验证api-server证书# insecure_skip_verify: true #也可以使用此选项跳过证书验证authorization:credentials_file: /usr/local/prometheus/kubernetes-api-token	#指定访问api-server时使用的token文件scheme: https#这里的配置证书和token是连接从api-server抓取数据时使用tls_config:ca_file: /usr/local/prometheus/pki/ca.crtauthorization:credentials_file: /usr/local/prometheus/kubernetes-api-tokenrelabel_configs:- source_labels: ["__meta_kubernetes_namespace", "__meta_kubernetes_endpoints_name", "__meta_kubernetes_endpoint_port_name"]regex: default;kubernetes;httpsaction: keep#集群节点自动发现job- job_name: "kubernetes-nodes"kubernetes_sd_configs:- role: node        #指定发现类型为nodeapi_server: https://192.168.80.10:6443tls_config:ca_file: /usr/local/prometheus/pki/ca.crtauthorization:credentials_file: /usr/local/prometheus/kubernetes-api-tokenrelabel_configs:- source_labels: ["__address__"]    #重写target地址,默认端口是kubelet端口10250,修改为node-exporter端口9100regex: (.*):10250action: replacetarget_label: __address__replacement: $1:9100- action: labelmap  #保留之前存在的__meta_kubernetes_node_label开头的标签regex: __meta_kubernetes_node_label_(.+)验证
配置修改完成后,重载Prometheus,然后在界面查看target状态。其实除了需要额外配置访问 API Server的证书外,其余配置和集群内的Prometheus服务发现配置基本一致。 
另外,没有配置关于Pod的服务发现job,因为集群外的Prometheus无法访问集群内的Pod,需要添加路由规则才能实现互通。

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

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

相关文章

大模型训练准备工作

一、目录 1 大模型训练需要多少算力&#xff1f; 2. 大模型训练需要多少显存&#xff1f; 3. 大模型需要多少数据量训练&#xff1f; 4. 训练时间估计 5. epoch 选择经验 6. 浮点计算性能测试 二、实现 1 大模型训练需要多少算力&#xff1f; 训练总算力&#xff08;Flops&…

逻辑运算函数

true默认为1 false默认为0 可以用于多条件筛选 if语句 多层嵌套

【C#算法实现】可见的山峰对数量

文章目录 前言一、题目要求二、算法设计及代码实现2.1 算法思想2.2 代码实现 前言 本文是【程序员代码面试指南&#xff08;第二版&#xff09;学习笔记】C#版算法实现系列之一&#xff0c;用C#实现了《程序员代码面试指南》&#xff08;第二版&#xff09;栈和队列中的可见的…

Redisson

Redisson 1 什么是Redisson2.SpringBoot整合Redisson3.使用Redisson实现分布式锁3.1 Redisson是如何解决这两个问题的呢?3.2 Redisson是怎么保证自己加的锁, 自己释放锁? 1 什么是Redisson Redisson是一个基于Redis的java框架, 用于简化Redis的操作. 它提供了丰富的功能, 包…

Python 界面逻辑分离示例

使用PyQt5设计UI界面开发桌面应用程序的小伙伴&#xff0c;刚开始可能都会遇到这样让人不爽的事&#xff1a;用Qt Designer好不容易设计好的界面并写好逻辑代码&#xff0c;已经可以正常运行了&#xff0c;某天发现界面要做个小改动(这种事好象永远都避不了)&#xff0c;重新修…

MySQL8.0索引新特性

文章目录 1 支持降序索引2 隐藏索引 1 支持降序索引 举例&#xff1a;分别在MySQL 5.7版本和MySQL 8.0版本中创建数据表ts1&#xff0c;结果如下&#xff1a; CREATE TABLE ts1(a int,b int,index idx_a_b(a,b desc) );在MySQL 5.7版本中查看数据表ts1的结构&#xff0c;从结…

【SpringBoot】请求与响应参数 IoC与DI 总结

文章目录 ① —— 请求 ——一、简单参数 RequestParam1.1 参数与形参 命名相同1.2 参数与形参 命名不同 二、实体参数2.1 简单实体对象2.2 复杂实体对象 三、数组集合参数3.1 数组3.2 集合 RequestParam 四、日期参数 DateTimeFormat五、JSON参数 RequestBody六、路径参数 Pat…

下载chromedrive,使用自动化

1、先看一下自己浏览器的版本 2、访问 https://googlechromelabs.github.io/chrome-for-testing/

QT中dumpcpp以及dumpdoc使用

qt中调用COM的方式方法有四种&#xff0c;参考解释在 Qt 中使用 ActiveX 控件和 COM (runebook.dev) 介绍dumpcpp的使用方法Qt - dumpcpp 工具 (ActiveQt) (runebook.dev)&#xff1a; 在安装好了的qt电脑上&#xff0c;通过powershell窗口来实现&#xff0c;powershell比cmd要…

算法——贪心

「贪心的本质是选择每一阶段的局部最优&#xff0c;从而达到全局最优」 贪心无套路 1. 分发饼干 贪心策略&#xff1a; &#xff08;1&#xff09;局部最优就是大饼干喂给胃口大的&#xff0c;充分利用饼干尺寸喂饱一个&#xff0c;全局最优就是喂饱尽可能多的小孩 &#xff08…

广州大彩科技新品发布:大彩科技COF系列2.4寸串口屏发布!

一、产品介绍 此次发布的是S系列平台2.4寸COF超薄结构串口屏&#xff0c;分辨率为240*320&#xff0c;该平台采用了Cortex-M3内核的处理器&#xff0c;内置了2Mbyte PSRAM和64Mbit FLASH&#xff0c;是专为小尺寸串口屏设计的MCU&#xff0c;精简了外围电路。 该平台默认支持大…

element ui 中文离线文档(百度云盘下载)

一般内网开发上不了网&#xff0c;用离线版本比较方便&#xff0c;下载地址&#xff1a; https://download.csdn.net/download/li836779537/88355878?spm1001.2014.3001.5503 下载后里面有个 index.hrml 双击打开就可以用 效果如下&#xff1a;

2024.3.14jsp(2)

一、实验目的 掌握eclipse开发工具的使用&#xff1b;jsp标记、如指令标记&#xff0c;动作标记&#xff1b;变量和方法的声明&#xff1b;Java程序片&#xff1b; 实验&#xff1a;看电影 源代码watchMovie.jsp <% page language"java" contentType"text…

STM32/GD32——FreeRTOS任务管理与相关机制

芯片选型 Ciga Device — GD32F470系列 任务管理 任务处理API 操作 API 动态任务创建 xTaskCreate 任务删除 vTaskDelete 静态任务创建 vTaskCreateStatic 挂起任务 vTaskSuspend 恢复任务 vTaskResume 任务创建 BaseType_t xTaskCreate( TaskFunction_t pxTa…

【GPT-SOVITS-05】SOVITS 模块-残差量化解析

说明&#xff1a;该系列文章从本人知乎账号迁入&#xff0c;主要原因是知乎图片附件过于模糊。 知乎专栏地址&#xff1a; 语音生成专栏 系列文章地址&#xff1a; 【GPT-SOVITS-01】源码梳理 【GPT-SOVITS-02】GPT模块解析 【GPT-SOVITS-03】SOVITS 模块-生成模型解析 【G…

FPGA高端项目:FPGA基于GS2971+GS2972架构的SDI视频收发+HLS多路视频融合叠加,提供1套工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐本博已有的 SDI 编解码方案本方案的SDI接收发送本方案的SDI接收图像缩放应用本方案的SDI接收纯verilog图像缩放纯verilog多路视频拼接应用本方案的SDI接收HLS图像缩放HLS多路视频拼接应用本方案的SDI接收OSD多路视频融合叠加应用本方案的S…

基于Linux内核的socket编程(TCP)的C语言示例

原文地址&#xff1a;https://www.geeksforgeeks.org/socket-programming-cc/ 服务端&#xff1a; #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <unistd.h>#…

Annaconda环境下ChromeDriver配置及爬虫编写

Anaconda环境的chromedriver安装配置_anaconda 配置chromedriver-CSDN博客 Chromedriver驱动( 121.0.6167.85 ) - 知乎 下载好的驱动文件解压&#xff0c;将exe程序复制到Annaconda/Scripts目录以及Chrome/Application目录下 注意要提前pip install selenium包才能运行成功&a…

【linux深入剖析】操作系统与用户之间的接口:自定义简易shell制作全过程

&#x1f341;你好&#xff0c;我是 RO-BERRY &#x1f4d7; 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f384;感谢你的陪伴与支持 &#xff0c;故事既有了开头&#xff0c;就要画上一个完美的句号&#xff0c;让我们一起加油 目录 1.shell2.自定义shell的准…

理财第一课:炒股词典

文章目录 基础代码规则委比委差量比换手率市盈率市净率 散户亏钱的原因庄家分析炒股战法波浪理论其它 钱者&#xff0c;人生之大事&#xff0c;死生存亡之地&#xff0c;不可不察也。耕田之利&#xff0c;十倍&#xff1b;珠玉之赢&#xff0c;百倍&#xff1b;闹革命&#xff…