官方链接
Prometheus下载地址Prometheus相关文档Prometheus官方文档
一、基本原理
通过HTTP协议周期性抓取被监控组件的状态
,任意组件只要提供对应的HTTP接口就可以接入监控。
输出被监控组件信息的HTTP接口被叫做exporter
,也就是数据采集端,通常来说,最需要接入改造的就是expoter. 当前互联网上已经有很多成熟的exporter
组件,当然用户也可用根据官方提供的sdk自行编写exporter.
注意:prometheus的时间序列数据分为四种类型
- Counter: 收集的数据是按照某个趋势(增加/减少)一直变化的,我们往往用它记录服务请求总量,错误总数等
- Gauge: 搜集的数据是一个瞬时的,与时间没有关系,可以任意变高变低,往往可以用来记录内存使用率、磁盘使用率等
- Histogram: 用于表示一段时间范围内对数据进行采样,并能够对其指定区间以及总数进行统计,通常我们用它计算分位数的直方图。
- Summary: 和Histogram类似,用于表示一段时间内数据采样结果。它直接存储了 quantile 数据,而不是根据统计区间计算出来的
二、组件介绍
- 1.Prometheus-server: 负责
数据采集和存储(TSDB)
,提供PromQL查询语言的支持 - 2.Alertmanager: 警告管理器,用来进行报警
- 3.Push Gateway: 支持临时性Job主动推送指标的中间网关(通常对应于短声明周期的任务监控)
三、服务过程
- 1.
Prometheus Daemon
定时去目标上抓取metrics(指标)数据
,每个抓取目标需要暴露一个http服务的接口给server进行定时获取。支持配置文件、文本文件、Zookeeper、Consul、DNS SRV Lookup方式抓取目标;对于长生命周期的服务,采用Pull模式定期拉取数据,对于段生命周期的任务,通过push-gateway来主动推送数据 - 2.
Prometheus
本地存储抓取的所有数据,并通过一定规则进行清理和整理数据,并把得到的结果存储到新的时间序列中。 - 3.Prometheus通过PromQL和其他API可视化地展示收集的数据. 可以作为
Grafana
的数据源进行图标输出,也可通过API对外提供数据展示 - 4.
PushGateway
支持client主动推送metrics到push-gateway(相当于是一个常驻的exporter服务),prometheus定期去push-gateway中获取数据 - 5.
Alertmanager
是独立于prometheus的一个组件,支持PromQL查询语句,提供灵活的报警功能
四、pronetheus服务构建使用
源码安装
# 三个组件
$ wget https://github.com/prometheus/node_exporter/releases/download/v0.18.1/node_exporter-0.18.1.linux-amd64.tar.gz -O node_exporter-0.18.1.tar.gz
$ wget https://github.com/prometheus/prometheus/releases/download/v2.10.0/prometheus-2.10.0.linux-amd64.tar.gz -O prometheus-2.10.0.linux-amd64.tar.gz
$ wget https://github.com/prometheus/pushgateway/releases/download/v0.8.0/pushgateway-0.8.0.linux-amd64.tar.gz -O pushgateway-0.8.0.linux-amd64.tar.gz
docker方式安装
注意:prometheus默认使用yaml格式来定义配置文件
# 编写prometheus默认配置文件
$ cat prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
rule_files:
# - "first.rules"
# - "second.rules"
scrape_configs:
# 会在每个metrics数据中增加job="prometheus"和instance="localhost:9090"的基本数据
- job_name: prometheus
static_configs:
- targets: ['localhost:9090']
# 热启动prometheus服务
$ docker run --name=prometheus -d -p 9090:9090 -v /Users/xuxuebiao/Desktop/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus --config.file=/etc/prometheus/prometheus.yml --web.enable-lifecycle
$ docker ps -l
CONTAINER