设为首页 加入收藏

TOP

5分钟了解Prometheus(一)
2019-09-30 16:48:16 】 浏览:121
Tags:5分钟 了解 Prometheus

Prometheus(译:普罗米修斯)用领先的开源监控解决方案为你的指标和警报提供动力(赋能)。

 

1.  概述

1.1.  Prometheus是什么?

Prometheus是一个开源的系统监控和警报工具包。自2012年启动以来,许多公司和组织都采用了Prometheus,该项目拥有非常活跃的开发人员和用户社区。它现在是一个独立的开源项目,独立于任何公司进行维护。Prometheus于2016年加入云原生计算基金会,成为继Kubernetes之后的第二个托管项目。

1.1.1.  Prometheus的主要特性:

  • 一个多维数据模型,包含由指标名称和键/值对(Tag)标识的时间序列数据
  • PromQL是一种灵活的查询语音,用于查询并利用这些维度数据
  • 不依赖分布式存储,单个服务器节点是自治的
  • 时间序列收集是通过HTTP上的pull模型进行的(支持Pull)
  • 推送时间序列是通过一个中间网关来支持的(也支持Push)
  • 目标是通过服务发现或静态配置发现的
  • 多种模式的图形和仪表盘支持

总结一下,就是多维数据模型、PromQL查询语言、节点自治、HTTP主动拉取或者网关主动推送的方式获取时间序列数据、自动发现目标、多种仪表盘支持

1.1.2.  组件:

  • Prometheus server,它负责抓取和存储时间序列数据,是最主要的组件
  • client libraries,用于检测应用程序代码的客户端库
  • push gateway,用于支持短期的jobs
  • exporters,用于支持HAProxy等第三方
  • alertmanager,用于处理告警
  • 各种支持工具

大多数Prometheus组件都是用Go编写的,这使得它们易于作为静态二进制文件构建和部署

1.1.3.  架构:

这张图展示了架构及其生态系统的一些组成部分:

Prometheus从工具化的作业中获取指标,要么直接获取,要么通过中介推送网关获取短期作业。它在本地存储所有抓取的样本,并对这些数据应用规则将这些数据进行聚合,并记录新的时间序列,或者生成警报。可以用Grafana或其他API来可视化收集的数据。

1.2.  什么时候用它合适

Prometheus可以很好地记录任何纯数字时间序列。它既适合以机器为中心的监视,也适合高度动态的面向服务的体系结构的监视。在微服务的世界中,它对多维数据收集和查询的支持是一个特别的优势。

Prometheus是为可靠性而设计的,在你的服务宕机的时候,你可以快速诊断问题。每台Prometheus服务器都是独立的,不依赖于网络存储或其他远程服务。

1.3.  什么时候用它不合适

Prometheus的值的可靠性。你总是可以查看有关系统的统计信息,即使在出现故障的情况下也是如此。如果你需要100%的准确性,例如按请求计费,Prometheus不是一个好的选择,因为收集的数据可能不够详细和完整。在这种情况下,最好使用其他系统来收集和分析用于计费的数据,并使用Prometheus来完成剩下的监视工作。

1.4.  Prometheus VS InfluxDB

InfluxDB是一个开源的时间序列数据库,具有扩展和集群的商业选项。InfluxDB项目是在Prometheus开发开始将近一年后发布的,所以当时无法考虑将其作为替代方案。尽管如此,Prometheus和fluxdb之间仍然存在显著的差异。二者有许多相似之处。两者都有标签(在InfluxDB中称为tags)来有效地支持多维度度量。它们基本上使用相同的数据压缩算法。两者都具有广泛的集成,包括彼此之间的集成。两者都有挂钩,允许进一步扩展它们,例如在统计工具中分析数据或执行自动化操作。

下列情况,用InfluxDB更好:

  • 如果你正在进行事件日志记录
  • 商业选项为InfluxDB提供集群,这对于长期数据存储也更好
  • 最终实现副本之间数据的一致性

下列情况,用Prometheus更好:

  • 如果你主要做的是度量
  • 如果你需要更强大的查询语言、警报和通知功能
  • 更高的可用性和正常运行时间,用于绘图和报警

InfluxDB由一家遵循开放核心模型的商业公司维护,提供高级特性,如闭源集群、托管和支持。

Prometheus是一个完全开源和独立的项目,由许多公司和个人维护,其中一些还提供商业服务和支持。

2.  基本概念

2.1.  数据模型

Prometheus基本上将所有数据存储为时间序列:属于同一指标和同一组标记维度的时间戳值流。除了存储时间序列外,Prometheus还可以根据查询结果生成临时派生的时间序列。

(PS:这里对时间序列的解释是这样的,

time series: streams of timestamped values belonging to the same metric and the same set of labeled dimensions

2.1.1.  Metric names and labels

Every time series is uniquely identified by its metric name and optional key-value pairs called labels.

(每个时间序列都由其指标名称和称为标签的可选键值对唯一标识)

指标名称指定要度量的系统的一般特性(例如,http_requests_total表示接收的HTTP请求的总数)。它可能包含ASCII字母和数字,以及下划线和冒号。它必须匹配正则表达式[a-zA-Z_:][a-zA-Z0-9_:]*

标签名称可以包含ASCII字母、数字和下划线。它们必须匹配正则表达式[a-zA-Z_][a-zA-Z0-9_]*。以__开头的标签名称保留内部使用。

标签值可以包含任何Unicode字符。

2.1.2.  Sample(样本)

样本构成实际的时间序列数据。每个样本包括:

  • a float64 value
  • a millisecond-precision timestamp

2.1.3.  notation(记法) 

给定一个度量名称和一组标签,时间序列通常使用以下符号标识:

<metric name>{<label name>=<label value>,...}

例如,有这样一个时间序列,指标名称是api_http_requests_total,有两个标签method="POST"和handler="/messages",那么这个时间序列可以这样写:

api_http_requests_total{method="POST", handler="/messages"}

2.2.  metric types(指标类型)

2.2.1.  Counter(计数器)

计数器是一个累积指标,它表示一个单调递增的计数器,其值只能在重启时递增或重置为零。例如,可以使用计数器来表示已服务的请求数、已完成的任务数或错误数。不要使用计数器来反映一个可能会减小的值。例如,不要使用计数器表示当前正

首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇阿里巴巴 Sentinel + InfluxDB + .. 下一篇Java细节----method和function的..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目