Prometheus-部署service discovery服务发现


一、相关概念

Prometheus指标抓取的生命周期

发现->配置-> relabel ->指标数据抓取-> metrics relabel

  1. 发现:prometheus启动,启动后发现 被监控端
  2. 配置:定义怎么采集,怎么监控(周期),监控哪些节点
  3. relabel:例如:expoters采集数据后,需要“转换”为pro可以兼容识别的格式,例如以下node_cpu_guest_seconds_total{cpu=“0”,mode=“nice”} 0
    这种转换,就是一种聚合数据
  4. 指标数据抓取:pro pull数据
  5. metrics relabel:
    1)筛选
    2)正则提取(选择性)
    3)自定义标签
    4)重组标签

Prometheus的服务发现

①基于文件的服务发现;
②基于DNS的服务发现;
③基于API的服务发现:Kubernetes、Consul、Azure、重新标记
target重新打标
metric重新打标
④基于K8S的服务发现

Prometheus 服务发现机制

  1. Prometheus Server的数据抓取工作于Pull模型,因而,它必需要事先知道各Target
    的位置,然后才能从相应的Exporter或Instrumentation中抓取数据

  2. 对于小型的系统环境来说,通过static_configs指定各Target便能解决问题,这也是
    最简单的配置方法;每个Targets用一个网络端点(ip:port)进行标识;

  3. 对于中大型的系统环境或具有较强动态性的云计算环境来说,静态配置显然难以适用;
    因此,Prometheus为此专门设计了一组服务发现机制,以便于能够基于服务注册中心(服务总线)自动发现、检测、分类可被监控的各Target,以及更新发生了变动的Target指标抓取的生命周期

  4. 在每个scrape_interval期间,Prometheus都会检查执行的作业(Job);这些作业首先会根据
    Job上指定的发现配置生成target列表,此即服务发现过程;服务发现会返回一个Target列表,其中包含一组称为元数据的标签,这些标签都以" meta_"为前缀;

  5. 服务发现还会根据目标配置来设置其它标签,这些标签带有"“前缀和后缀,b包括"scheme”
    、" address"和" metrics path_",分别保存有target支持使用协议(http或https,默认为
    http) 、 target的地址及指标的URI路径(默认为/metrics) ;

  6. 若URI路径中存在任何参数,则它们的前缀会设置为" param"这些目标列表和标签会返回给
    Prometheus,其中的一些标签也可以配置中被覆盖;

  7. 配置标签会在抓取的生命周期中被重复利用以生成其他标签,例如,指标上的instance标
    签的默认值就来自于address标签的值;

  8. 对于发现的各目标,Prometheus提供了可以重新标记(relabel)目标的机会,它定义在
    job配置段的relabel_config配置中,常用于实现如下功能
    1)将来自服务发现的元数据标签中的信息附加到指标的标签上
    2)过滤目标
    3)之后便是数据抓取,以及指标返回的过程,抓取而来的指标在保存之前,还允许用户对
    指标重新打标过滤的方式
    4)它定义在job配置段的metric_relabel_configs配置中,常用于实现如下功能
    ①删除不必要的指标
    ②从指标中删除敏感或者不需要的标签
    ③添加、编辑或者修改指标的标签值或标签格式

二、静态配置发现

修改prometheus服务器上的配置为文件,指定targets的端口上面配置过

- job_name: 'nodes'
  static_config:
  - targets:
    - 192.168.32.20:9100
    - 192.168.32.30:9100
    - 192.168.32.40:9100

在这里插入图片描述

三、动态发现

1.基于文件服务发现

192.168.32.10
基于文件的服务发现仅仅略优于静态配置的服务发现方式,它不依赖于任何平台或第三方服务,因而也是最为简单和通用的实现方式。
prometheus server定期从文件中加载target信息(pro-server pull指标发现机制-job_name 获取我要pull的对象target)文件可以只用json和yaml格式,它含有定义的target列表,以及可选的标签信息;以下第一配置,能够将prometheus默认的静态配置转换为基于文件的服务发现时所需的配置;(rometheus会周期性的读取、重载此文件中的配置,从而达到动态发现、更新的操作)

编写Prometheus.yml文件

cd /usr/local/prometheus-2.37.1.linux-amd64/
#切换到prometheus的工作目录
mkdir file_sd && cd files_sd
mkdir targets
将Prometheus.yml文件拖进去

------只列出与静态Prometheus.yml文件区别的地方-------
 - job_name: 'prometheus'

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    file_sd_configs:
    - files:
      - targets/prometheus_*.yaml
      refresh_interval: 2m

  # All nodes
  - job_name: 'nodes'
    file_sd_configs:
    - files:
      - targets/nodes_*.yaml
      refresh_interval: 2m

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
指定配置文件启动
cd /usr/local/prometheus-2.37.1.linux-amd64
./prometheus --config.file=./file_sd/prometheus.yml
在这里插入图片描述
注意在node节点开启服务
cd node_exporter-1.1.2.linux-amd64/
./node_exporter
在这里插入图片描述
注意:先关闭服务,再更改配置文件
killall prometheus
netstat -nautp | grep prometheus

