prometheus是什么
- 简单的说就是后台服务监控组件
- 被监控服务暴露自己与前台或者其他服务的交互数据,prometheus采集这些具体数据,通过目前现有的聚合方式或者说监控指标所需要基础数据源通过图表的方式,展示出服务的当前状态以及之前某一段时间内的状态。
- 它并不能保证采集回来的数据100%正确、采集的数据量是被监控服务的100%。
组件
- Prometheus Server:用于收集指标和存储时间序列数据,并且提供查询接口。
- client Liberary:客户端库(例如java、GO、Python),为需要监控的服务产生相应的/metrics(监控指标)并暴露给 prometheus server。目前很多软件可以支持原生的prometheus,提供监控指标,对于操作系统已经不提供/metrics,可以直接使用exporter,或者自己开发exporter来提供/metrics服务。
- push gateway:主要用于临时性的jobs。由于这种jobs存在时间较短,可能在prometheus来pull的时候,这个服务就不存在或者不起作用了。对此jjob定时将指标push到 push gateway上,之后到了 prometheus设定的是时间从 gateway上面拉取。
- exporters 用来暴露服务的metrics,针对不同的服务或者应用,prometheus提供了特定的exporter.
数据采集流程
- relabel (targets 标签修改/过滤)
- relabel 是prometheus提供的一个正对target的功能,reabel发生在prometheus server采集数据之前,可以对target的标签进行修改或者使用标签进行target的筛选。:注意:
- prometheus 在relabel步骤默认会为target新增一个名为instance的标签,并设置成 "address"标签的值;
- 在relabel结束以后,以"_" 开头的标签不会被存储到磁盘;
- meta label会一直保留在内存中,直到target被移除
在prometheus的targets页面,可以看到target在relabel之前的标签,如下图所示,在relabel之前,target的标签有"address",“metrics_path”,“schema”,“job”。经过 relabel 之后我们最终看到的 targets 的标签为:instance、job。
- relabel 配置
基本配置项:
- source_labels:[,…] #需要进行relabel操作的meta labels
- target_label: #relabel 操作的目标标签,当使用 action 为 “replace” 时会把替换的结果写入 target_label
- regex: #正则表达式,用于在 source_labels 的标签值中提取匹配的内容。默认为"(.*)"
- modulus: #用于获取源标签值的哈希的模数
- replacement: #regex 可能匹配到多个内容,replacement 指定要使用哪一个匹配内容进行替换,默认为 “$1”,表示使用第一个匹配的内容
- action: <relabel_action> #定义对 source_labels 进行何种操作,默认为 “replace”
示例:
假如我们希望给 targets 添加一个 “host” 标签,内容取 “address” 的 host 部分,可以添加如下 relabel 配置:
scrape_configs:
- job_name: prometheus
relabel_configs:
- source_labels: ["__address__"] #我们要替换的 meta label 为"__address__"
target_label: "host" #给 targets 新增一个名为 "host" 的标签
regex: "(.*):(.*)" #将匹配的内容分为两部分 groups--> (host):(port)
replacement: $1 #将匹配的 host 第一个内容设置为新标签的值
action: replace
运行结果:
- scrape 拉取样本
prometheus 通过http从target采集所有metrics的样本,http路径可以通过的 “metrics_path” 配置,默认是 “/metrics”。请求超时时间配置下的 “scrape_timeout” 默认10s . - 经过一系列处理之后,采集到的数据会被持久化保存。