当前位置: 首页 > news >正文

03_Pushgateway使用Prometheus的服务发现机制

03_Pushgateway使用&Prometheus的服务发现机制

1.Pushgateway使用

1.1pushgateway组件介绍

pushgateway是prometheus监控系统中的一个重要组件,他采用被动push的方式获取数据,由应用主动将数据推送到pushgateway,然后prometheus再从pushgateway中抓取数据。Pushgateway可以单独运行在任何的节点上,并不是一定要在监控的客户端上。

在这里插入图片描述

使用Pushgateway的场景

  • Prometheus和target由于网络原因不能互传,导致Prometheus无法拉取各个target数据,因此要pushgateway做中转代理
  • 某些作业生命周期较短,没有足够的时间等待Prometheus抓取数据,可以先把数据推送到Pushgateway暂存中。。

使用Pushgateway的缺点

  • 将多个节点数据汇总到pushgateway,如果pushgateway挂了,将多个节点受到影响。
  • pushgateway也会成为单点的故障和潜在瓶颈
  • 手动清理pushgateway下的老旧数据

1.2pushgateway的安装配置

  • 安装对应的pushgateway的源码包

在这里插入图片描述

  • 安装配置和启动的service脚本如下
[root@prometheus-333 ~]# tar -xf pushgateway-1.11.1.linux-amd64.tar.gz -C /usr/local/
[root@prometheus-333 pushgateway-1.11.1.linux-amd64]# ll
total 20912
-rw-r--r--. 1 1001 1002    11357 Apr  9  2025 LICENSE
-rw-r--r--. 1 1001 1002      487 Apr  9  2025 NOTICE
-rwxr-xr-x. 1 1001 1002 21394840 Apr  9  2025 pushgateway[root@prometheus-333 local]# vim /usr/lib/systemd/system/pushgateway.service 
[Unit]
Description=prometheus pushgateway
After=network.target
[Service]
Type=simple
User=root
Group=root
ExecStart=/usr/local/pushgateway/pushgateway --web.listen-address=:9091
ExecStop=/usr/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target[root@prometheus-333 local]# systemctl daemon-reload 
[root@prometheus-333 local]# systemctl start pushgateway
# 检查看看——————暴露9091端口
tcp   LISTEN 0      2048               *:9091            *:*    users:(("pushgateway",pid=2061,fd=3)) 
  • 配置Prometheus.yaml文件
  - job_name: "prometheus gateway"static_configs:- targets: ["172.16.213.26:9091"]

1.3pushgateway使用

  1. 推送数据格式

要推送数据到pushgateway中可以直接使用提供的API接口来进行添加

http://<ip>:9091/metrics/job/<job-name>/<label-name>/<label-value>
  • job-name是必需填的,job是标签的值,后面可以跟任意数量的标签对应的值
  • 推送部分数据如下
## TYPE metric_name type
metric_name{lable_name="label_value",...} value

要删除group定义为{job=“some_job”}下some_instance实例的所有数据:

curl -X DELETE http://172.16.213.26:9091/metrics/job/some_job/instance/some_instance

删除group下的所有数据:

curl -X DELETE http://172.16.213.26:9091/metrics/job/some_job

删除所有group下的所有metrics(启动pushgateway时需加上命令⾏参数 --web.enable-admin

api )

2.Prometheus的服务发现机制

Prometheus是基于pull模式监控数据,首先要能够发现需要监控的目标对象,就会有两种方法,1.静态手工配置,2.动态服务发现配置

  • 对于小型环境来说,通过static_configs静态指定各Target便能解决问题
  • 对于动态性较强得云环境来说,就要用到动态服务发现机制
  • 为了适应静态和动态发现机制,Prometheus引⼊⼀个中间的代理⼈(服务注册中⼼),这个代理⼈掌=握着当前所有监控⽬标的访问信息,Prometheus只需要向这个代理⼈询问有哪些监控⽬标即可, 这种模式被称为服务发现(service discovery)。

prometheus⽀持多种服务发现,⽬前已⽀持多达⼆⼗多种服务发现协议,常⻅的有:

kubernetes_sd_configs: kubernetes服务发现,让prometheus动态发现kubernetes中被监控

的⽬标。

static_configs: 静态服务发现,基于prometheus配置⽂件指定监控⽬标

dns_sd_configs: DNS服务发现监控⽬标

consul_sd_configs: Consul服务发现,基于consul服务动态发现监控⽬标

file_sd_configs: 基于指定的⽂件事先服务发现,prometheus定时读取⽂件如果发⽣变化则加载

2.1静态配置的局限性

静态服务发现机制,配置简单,但是监控目标是写在配置文件中,如要新增,修改。。。都需要每一次的修改配置文件,然后通过Prometheus重新加载,这样太麻烦了。于是出现了动态服务发现。

  • 静态服务适合于小型环境

2.2文件动态发现服务

