数科院博客园 - prometheus
type: channel
link: https://blog.icsc.vip/index.php/tag/prometheus/
items: prometheus概览

prometheus概览
type: item
date: 2020-03-28T12:38:00+00:00
description: Prometheus 是由前 Google 工程师从 2012 年开始在 Soundcloud 以开源软件的形式进行研发的系统监控和告警工具包，自此以后，许多公司和组织都采用了 Prometheus 作为监控告警工具Prometheus 的主要优势有：由指标名称和和键/值对标签标识的时间序列数据组成的多维数据模型。强大的查询语言 PromQL。不依赖分布式存储；单个服务节点具有自治能力。时间序列数据是服务端通过 HTTP 协议主动拉取获得的。也可以通过中间网关来推送时间序列数据。可以通过静态配置文件或服务发现来获取监控目标。支持多种类型的图表和仪表盘。prometheus 生态系统由多个组件组成，其中有许多组件是可选的：Prometheus Server 作为服务端，用来存储时间序列数据。客户端库用来检测应用程序代码。用于支持临时任务的推送网关。Exporter 用来监控 HAProxy，StatsD，Graphite 等特殊的监控目标，并向 Prometheus 提供标准格式的监控样本数据。alartmanager 用来处理告警。其他各种周边工具。其中大多数组件都是用 Go 编写的，因此很容易构建和部署为静态二进制文件。架构图Prometheus 适用于记录文本格式的时间序列，Prometheus 是专为提高系统可靠性而设计的，它可以在断电期间快速诊断问题，每个 Prometheus Server 都是相互独立的，不依赖于网络存储或其他远程服务。当基础架构出现故障时，你可以通过 Prometheus 快速定位故障点，而且不会消耗大量的基础架构资源。Prometheus 非常重视可靠性，即使在出现故障的情况下，你也可以随时查看有关系统的可用统计信息。如果你需要百分之百的准确度，例如按请求数量计费，那么 Prometheus 不太适合你，因为它收集的数据可能不够详细完整。这种情况下，你最好使用其他系统来收集和分析数据以进行计费，并使用 Prometheus 来监控系统的其余部分。Prometheus 所有采集的监控数据均以指标（metric）的形式保存在内置的时间序列数据库当中（TSDB）：属于同一指标名称，同一标签集合的、有时间戳标记的数据流。除了存储的时间序列，Prometheus 还可以根据查询请求产生临时的、衍生的时间序列作为返回结果。指标名称和标签每一条时间序列由指标名称（Metrics Name）以及一组标签（键值对）唯一标识。其中指标的名称（metric name）可以反映被监控样本的含义，指标名称只能由 ASCII 字符、数字、下划线以及冒号组成，同时必须匹配正则表达式 [a-zA-Z_:][a-zA-Z0-9_:]*。通过使用标签，Prometheus 开启了强大的多维数据模型：对于相同的指标名称，通过不同标签列表的集合，会形成特定的度量维度实例（例如：所有包含度量名称为 /api/tracks 的 http 请求，打上 method=POST 的标签，就会形成具体的 http 请求）。该查询语言在这些指标和标签列表的基础上进行过滤和聚合。改变任何度量指标上的任何标签值（包括添加或删除指标），都会创建新的时间序列。样本在时间序列中的每一个点称为一个样本（sample），样本由以下三部分组成：指标（metric）：指标名称和描述当前样本特征的 labelsets；时间戳（timestamp）：一个精确到毫秒的时间戳；样本值（value）： 一个 folat64 的浮点型数据表示当前样本的值。配置 Prometheus 来监控自己Prometheus 通过在目标节点的 HTTP 端口上采集 metrics（遥测专用词，度量指标）来监控目标节点（以下会称为“采样目标”）。因为 Prometheus 也以相同的方式暴露自己的数据，所以他也可以采集和检查自己的健康状况。执行 prometheus 命令的时候可以通过参数 --config.file 来指定配置文件路径。Prometheus 服务运行过程中如果配置文件有改动，可以给服务进程发送 SIGHUP 信号来通知服务进程重新从磁盘加载配置。这样无需重启，避免了服务中断。prometheus.yml 中的配置详解<boolean>： 布尔值，true 或 false<duration>： 持续时间，格式符合正则表达式 [0-9]+(ms|[smhdwy])<labelname>： 标签名，格式符合正则表达式 [a-zA-Z_][a-zA-Z0-9_]*<labelvalue>： 标签值，可以包含任意 unicode 字符<filename>： 文件名，任意有效的文件路径<host>： 主机，可以是主机名或 IP，后面可跟端口号<path>： URL 路径<scheme>…