文件发现的作用

如果增加node或者prometheus服务端节点只需更改nodes_centos.yaml prometheus_server.yaml两个文件添加地址就行,不需要停止服务

基于DNS自动发现

基于DNS的服务发现针对一组DNS域名进行定期查询,以发现待监控的目标查询时使用的DNS服务器由/etc/resolv.conf文件指定;
该发现机制依赖于A、AAAA和SRv资源记录,且仅支持该类方法,
尚不支持RFC6763中的高级DNS发现方式
PS:

  • SRV: SRV记录的作用是指明某域名下提供的服务。实例:
    _http._tcp.example.com.SRV 10 5 80. www.example.comSRV后面项目的含义:
    10 -优先级,类似MX记录
    5 -权重
    80-端口
    www.example.com -实际提供服务的主机名。同时SRV可以指定在端口上对应哪个service
  • hprometheus 基于Dws的服务中的SRV记录,让prometheus发现指定target上对应的端口对应的是exporter或instrumentation

基于consul发现

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

原理:通过定义json文件将可以进行数据采集的服务注册到consul中,用于自动发现同时使用prometheus做为client端获取consul上注册的服务,从而进行获取数据

2)安装consul_1.9.0版本
unzip consul_1.9.0_linux_amd64.zip -d /usr/local/bin
在这里插入图片描述
3)启动开发者模式
consul开发者模式,可以快速开启单节点的consul服务,具有完整功能,方便开发测试

mkdir -pv /consul/data/
mkdir /etc/consul && cd /etc/consul
consul agent -dev -ui -data-dir=/consul/data/ \
-config-dir=/etc/consul/ -client=0.0.0.0

在这里插入图片描述
agent -dev:运行开发模式
agent -server:运行server模式
-ui:ui界面
-data-dir:数据位置
/etc/consul:可以以文件形式定义各个services的配置,也可以基于api接口直接配置
-client:监听地址
在这里插入图片描述

4)编辑/etc/consul目录下的prometheus-servers.json配置文件

vim /etc/consul/prometheus-servers.json
{
  "services": [
    {
      "id": "prometheus-server-node01",
      "name": "prom-server-node01",
      "address": "192.168.32.10",
      "port": 9090,
      "tags": ["prometheus"],
      "checks": [{
        "http": "http://192.168.32.10:9090/metrics",
        "interval": "5s"
      }]
    }
  ]
}

在这里插入图片描述
#重载配置文件
consul reload
或使用consul service register /etc/consul/prometheus-servic.json
在这里插入图片描述

cd /usr/local/prometheus-2.37.1.linux-amd64/
./prometheus
#记得先关prometheus监控,再启动
在这里插入图片描述
##浏览器访问 192.168.32.10:8500

在这里插入图片描述
5)创建consul自动发现的prometheus.yml文件
cd /usr/local/prometheus-2.37.1.linux-amd64/
mkdir consul_sd && cd consul_sd
vim prometheus.yml
-------只列出job部分----------

  - job_name: 'prometheus'

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    consul_sd_configs:
    - server: "192.168.32.10:8500"
      tags:
      - "prometheus"
      refresh_interval: 2m

  # All nodes
  - job_name: 'nodes'
    consul_sd_configs:
    - server: "192.168.32.10:8500"
      tags:
      - "nodes"
      refresh_interval: 2m

在这里插入图片描述
#指点配置文件启动
cd /usr/local/prometheus-2.37.1.linux-amd64/
killall prometheus
./prometheus --config.file=./consul_sd/prometheus.yml
在这里插入图片描述
#开启consul服务
consul agent -dev -ui -data-dir=/consul/data/
-config-dir=/etc/consul/ -client=0.0.0.0
在这里插入图片描述

6)注册其他node节点
1.在192.168.32.10 /etc/consul/目录下编辑nodes.json文件

vim nodes.json 

{
  "services": [
    {
      "id": "node_exporter-node01",
      "name": "node01",
      "address": "192.168.32.20",
      "port": 9100,
      "tags": ["nodes"],
      "checks": [{
        "http": "http://192.168.32.20:9100/metrics",
        "interval": "5s"
      }]
    },
    {
      "id": "node_exporter-node02",
      "name": "node02",
      "address": "192.168.32.30",
      "port": 9100,
      "tags": ["nodes"],
      "checks": [{
        "http": "http://192.168.32.30:9100/metrics",
        "interval": "5s"
      }]
    }
  ]
}

在这里插入图片描述

重载配置文件
consul reload
在这里插入图片描述
2.启动node节点
如果node节点没有上线重启以下node节点服务./node_exporter
浏览器访问192.168.32.10:9090 / 192.168.32.10:8500
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/l17605229954/article/details/127530912