prometheus是一个集合了数据采集、时间序列存储、告警功能的告警监控系统。
通过指标的名字和标签唯一标记一个时间序列,格式如下:
<metric name>{<label name>=<label value>, ...}
标签提供了对同一个指标的多纬度查询,修改标签名称或者增删标签都会创建一个新的时间序列。
指标名称:
[a-zA-Z_:][a-zA-Z0-9_:]*
标签名称:
[a-zA-Z_:][a-zA-Z0-9_:]*
以`__`开头的标签名,为系统内部使用
Samples是采样点,由毫秒精度的时间戳和一个float64数值组成。
Metric有四种类型,当前这四种类型只是在客户端library中标记,服务端没有类型概念。
counter: 累计值(cumulative),只会向上增长的指标
gauge: 瞬时值
histogram: 直方图(histogram),统计采样数据在指定的区间内的分布情况
summary: 汇总统计,支持分位数(φ-quantiles)
metric types中做了详细介绍。
go get github.com/prometheus/prometheus
cd $GOPATHsrc/github.com/prometheus/prometheus
cd cmd/prometheus/
git checkout v1.7.1
go build
编辑配置文件prometheus.yml:
global:
scrape_interval: 15s # By default, scrape targets every 15 seconds.
# Attach these labels to any time series or alerts when communicating with
# external systems (federation, remote storage, Alertmanager).
external_labels:
monitor: 'codelab-monitor'
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# Override the global default and scrape targets from this job every 5 seconds.
scrape_interval: 5s
static_configs:
- targets: ['localhost:9090']
这里只配置了一个监控目标,就是localhost:9090,prometheus自身。
static_configs是job中发现target的一种方式,prometheus configuration提供了多种发现方式。
<scrape_config>
<tls_config>
<azure_sd_config>
<consul_sd_config>
<dns_sd_config>
<ec2_sd_config>
<openstack_sd_config>
<file_sd_config>
<gce_sd_config>
<kubernetes_sd_config>
<marathon_sd_config>
<nerve_sd_config>
<serverset_sd_config>
<triton_sd_config>
<static_config>
<relabel_config>
<metric_relabel_configs>
<alert_relabel_configs>
<alertmanager_config>
<remote_write>
<remote_read>
默认将数据存放在./data目录中,可以通过-storage.local.path进行配置。
./prometheus -config.file=./prometheus.yml
打开127.0.0.1:9090,就进入了prometheus界面,可以选择数据源查看。
prometheus本身只支持pull的方式,如果要使用push的方式,需要部署一个pushgateway。
client向pushgateway中推送数据,在prometheus中配置job,轮询pushgateway的数据。
详情见push gateway。
exporter用于在不改动目标程序的情况下,将已有的程序的监控指标转换为prometheus的格式,导入到prometheus中。
go get github.com/prometheus/haproxy_exporter
cd $GOPATH/src/github.com/prometheus/haproxy_exporter