Prometheus是一款高活跃生态系统的开源系统监控和警告工具包,它前身是SoundCloud的警告工具包。
prometheus主要特征
- 多维度数据模型
- 灵活的查询语言
- 不依赖分布式存储,单个服务器节点是自主的
- 以HTTP方式,通过pull模型拉去时间序列数据
- 也通过中间网关支持push模型 通过服务发现或者静态配置,来发现目标服务对象
- 支持多种多样的图表和界面展示,grafana也支持它
组件
- 主服务Prometheus Server负责抓取和存储时间序列数据
- 客户库负责检测应用程序代码
- 支持短生命周期的PUSH网关
- 基于Rails/SQL仪表盘构建器的GUI
- 多种导出工具,可以支持Prometheus存储数据转化为HAProxy、StatsD、Graphite等工具所需要的数据存储格式
- 警告管理器
- 命令行查询工具
- 其他各种支撑工具
Prometheus架构
Prometheus服务,可以直接通过目标拉取数据,或者间接地通过中间网关拉取数据。它在本地存储抓取的所有数据,并通过一定规则进行清理和整理数据,并把得到的结果存储到新的时间序列中,PromQL和其他API可视化地展示收集的数据。
适用场景
Prometheus在记录纯数字时间序列方面表现非常好。它既适用于面向服务器等硬件指标的监控,也适用于高动态的面向服务架构的监控。对于现在流行的微服务,Prometheus的多维度数据收集和数据筛选查询语言也是非常的强大。Prometheus是为服务的可靠性而设计的,当服务出现故障时,它可以使你快速定位和诊断问题。它的搭建过程对硬件和服务没有很强的依赖关系。
不适用场景
Prometheus的价值在于可靠性,甚至在很恶劣的环境下,你都可以随时访问它和查看系统服务各种指标的统计信息。 如果你对统计数据需要100%的精确,它并不适用,例如:它不适用于实时计费系统。
安装
安装方式包括,预编译二进制文件/源码/docker安装
-
docker安装方式
1、docker run -p 9090:9090 prom/prometheus;
2、绑定挂载–在运行Prometheus服务的主机上,做一个本地到docker容器的配置文件关系映射:
docker run -p 9090:9090 -v /tmp/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
3、自定义镜像—利用Dockerfile创建一个Prometheus配置目录prometheus.yml, Dockerfile应该这样写:
FROM prom/prometheus ADD prometheus.yml /etc/prometheus/
然后编译和运行它:
docker build -t my-prometheus . docker run -p 9090:9090 my-prometheus
数据模型
存储的数据都是时间序列—
- {metric和label:s度量指标名称和标签}
- 有序的采样值
- notation(符号)
[metric name]{[label name]=[label value], …}<–>api_http_requests_total{method=”POST”, handler=”/messages”}
度量指标类型
- counter(计数器):是累计度量指标,只能递增的数值。计数器主要用于统计服务的请求数、任务完成数和错误出现的次数等;
- Gauge(测量器):是度量指标,它表示一个既可以递增, 又可以递减的值。测量器主要测量类似于温度、当前内存使用量等,也可以统计当前服务运行随时增加或者减少的Goroutines数量;
- Histogram(柱状图):使用histogram_quantile()函数, 计算直方图或者是直方图聚合计算的分位数阈值
- summary(总结):是采样点分位图统计,(通常的使用场景:请求持续时间和响应大小)。
Jobs&Instances(任务和实例):
当Prometheus拉取一个目标, 会自动地把两个标签添加到度量名称的标签列表中,分别是:
- job: 目标所属的配置任务名称api-server。
- instance: 采样点所在服务: host:port
安装和启动服务:
操作 | 步骤 |
---|---|
下载 | http://localhost:9090/metrics 下载到本机,远程连接10.226.133.41服务器,执行rz,选中下载的Prometheus-*.tar.gz上传到服务器端; |
提取 | tar zxvf prometheus-.tar.gz /// cd prometheus- |
配置 | prometheus.yml |
启动 | prometheus: ./prometheus --config.file=prometheus.yml---->指定配置文件 |
规则
为聚集到抓取的数据,设置规则并写入到新的时间序列中,
prometheus.rules ---->
job_service:rpc_durations_seconds_count:avg_rate5m = avg(rate(rpc_durations_seconds_count[5m])) by (job, service)
为了使Prometheus服务使用这个新的规则,在prometheus.yml配置文件的global配置区域添加一个rule_files语句---->
rule_files:
- 'prometheus.rules'
查询
提供一个函数式的表达式语言,使用户实时查找和聚合时间序列数据。
-
表达式语言数据类型:
- instant vector–瞬时向量(同一时刻,抓取的所有度量指标数据,所有数据具有相同的时间戳);
- range vector–范围向量(任何一个时间范围内,抓取的所有度量指标数据);
- scalar–标量(简单的浮点值);
- string
-
时间序列选择器:
- 瞬时向量选择器-----http_requests_total{job=“prometheus”,group=“canary”}
- 范围向量选择器----http_requests_total{job=“prometheus”}[5m](s/m/h/d/w/y)(过去5min钟内的时间序列数据)
- 偏移修饰符offset;