<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Prometheus on My Blog</title><link>/tags/prometheus/</link><description>Recent content in Prometheus on My Blog</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Wed, 28 Mar 2018 00:00:00 +0000</lastBuildDate><atom:link href="/tags/prometheus/index.xml" rel="self" type="application/rss+xml"/><item><title>Prometheus简介</title><link>/2018/03/28/prometheus%E7%AE%80%E4%BB%8B/</link><pubDate>Wed, 28 Mar 2018 00:00:00 +0000</pubDate><guid>/2018/03/28/prometheus%E7%AE%80%E4%BB%8B/</guid><description>&lt;!-- toc --&gt;
&lt;p&gt;[TOC]&lt;/p&gt;
&lt;h1 id="1prometheus介绍和架构"&gt;1、Prometheus介绍和架构&lt;/h1&gt;
&lt;h2 id="11-prometheus介绍"&gt;1.1 Prometheus介绍&lt;/h2&gt;
&lt;p&gt;Prometheus是一个开源的系统监视和警报工具包，自2012成立以来，许多公司和组织采用了Prometheus。它现在是一个独立的开源项目，并独立于任何公司维护。在2016年，Prometheus加入云计算基金会作为Kubernetes之后的第二托管项目。&lt;/p&gt;
&lt;h3 id="111-prometheus的关键特性"&gt;&lt;strong&gt;1.1.1 Prometheus的关键特性&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;由度量名和键值对标识的时间序列数据的多维数据模型&lt;/li&gt;
&lt;li&gt;灵活的查询语言&lt;/li&gt;
&lt;li&gt;不依赖于分布式存储；单服务器节点是自治的&lt;/li&gt;
&lt;li&gt;通过HTTP上的拉模型实现时间序列收集&lt;/li&gt;
&lt;li&gt;通过中间网关支持推送时间序列&lt;/li&gt;
&lt;li&gt;通过服务发现或静态配置发现目标&lt;/li&gt;
&lt;li&gt;图形和仪表板支持的多种模式&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="112-prometheus的组件"&gt;1.1.2 Prometheus的组件：&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;如上图，Prometheus主要由以下部分组成：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Prometheus Server：用于抓取和存储时间序列化数据&lt;/li&gt;
&lt;li&gt;Exporters：主动拉取数据的插件&lt;/li&gt;
&lt;li&gt;Pushgateway：被动拉取数据的插件&lt;/li&gt;
&lt;li&gt;Altermanager：告警发送模块&lt;/li&gt;
&lt;li&gt;Prometheus web UI：界面化，也包含结合Grafana进行数据展示或告警发送&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;prometheus本身是一个以进程方式启动，之后以多进程和多线程实现监控数据收集、计算、查询、更新、存储的这样一个C/S模型运行模式。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="113-prometheus的整体架构"&gt;&lt;strong&gt;1.1.3 Prometheus的整体架构&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Prometheus从jobs获取度量数据，也直接或通过推送网关获取临时jobs的度量数据。它在本地存储所有被获取的样本，并在这些数据运行规则，对现有数据进行聚合和记录新的时间序列，或生成警报。通过Grafana或其他API消费者，可以可视化的查看收集到的数据。下图显示了Pometheus的整体架构和生态组件：&lt;/p&gt;
&lt;p&gt;&lt;img alt="architecture" loading="lazy" src="/2018/03/28/prometheus%E7%AE%80%E4%BB%8B/architecture.svg"&gt;&lt;/p&gt;
&lt;p&gt;Prometheus的整体工作流程：&lt;/p&gt;
&lt;p&gt;1）Prometheus 服务器定期从配置好的 jobs 或者 exporters 中获取度量数据；通过推送网关获取临时jobs的度量数据. -Retrieval 负责获取&lt;/p&gt;
&lt;p&gt;2）Prometheus 服务器在本地存储收集到的度量数据，并对这些数据进行聚合；- 由TSDB负责存储&lt;/p&gt;
&lt;p&gt;3）运行已定义好的 alert.rules，记录新的时间序列或者向告警管理器推送警报。&lt;/p&gt;
&lt;p&gt;4）告警管理器根据配置文件，对接收到的警报进行处理，并通过email等途径发出告警。&lt;/p&gt;
&lt;p&gt;5）Grafana等图形工具获取到监控数据，并以图形化的方式进行展示。&lt;/p&gt;
&lt;h2 id="12-prometheus关键概念"&gt;1.2 Prometheus关键概念&lt;/h2&gt;
&lt;h3 id="121-数据模型"&gt;&lt;strong&gt;1.2.1 数据模型&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Prometheus从根本上将所有数据存储为时间序列：属于相同度量标准和同一组标注尺寸的时间戳值流。除了存储的时间序列之外，普罗米修斯可能会生成临时派生时间序列作为查询的结果。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;度量名称和标签&lt;/strong&gt;：每个时间序列都是由度量标准名称和一组键值对（也称为标签）组成唯一标识。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;度量名称&lt;/strong&gt;指定被测量的系统的特征（例如：http_requests_total-接收到的HTTP请求的总数）。它可以包含ASCII字母和数字，以及下划线和冒号。它必须匹配正则表达式[a-zA-Z_:][a-zA-Z0-9_:]。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;标签&lt;/strong&gt;启用Prometheus的维度数据模型：对于相同度量标准名称，任何给定的标签组合都标识该度量标准的特定维度实例。查询语言允许基于这些维度进行筛选和聚合。更改任何标签值（包括添加或删除标签）都会创建新的时间序列。标签名称可能包含ASCII字母，数字以及下划线。他们必须匹配正则表达式[a-zA-Z_][a-zA-Z0-9_]*。以__开始的标签名称保留给供内部使用。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;样本&lt;/strong&gt;：实际的时间序列，每个序列包括：一个 float64 的值和一个毫秒级的时间戳。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;**格式：**给定度量标准名称和一组标签，时间序列通常使用以下格式来标识：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;lt;metric name&amp;gt;{&amp;lt;label name&amp;gt;=&amp;lt;label value&amp;gt;, ...}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;例如，时间序列的度量名称为api_http_requests_total，标签method=”POST”和handler=”/messages”，则标记为：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;api_http_requests_total{method=&amp;#34;POST&amp;#34;, handler=&amp;#34;/messages&amp;#34;}
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如下，是在进行数据收集后，在Prometheus中的data目录的数据&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# tree
.
├── 01EHSWYREVQ296VKWT5MAJEX90
│   ├── chunks
│   │   └── 000001
│   ├── index
│   ├── meta.json
│   └── tombstones
├── 01EHTAP73QPZY1VH6C2K9GHG6H
│   ├── chunks
│   │   └── 000001
│   ├── index
│   ├── meta.json
│   └── tombstones
...
├── chunks_head
│   ├── 000009
│   └── 000010
├── index.html
├── lock
├── queries.active
└── wal
├── 00000006
├── 00000007
├── 00000008
├── 00000009
└── checkpoint.00000005
└── 00000000
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;prometheus采用time-series(时间序列)方式，存储在本地硬盘&lt;/p&gt;</description></item></channel></rss>