Prometheus服务发现机制
Prometheus与服务发现
云原生、容器场景下按需的资源使用方式对于监控系统而言就意味着没有了一个固定的监控目标,所有的监控对象(基础设施、应用、服务)都在动态的变化,这对基于Push
模式传统监控软件带来挑战。
对于Prometheus
这一类基于Pull
模式的监控系统,显然也无法继续使用的static_configs
的方式静态的定义监控目标。而对于Prometheus
而言其解决方案就是引入一个中间的代理人(服务注册中心),这个代理人掌握着当前所有监控目标的访问信息,Prometheus
只需要向这个代理人询问有哪些监控目标控即可, 这种模式被称为服务发现。
通过服务发现的方式,管理员可以在不重启Prometheus
服务的情况下动态的发现需要监控的Target
实例信息。
Prometheus服务发现机制
Prometheus
数据源的配置主要分为静态配置和动态发现,常用的为以下几类:
static_configs
: #静态服务发现file_sd_configs
: #文件服务发现dns_sd_configs
: #DNS 服务发现kubernetes_sd_configs
: #Kubernetes 服务发现consul_sd_configs
: #Consul 服务发现(推荐使用)
static_configs: 静态服务发现
prometheus.yaml
配置文件:
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'grafana'
static_configs:
- targets:
- 'grafana-service.ns-monitor:3000'
- job_name: 'kubernetes-apiservers'
file_sd_configs: 文件服务发现
基于文件的服务发现方式不需要依赖其他平台与第三方服务,用户只需要将新的target
信息以yaml
或json
文件格式添加到target
文件中,Prometheus会定期从指定文件中读取target
信息并更新。
target文件:
vim targets.json
[
{
"targets": ["192.168.20.136:9100"],
"labels": {
"instance": "nodeone",
"job": "expor_test1"
}
},
{
"targets": ["192.168.20.137:9100"],
"labels": {
"instance": "nodetwo",
"job": "expor_test2"
}
}
]
prometheus.yaml
配置文件:
scrape_configs:
- job_name: 'file_sd' #此处定义自动发现的采集任务
file_sd_configs:
- files:
- targets.json #采集文件名
查看web界面targets
出现targets.json
所定义的2个job
dns_sd_configs: DNS服务发现
忽略
kubernetes_sd_configs: Kubernetes服务发现
Kubernetes服务发现配置
对于Kubernetes
而言,Promethues
通过与Kubernetes API
交互,然后轮询资源端点。目前主要支持5种服务发现模式,分别是:
Node
Service
Pod
Endpoints
Ingress
对应配置文件中的role: node
/ role: service
动态获取所有节点node
的信息,可以添加如下配置:
role: node
- job_name: 'kubernetes-service-endpoints'
kubernetes_sd_configs:
- role: node
relabel_configs:
- action: labelmap
regex: __meta_kubernetes_node_label_(.+)
- target_label: __address__
replacement: kubernetes.default.svc:443
- source_labels: [__meta_kubernetes_node_name]
regex: (.+)
target_label: __metrics_path__
replacement: /api/v1/nodes/${1}/proxy/metrics
role: endpoints
- job_name: 'kubernetes-service-endpoints'
kubernetes_sd_configs:
- role: endpoints
relabel_configs:
- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape]
action: keep
regex: true
- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scheme]
action: replace
target_label: __scheme__
regex: (https?)
- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_path]
action: replace
target_label: __metrics_path__
regex: (.+)
- source_labels: [__address__, __meta_kubernetes_service_annotation_prometheus_io_port]
action: replace
target_label: __address__
regex: ([^:]+)(?::\d+)?;(\d+)
replacement: $1:$2
- action: labelmap
regex: __meta_kubernetes_service_label_(.+)
- source_labels: [__meta_kubernetes_namespace]
action: replace
target_label: kubernetes_namespace
- source_labels: [__meta_kubernetes_service_name]
action: replace
target_label: kubernetes_name
对应的service
、pod
也是同样的方式
需要注意的是,为了能够让Prometheus
能够访问收到Kubernetes API
,我们要对Prometheus
进行访问授权,即serviceaccount
。否则就算配置了,也没有权限获取。
Prometheus 的relabel_configs配置详解
(1)source_labels
:源标签,没有经过relabel
处理之前的标签名字
(2)target_label
:通过action
处理之后的新的标签名字
(3)regex
:正则表达式,匹配源标签
(4)replacement
:replacement
指定替换后的标签(target_label
)对应的数值
(5)action
:action
定义了relabel
的动作,action
支持多种,如下:
replace
: 替换标签值,根据regex
正则匹配到源标签的值,并把匹配的值写入到目的标签中keep
: 满足regex
正则条件的实例进行采集,把source_labels
中没有匹配到regex
正则内容的Target
实例丢掉drop
:满足regex
正则条件的实例不采集,把source_labels
中匹配到regex
正则内容的Target
实例丢掉labeldrop
:对抓取到的符合过滤规则的target
标签进行删除labelkeep
:对抓取到的符合过滤规则的target
标签进行保留labelmap
: 会根据regex
的定义去匹配Target
实例所有标签的名称,并且以匹配到的内容为新的标签名称,其值作为新标签的值hashmod
: 设置target_label
为modulus
连接的哈希值source_labels
consul_sd_configs: Consul服务发现
Consul
是基于 GO 语言开发的开源工具,主要面向分布式,服务化的系统提供服务注册、服务发现和配置管理的功能。
Consul
提供服务注册/发现、健康检查、Key/Value存储、多数据中心和分布式一致性保证等功能。
之前我们通过Prometheus
实现监控,当新增一个Target
时,需要变更服务器上的配置文件,即使使用file_sd_configs
配置,也需要登录服务器修改对应Json
文件,会非常麻烦。
prometheus.yml
配置:
- job_name: 'consul-prometheus'
consul_sd_configs:
- server: '192.168.12.16:8500'
services: []
说明一下:这里需要使用consul_sd_configs
来配置使用Consul
服务发现类型,server
为Consul
的服务地址。配置完毕后,重启Prometheus
服务
版权声明:
作者:Joe.Ye
链接:https://www.appblog.cn/index.php/2023/03/25/prometheus-service-discovery-mechanism/
来源:APP全栈技术分享
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论