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/*.json
        refresh_interval: 60s
      - files:
        - targets/*.yaml
        refresh_interval: 60s
  • 定义一个服务发现targets/node.yaml文件

    • targets:
      • "10.0.0.88:9100"
        labels:
        app: node-exporter
        job: 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
相关推荐
喜欢你,还有大家5 小时前
Prometheus监控部署——pushgateway&&自动推送
运维·prometheus
小小的木头人1 天前
基于Docker 搭建 Prometheus & Grafana 环境
运维·docker·容器·grafana·prometheus
奈斯ing1 天前
【prometheus+Grafana篇】避坑指南:实践中常见问题与解决方案总结整理(持续更新...)
运维·grafana·prometheus·1024程序员节
风清再凯1 天前
02_prometheus监控&Grafana展示
prometheus·1024程序员节
抹香鲸之海2 天前
Prometheus+Grafana实现Springboot服务监控
spring boot·grafana·prometheus
荣光波比2 天前
Prometheus(二)—— 在K8s集群中部署Prometheus+Grafana+AlertManager实现全方位监控
kubernetes·grafana·prometheus
啊啊啊啊8434 天前
Prometheus监控系统
prometheus
野奔在山外的猫4 天前
【文档】配置 prometheus-webhook-dingtalk + alertmanager 细节
prometheus·webhook·dingtalk
笨手笨脚の7 天前
微服务核心
微服务·架构·服务发现·康威法则