通过定义一组资源配置文件,yaml文件只需要存储target信息,这种方式可以被prometheus实时的动态获取到,不需要重新启动prometheus服务

  • 修改prometheus.yml配置文件
  - job_name: 'node_service_discovery'file_sd_configs:- files:- targets/*.jsonrefresh_interval: 60s- files:- targets/*.yamlrefresh_interval: 60s
  • 定义一个服务发现targets/node.yaml文件
- targets:- "10.0.0.88:9100"labels:app: node-exporterjob: nodes
  • 重新启动prometheus

在这里插入图片描述

  • 这里就发现了服务,就不需要每一次都去修改prometheus.yml文件

  • 但是还是要写文件,有没有不需要的。有的有的老弟包有的这就是接下来讲的consul服务发现机制

2.4基于consul的服务发现

consul是基于Go开发的工具,提供了注册,发现服务…多数中心和分布式一致性保证功能一致。之前通过prometheus监控服务发现支持了Consul

  • 安装consul

可以使用2进制安装和docker安装。consul官网(https://www.consul.io/downloads)这里我们用docker方式安装

docker run -d -p 8500:8500 --restart=always -v /data/consul/data:/consul/data --name=consul hashicorp/consul:1.21 agent -server -bootstrap -ui -node=dc1 -client='0.0.0.0'

参数含义

  • agent:表示启动Agent进程

  • server:表示启动Consul Server模式

  • client:表示启动Consol Client模式

  • bootstrap:表示这个节点是Server-leader

  • 每个数据中⼼只能运⾏⼀台服务器。技术⻆度上

    讲 Leader 是通过 Raft 算法选举的,但是集群第⼀次启动时需要⼀个引导 Leader,在引导群集后,建议不要使⽤此标志。

  • ui: 表⽰启动 Web UI 管理器,默认开放端⼝ 8500,所以上⾯使⽤ Docker 命令把 8500 端⼝对外开放。

  • node: 节点的名称,集群中必须是唯⼀的,默认是该节点的主机名。

  • client: consul服务侦听地址,这个地址提供HTTP、DNS、RPC等服务,默认是127.0.0.1所以不对外提供服务,如果你要对外提供服务改成0.0.0.0

在这里插入图片描述

  • Consul服务注册提供了两种注册⽅法:⼀种是定义配置⽂件服务注册⽅法,即在配置⽂件中定义服务来进⾏注册;⼀种是HTTP API服务注册⽅法,即在启动服务后,⾃⾝通过调⽤API进⾏⾃我注册。这⾥介绍第⼆种,consul主要是添加和删除命令,都是使⽤接⼝调⽤。先创建test.json⽂件,内容如下:
{
"id": "node-exporter",
"name": "node-exporter-172.16.213.28",
"address": "10.0.0.88",
"port": 9100,
"tags": ["test"],
"checks": [{
"http": "http://10.0.0.88:9100/metrics",
"interval": "5s"
}]
} 
  • 执行如下命令
curl --request PUT --data @test.json http://10.0.0.88:8500/v1/agent/service/register
  • 配置prometheus实现自动发现

现在 Consul 服务已经启动完毕,并成功注册了⼀个服务,接下来,我们需要配置 Prometheus 来使⽤Consul ⾃动服务发现,⽬的就是能够将上边添加的服务⾃动发现到 Prometheus 的 Targets 中,增加prometheus.yml 配置如下:

  - job_name: 'consul-prometheus'consul_sd_configs:- server: '10.0.0.88:8500'services: []
  • 基于DNS服务发现

⾸先,需要部署好⼀个DNS服务,并且配置好A记录与SRV记录,接着,将prometheus-server所在主机的dns设置为刚刚部署好的dns,dns配置好解析记录如下:

> server 172.16.213.40
Default server: 172.16.213.40
Address: 172.16.213.40#53
> set type=srv
> _prometheus._tcp.iivey.com
Server: 172.16.213.40
Address: 172.16.213.40#53
_prometheus._tcp.iivey.com service = 10 10 9100 node1.iivey.com.
_prometheus._tcp.iivey.com service = 10 10 9100 master.iivey.com.

修改prometheus.yaml

[root@localhost ~]# vi /usr/local/prometheus/prometheus.yml
......
- job_name: "dns-server-monitor"
dns_sd_configs:
- names: ['_prometheus._tcp.iivey.com']
curl -X POST http://172.16.213.35:9090/-/reload
http://www.dtcms.com/a/528386.html

相关文章:

  • Speckit和Claude 的初体验
  • 当夸克遇上大模型:中国 AI 产品的“第二阶段”来临了
  • AI大模型弹性伸缩实战:自动扩缩容+模型轻量化+Serverless三大技术方案详解
  • 网站怎么做的qq邮件订阅页面设计存在的问题
  • CMP(类ClouderaCDP7.3(404次编译) )完全支持华为鲲鹏Aarch64(ARM),粉丝数超过200就开源下载
  • HeidiSQL的下载安装和使用
  • 线性代数直觉(五):行列式——让空间坍缩
  • word文档模板通过poi-tl导出问题注意点
  • Java在大数据分布式存储中的创新实践
  • ThinkPHP5 RCE+Linux find提权渗透实战:原理+复现(CVE-2018-20062)
  • 昆明网站排名优化电商网站的功能
  • 代码随想录Day59|dijkstra(堆优化版)精讲、Bellman_ford 算法精讲
  • 四川住建厅官方网站的网址教务管理系统学生登录入口
  • [MySQL]数据类型
  • 3w字一文讲透Java IO
  • 多模态学习大纲笔记(未完成)
  • 组织学习障碍:自我证明的陷阱
  • 【数据结构】顺序表的实现
  • 可以做兼职的网站质量好网站建设多少钱
  • 无声的战争:自动驾驶系统中的资源抢占、调度与生存法则
  • 30-机器学习与大模型开发数学教程-3-4 矩阵的逆与伪逆
  • 【大语言模型 104】LLM推理服务架构:从单机到分布式的演进之路
  • Rust所有权机制解析:内存安全的基石与实战指南
  • 个人做商业网站需要什么如何判断网站数据库类型
  • Spring容器进化论:从BeanFactory到ApplicationContext
  • 20.7 零样本多模态实战:CLIP模型如何让ChatPPT图像识别吞吐量飙升406%
  • 可以做平面设计兼职的网站佛山市网站建设分站哪家好
  • win11系统下配置c++机器学习库mlpack
  • [人工智能-大模型-72]:模型层技术 - 模型训练六大步:①数据预处理 - 基本功能与对应的基本组成函数
  • java基础-13 : 双列集合(Map)