Prometheus是最初在SoundCloud上构建的开源系统监视和警报工具包 。自2012年成立以来,许多公司和组织都采用了Prometheus,该项目拥有非常活跃的开发人员和用户社区。现在,它是一个独立的开源项目,并且独立于任何公司进行维护。为了强调这一点并阐明项目的治理结构,Prometheus 于2016年加入了 Cloud Native Computing Foundation,这是继Kubernetes之后的第二个托管项目。
下面说一下这个开源软件的安装实践过程,目标如下:
- 安装 go 语言环境
- 在监控服务器上安装prometheus
- 在被监控环境上安装export
- 安装grafana
- 配置报警规则
Prometheus简介
简述
特点
- 一个多维数据模型,其中包含通过度量标准名称和键/值对标识的时间序列数据
- PromQL,一种灵活的查询语言 ,可利用此维度
- 不依赖分布式存储;单服务器节点是自治的
- 时间序列收集通过HTTP上的拉模型进行
- 通过中间网关支持推送时间序列
- 通过服务发现或静态配置发现目标
- 多种图形和仪表板支持模式
Prometheus的优点
- 相对其他而言有更强大的查询语言,警报和通知功能
- 图形和报警的可用性和正常运行时间更高
- 不依赖分布式存储,单服务器节点是自治的
Prometheus与Zabbix的区别
- Zabbix:成熟度高,上手更快,但更好的集成导致灵活性较差,监控数据的复杂度增加后,Zabbix做进一步定制难度很高,即使做好了定制,也没法利用之前收集到的数据了
- Prometheus:基本上正相反,上手难度大,但由于定制灵活度高,数据也有更多的聚合可能,起步后的使用难度小于zabbix
prometheus的基本概念
- Prometheus支持多个api实例编码相同的数据,多重图形和仪表板模式
- Prometheus在每个时间序列中创建一个本地文件,但允许在出现刮擦或者规则评估时以任意间隔存储样本。由于仅附加了新样本,因此数据可以任意保留,它更适用于许多短暂的,经常变化的时间序列集
- Prometheus提供了一种更强大的图形和警报查询语言,Prometheus Alertmanager还提供了分组,重复数据删除和静音功能
- Prometheus仅支持float64数据类型,但对字符串和毫秒分辨率时间戳的支持有限
- Prometheus运行简单,但在有些时候需要根据产品,服务,数据中心或类似方面的可伸缩性边界明确的分片服务器,还支持并行冗余运行
时序4种类型
Prometheus 时序数据分为 Counter, Gauge, Histogram, Summary 四种类型。
- Counter:表示收集的数据是按照某个趋势(增加/减少)一直变化的,我们往往用它记录服务请求总量,错误总数等。例如 Prometheus server 中 http_requests_total, 表示 Prometheus 处理的 http 请求总数,我们可以使用data, 很容易得到任意区间数据的增量
- Gauge:表示搜集的数据是一个瞬时的,与时间没有关系,可以任意变高变低,往往可以用来记录内存使用率、磁盘使用率等。
- Histogram:Histogram 由 <basename>_bucket{le="<upper inclusive bound>"},<basename>_bucket{le="+Inf"}, <basename>_sum,<basename>_count 组成,主要用于表示一段时间范围内对数据进行采样,(通常是请求持续时间或响应大小),并能够对其指定区间以及总数进行统计,通常我们用它计算分位数的直方图。
- Summary:Summary 和 Histogram 类似,由 <basename>{quantile="<φ>"},<basename>_sum,<basename>_count组成,主要用于表示一段时间内数据采样结果,(通常是请求持续时间或响应大小),它直接存储了 quantile 数据,而不是根据统计区间计算出来的。区别在于:
a. 都包含 <basename>_sum,<basename>_count。
b. Histogram 需要通过 <basename>_bucket 计算 quantile, 而 Summary 直接存储了 quantile 的值。