prometheus理论概述
1.prometheus特点
- 多维数据模型:由度量名称和键值对标识的时间序列数据
- PromQL:一种灵活的查询语言,可以利用多维数据完成复杂的监控数据查询
- 不依赖分布式存储,单个服务器节点可直接工作
- 基于HTTP的pull方式采集时间序列数据
- 推送时间序列数据通过pushgateway组件支持,pushgateway的原理类似于zabbix-proxy
- 通过服务发现或静态配置发现模板
- 多种图形模式展现图形
2.prometheus组成及架构
prometheus架构原理:
核心组件有prometheus sever、pushgateway、service discovert、alertmanager、UI。
其中一些小的监控任务统一将监控数据推送给pushgateway,由pushgateway进行收集,最终由prometheus server去pushgateway上拉取数据。
像一些持久化的监控任务,如主机的系统监控,这些都由exporters进行收集,最后prometheus通过pull方式进行拉取监控数据。
prometheus server内置了TSDB数据库,用来存时序数据,在生成环境中就要依靠第三方时序数据库进行存放数据。
像k8s、docker这些无法持续性监控的服务,这时就得需要service discover自动发现机制来探测k8s中的容器服务器,最终实现全方位监控。
对于监控图形我们可以采用grafana来出图
监控告警采用alertmanager通过微信、钉钉、email进行报警
核心组件:
- prometheus server:收集指标和存储时间序列数据,并提供查询接口
- clentlibrary:客户端库
- pushgateway:短期存储指标数据,主要用于临时性任务
- exporters:采集已有的第三方服务监控指标并暴露metrics
- alertmanager:告警
- web ui:简单的web控制台
3.prometheus数据模型
prometheus将所有数据存储为时间序列格式,具有相同度量名称以及标签属于同一个指标,prometheus的度量名称其实就是指的是监控项的名称,标签用于记录监控数据
扫描二维码关注公众号,回复:
13086448 查看本文章
每个时间序列都由度量标准名称和一组标签来组成
时间序列格式:
<metric name>{<label name>=<value>,...}
示例:
api_http_request_total{method="POST",handler="/messages"}
其中
api_http_request_total这个是度量名称
method、handler是标签名称
POST、/messages都是标签值
多个标签以逗号分隔
4.prometheus指标类型
- counter:递增的计数器
- 递增计数器呈现出来的图形就是不断上升的
- gauge:可以任意变化的数值
- 可以动态的更新数值,检测硬件使用率常用
- Histogram:对一段时间范围内数据进行采样,并对所有数值求和与统计数量
- Summary:与Histogram类似
Histogram、Summary的图形,一段范围内的数据采集
5.prometheus作业和实例
实例:可以抓取的目标成为实例,实例就对应配置文件中targets
作业:具有相同目标的实例集合称为作业,作业就是配置文章中的job_name