成都网站建设设计,微信网站案例,做影视网站需要多大硬盘,可以上传网站的免费空间Prometheus服务发现介绍
Prometheus默认是采用pull的方式拉取监控数据的#xff0c;每一个被抓取的目标都要暴露一个HTTP接口#xff0c;prometheus通过这个接口来获取相应的指标数据#xff0c;这种方式需要由prometheus-server决定采集的目标服务器有哪些#xff0c;通过…Prometheus服务发现介绍
Prometheus默认是采用pull的方式拉取监控数据的每一个被抓取的目标都要暴露一个HTTP接口prometheus通过这个接口来获取相应的指标数据这种方式需要由prometheus-server决定采集的目标服务器有哪些通过配置在scrape_configs中的各种job来实现无法动态感知新服务如果后面新增了节点或组件就需要手动修改prometheus配置然后重启服务或重新加载配置所以出现了动态服务发现。
动态服务发现能够自动发现集群中的新端点并加入到配置中通过服务发现prometheus能够自动获取需要监控的targets列表然后通过这些targets获取监控数据。
Prometheus获取数据源target的方式有多种包括静态配置和动态服务发现配置。prometheus目前支持的服务发现有很多种具体可以参考prometheus的配置文档https://prometheus.io/docs/prometheus/latest/configuration/configuration/#configuration-file
常用的主要有以下几种
kubernetes_sd_configs基于Kubernetes API实现的服务发现让prometheus动态发现kubernetes中的被监控目标static_configs静态服务发现基于prometheus配置文件指定监控目标dns_sd_configs基于DNS服务发现监控目标consul_sd_configs基于Consul服务动态发现监控目标file_sd_configs基于指定的文件发现监控目标
relabeling功能
relabeling简介
在Prometheus动态发现的targets中默认都包含一些原始的metadata标签信息例如通过Kubernetes API动态发现的目标就包含许多以__meta开头的标签如下图
标签含义
_address_以:信息显示目标targets的地址_scheme_采集的目标服务器的Scheme形式HTTP或等_metrics_path_采集的目标服务器的访问路径
其它标签的含义可以参考Prometheus的官方配置文档。
prometheus的relabeling标签重写功能它允许用户重写这些标签或根据标签做一些过滤操作。目前支持的relabel配置主要有以下4中它的应用范围和生效时间不一样
relabel_configs在对target进行数据采集之前可以使用relabel_configs添加、修改或删除一些标签也可以用来配置只采集特定目标或过滤目标针对的是target监控目标metric_relabel_configs 在对target采集数据之后数据写入TSDB之前可以使用metric_relabel_configs做重新标记和过滤针对的是metric指标alert_relabel_configs在被发送到alertmanager之前对标签进行处理针对的是alertwrite_relabel_configs写入远端存储之前进行标签处理
其中较为常用的就是relabel_configs在配置监控目标时使用。后面介绍的也是relabel_configs
relabeling规则
Relabeling规则主要由以下字段组成
字段作用source_labels源标签没有经过relabel处理之前的标签名separator分隔符一个字符串用于在连接源标签source_labels时分隔它们默认是分号;target_label通过action处理之后新的标签名字regex给定的值或正则表达式用来匹配源标签的值action对源标签执行的relabeling动作可选值和作用参考下个表格modules模数串联的源标签哈希值的模主要用于 Prometheus 水平分片replacement写在目标标签上它可以引用regex正则表达式匹配的组$1、$2…
action字段可用的值和含义如下
replace设置或替换标签值是默认的actionkeep源标签值满足regex正则条件的实例进行采集其它实例丢弃即只采集成功匹配的实例drop作用和keep相反即只采集未匹配的实例labelmap将源标签的值映射到一组新的标签中去,action为labelmap时regex匹配的是标签名而不是标签值labelkeep保留匹配的标签其它的进行删除labeldrop删除匹配的标签保留不匹配的标签hashmod使用hashmod计算源标签的hash值并进行对比基于自定义的魔术取模以实现对目标进行分类、重新赋值等
基于Kubernetes API的Prometheus服务发现
可以在prometheus配置文件的job中使用kubenetes_sd_configs字段来配置基于Kubernetes API的服务发现具体配置方式可以参考官网https://prometheus.io/docs/prometheus/latest/configuration/configuration/#kubernetes_sd_config
目前支持的发现目标类型有以下几种
node发现node节点service发现servicepod发现Podenpoints通过endpoints获取监控目标endpointslice通过endpointslice获取监控目标ingress发现ingress
下面分别是一些对应的的示例
apiserver服务发现及监控
apiserver作为集群如入口所有请求都是通过apiserver进来的所以对apiserver指标做监控可以用来判断集群健康状态。我们可以通过目标类型为endpoints的kubenetes_sd_configs配置来自动发现apiserver并监控。
这里因为prometheus-server是部署在k8s集群上的配置保存在configmap中所以修改对应的configmap内容如下
kind: ConfigMap
apiVersion: v1
metadata:labels:app: prometheusname: prometheus-confignamespace: monitoring
data:prometheus.yml: |global:scrape_interval: 15sscrape_timeout: 10sevaluation_interval: 1mscrape_configs:- job_name: kubernetes_apiserver #添加此jobkubernetes_sd_configs:- role: endpoints #指定kubernetes_sd_configs发现角色为endpointscheme: https #指定访问apiserver协议tls_config: #apiserver证书。证书和token都是通过ServiceAccount注入到Prometheus-server Pod中的ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crtauthorization: #访问apiserver的tokencredentials_file: /var/run/secrets/kubernetes.io/serviceaccount/tokenrelabel_configs: #标签重写规则配置- source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_endpoints_name, __meta_kubernetes_endpoint_port_name] #指定要匹配的源标签regex: default;kubernetes;https #匹配规则这里表示只匹配名称空间为defaultendpoints名称为kubernetes且端口名称为https的实例action: keep #action为keep表示匹配的实例保留然后进行监控修改完成后将configmap重新应用的集群中然后重新加载prometheus配置。
kubectl apply -f prometheus-config.yaml
#重新创建prometheus Pod
kubectl delete pods/prometheus-aswcgth之后就可以在prometheus界面上看到已经自动发现了3个apiserver状态都为UP
在Grafana导入模板来查看apiserver监控数据 模板ID 12006
#查询API Server最近10分钟不同方法的请求数量总计
sum(rate(apiserver_request_total[10m])) by (resource,subresource,verb)coredns服务发现及监控
修改保存prometheus配置的configmap添加一个job内容如下 - job_name: kubernetes-service-endpointskubernetes_sd_configs:- role: endpointsrelabel_configs: #标签重写规则#如果endpoints对应的service资源上存在注解prometheus.io/scrapetrue时目标实例才会被发现为target- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape] #regex: trueaction: keep#通过service资源的注解prometheus.io/scheme获得抓取目标实例的数据时使用的协议http或https并赋值给新标签__scheme__- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scheme]regex: (https?)action: replacetarget_label: __scheme__#通过service资源的注解prometheus.io/path获取目标实例提供监控数据的url路径并赋值给新标签__metrics_path__- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_path]regex: (.)action: replacetarget_label: __metrics_path__#修改__address__标签的值即目标实例的地址和端口- source_labels: [__address__, __meta_kubernetes_service_annotation_prometheus_io_port]regex: ([^:])(?::\d)?;(\d)action: replacetarget_label: __address__replacement: $1:$2#保留原来存在的以__meta_kubernetes_service_label_开头的标签- regex: __meta_kubernetes_service_label_(.)action: labelmap#将标签__meta_kubernetes_service_name修改为 kubernetes_service_name- source_labels: [__meta_kubernetes_service_name]action: replacetarget_label: kubernetes_service_name#将标签__meta_kubernetes_namespace修改为 kubernetes_namespace- source_labels: [__meta_kubernetes_namespace]action: replacetarget_label: kubernetes_namespace关于资源注解prometheus.io/scrape: true需要在被发现的目的target定义此注解且必须匹配成功该注解才会保留监控target然后再进行数据抓取并进行标签替换如annotation_prometheus_io_scheme标签为http或https。
修改完成后将configmap重新应用的集群中然后重新加载prometheus配置。步骤同上。
然后在prometheus界面查看就可以看到已经发现了coredns对应的的Pod为target状态为UP。如下图
在Grafana导入coredns模板查看监控数据模板ID 14981