发现->配置-> relabel ->指标数据抓取-> metrics relabel
①基于文件的服务发现;
②基于DNS的服务发现;
③基于API的服务发现:Kubernetes、Consul、Azure、重新标记
target重新打标
metric重新打标
④基于K8S的服务发现
Prometheus Server的数据抓取工作于Pull模型,因而,它必需要事先知道各Target
的位置,然后才能从相应的Exporter或Instrumentation中抓取数据
对于小型的系统环境来说,通过static_configs指定各Target便能解决问题,这也是
最简单的配置方法;每个Targets用一个网络端点(ip:port)进行标识;
对于中大型的系统环境或具有较强动态性的云计算环境来说,静态配置显然难以适用;
因此,Prometheus为此专门设计了一组服务发现机制,以便于能够基于服务注册中心(服务总线)自动发现、检测、分类可被监控的各Target,以及更新发生了变动的Target指标抓取的生命周期
在每个scrape_interval期间,Prometheus都会检查执行的作业(Job);这些作业首先会根据
Job上指定的发现配置生成target列表,此即服务发现过程;服务发现会返回一个Target列表,其中包含一组称为元数据的标签,这些标签都以" meta_"为前缀;
服务发现还会根据目标配置来设置其它标签,这些标签带有"“前缀和后缀,b包括"scheme”
、" address"和" metrics path_",分别保存有target支持使用协议(http或https,默认为
http) 、 target的地址及指标的URI路径(默认为/metrics) ;
若URI路径中存在任何参数,则它们的前缀会设置为" param"这些目标列表和标签会返回给
Prometheus,其中的一些标签也可以配置中被覆盖;
配置标签会在抓取的生命周期中被重复利用以生成其他标签,例如,指标上的instance标
签的默认值就来自于address标签的值;
对于发现的各目标,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
192.168.32.10
基于文件的服务发现仅仅略优于静态配置的服务发现方式,它不依赖于任何平台或第三方服务,因而也是最为简单和通用的实现方式。
prometheus server定期从文件中加载target信息(pro-server pull指标发现机制-job_name 获取我要pull的对象target)文件可以只用json和yaml格式,它含有定义的target列表,以及可选的标签信息;以下第一配置,能够将prometheus默认的静态配置转换为基于文件的服务发现时所需的配置;(rometheus会周期性的读取、重载此文件中的配置,从而达到动态发现、更新的操作)
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服务器由/etc/resolv.conf文件指定;
该发现机制依赖于A、AAAA和SRv资源记录,且仅支持该类方法,
尚不支持RFC6763中的高级DNS发现方式
PS:
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