Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Prometheus 上报和查询

Prometheus 上报和查询

作者头像
zhiruili
发布于 2023-10-20 00:49:47
发布于 2023-10-20 00:49:47
1.2K00
代码可运行
举报
文章被收录于专栏:简易现代魔法简易现代魔法
运行总次数:0
代码可运行

基本概念 #

采样样本 #

Prometheus 会定期去对数据进行采集,每一次采集的结果都是一次采样的样本(sample),这些数据会被存储为时间序列,也就是带有时间戳的 value stream,这些 value stream 归属于自己的监控指标。

这里采集样本包括了三部分:

  • 监控指标(metric)
  • 毫秒时间戳(timestamp)
  • 样本的值(value)

监控指标 #

一个监控指标被表示为下面的格式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
metric_name { label_name_1=label_value_1, label_name_2=label_value_2, ... }

这里的 metric_name 用于指明监控的内容,label_value_x 则用于声明这个监控内容中不同维度的值。用我们常见的二维坐标系举例,下面有一个二维坐标系,名称为「xxx 坐标系」,其中,有 XY 两个轴,上面有两个点,分别是 AB,它们的坐标分别为 (1, 3)(2, 1)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
xxx坐标系

Y
  ^. A (1, 3)
  │
  │     . B (2, 1)
  v
    <-----------------> X

对应于 Prometheus,这里的 metric_name 就是 「xxx 坐标系」,label_name_1 就是 Xlabel_name_2 就是 Y。需要注意的是,这里的 AB 两个点并不代表采样点,而是监控指标。我们可以想象在这个图中还存在一条虚拟的时间轴,分别从 A B 两点从屏幕外垂直屏幕进去,在这两条虚拟的时间轴上,每一个点就是一个采样点,采样点上会带一个毫秒时间戳和一个值,这个值就是样本的值。在 Prometheus 中,样本的值必须为 float64 类型的值。

对于 Prometheus 而言,这里存在两个时间序列,分别为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
xxx坐标系{"X"="1","Y"="3"}
xxx坐标系{"X"="2","Y"="1"}

说到这里,我们不难意识到,当我们上报数据的时候,这里的标签值不可以用一个数量非常多的值(例如用户 ID),否则会造成时间序列数量的极度膨胀。

数据上报 #

在 Prometheus 内部,所有的采样样本都是以时间序列的形式保存在时序数据库中,但为了方便理解和使用,Prometheus 定义了 4 种数据上报的类型,用户可以根据上报的数据内容选择合适的接口。下面以 Go 的接口为例说明这几种类型的区别和应用场景。

计数器 Counter #

和一般理解的计数器一样,Prometheus 的 counter 也是一个只增不减的值,Go 语言中的接口如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type Counter interface {
    Metric
    Collector

    // Inc increments the counter by 1. Use Add to increment it by arbitrary
    // non-negative values.
    Inc()
    // Add adds the given value to the counter. It panics if the value is <
    // 0.
    Add(float64)
}

用户可以调用 Inc 接口进行上报数据 +1,也可以调用 Add 接口增加任意的值(必须为非负数)。

如前所述,Prometheus 将数据拆分为不同监控指标名和不同的维度,我们上报的值具体属于哪个监控指标要如何指定呢?下面是官方的 example:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
httpReqs := prometheus.NewCounterVec(
    prometheus.CounterOpts{
        Name: "http_requests_total",
        Help: "How many HTTP requests processed, partitioned by status code and HTTP method.",
    },
    []string{"code", "method"},
)
prometheus.MustRegister(httpReqs)

httpReqs.WithLabelValues("404", "POST").Add(42)

这里,我们指定的 metric_namehttp_requests_total官方建议 counter 的 metric name 用 _total 结尾),分成两个维度,codemethod,我们在 (404, POST) 这个维度上上报了一个 42

Counter 非常常见,也非常容易理解,常被用来监控类似「请求量」、「失败量」、「错误码出现次数」等场景。由于 counter 只增不减,所以我们不能用它来监控可能增可能减的数值(例如 goroutine 的数量),如果要监控这种数量,就应该用下面的 gauge。

测量仪表 Gauge #

Gauge 的监控值可增可减,在 Go 语言中的接口如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type Gauge interface {
    Metric
    Collector

    // Set sets the Gauge to an arbitrary value.
    Set(float64)
    // Inc increments the Gauge by 1. Use Add to increment it by arbitrary
    // values.
    Inc()
    // Dec decrements the Gauge by 1. Use Sub to decrement it by arbitrary
    // values.
    Dec()
    // Add adds the given value to the Gauge. (The value can be negative,
    // resulting in a decrease of the Gauge.)
    Add(float64)
    // Sub subtracts the given value from the Gauge. (The value can be
    // negative, resulting in an increase of the Gauge.)
    Sub(float64)

    // SetToCurrentTime sets the Gauge to the current Unix time in seconds.
    SetToCurrentTime()
}

可以看到,相比起 Counter 这里的 Gauge 增加了 DecSub 这样的减少数值的接口,同时提供了 SetSetToCurrentTime 这样的直接设置数值的接口。相比起 counter 而言,gauge 的数值要更加灵活通用。我们可以用它来监控前面提到的「goroutine 的数量」或者是其他可增可减的值,例如「CPU 使用率」、「内存使用率」等。

直方图 Histogram #

尽管我们能够通过 gauge 监控可增可减的值,并可以在查询时求出其一段时间内的平均值,但是对于一些场景而言,这个能力还是存在相当大的局限性。典型的场景是请求时延、响应数据量大小等,在这些场景中,平均值可能并不能很好地反映问题。

举例而言,我们现在需要统计请求时延的长度,如果大部分时延都只有 100 毫秒,而少量有几秒,那么单纯的平均时延就会让我们难以确定实际的时延情况,我们并不是想知道平均时延是几百毫秒,而是想知道多大比例的请求时延是 100 毫秒,多大比例的是几百毫秒,多大比例的是超过一秒。

Histogram 可以帮我们解决这个问题,它并不是记录一个值的变化情况,而是将被观测到的值划分进某一个区间中,这里称为桶(bucket)。下面是 Go 版本的接口,可以看到 Histogram 只有一个 Observe 方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type Histogram interface {
    Metric
    Collector

    // Observe adds a single observation to the histogram.
    Observe(float64)
}

与前面提到的两个上报模式不同,在 counter 中,一个 counter 对应了一个时间序列,我们创建一个 counter 然后用这个 counter 上报数据,它影响的时间序列是确定的,gauge 也是类似。而 Histogram 则会帮我们创建多个时间序列,当我们调用 Observe 的时候,被观测到的值会被放进预先划分好的桶中,每一个桶中并不记录被观测的值,而是对其进行计数。例如前面提到的情况,我们可能会给 0 ~ 100ms 划分一个桶,100ms ~ 1s 划分一个桶,1s 以上划分一个桶,那么,当我们上报一个值的时候,这三个桶中符合条件的桶的计数值就会增加。不过我们最后看到的并不是每一个桶的具体值,而是每个桶和前面所有桶的总和值,这个之后会再提到。这里先来看看如何声明桶的参数。桶的划分是在我们创建 Histogram 时指定的,官方例子如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
temps := prometheus.NewHistogram(prometheus.HistogramOpts{
    Name:    "pond_temperature_celsius",
    Help:    "The temperature of the frog pond.", // Sorry, we can't measure how badly it smells.
    Buckets: prometheus.LinearBuckets(20, 5, 5),  // 5 buckets, each 5 centigrade wide.
})

// Simulate some observations.
for i := 0; i < 1000; i++ {
    temps.Observe(30 + math.Floor(120*math.Sin(float64(i)*0.1))/10)
}

// Just for demonstration, let's check the state of the histogram by
// (ab)using its Write method (which is usually only used by Prometheus
// internally).
metric := &dto.Metric{}
temps.Write(metric)
fmt.Println(proto.MarshalTextString(metric))

通过这样的方法,我们可以描绘出被观测值的分布情况。通过这个分布数据,我们还能算出类似「99% 的请求时延在多少以内」这样的数据。不过,当我们需要这样的数据时,需要对被观测数据有一定的先验知识才能真正使得计算结果比较准确。还是用刚刚提到的时延观测来举个极端一点的例子,假设我们将桶划分为 1ms、10ms、10s,那么我们得出的结果可能是 0% 的请求时延在 1ms 以内,0% 的请求时延在 10ms 以内,100% 的请求在 10s 以内,0% 的请求在 10s 以上,这样的结论显然没有什么意义,只有当我们对时延的长度本身有一个基本概念,并正确划分桶的大小时,我们才能更准确地计算出我们想要的结果。那假设我们就是对一个数据没有什么先验知识,那我们是否有更准确的方式计算出这个数据呢?Prometheus 给出的方法就是用 Summary。

概要 Summary #

Summary 和 histogram 类似,也是用来观测数据的分布情况的,它的接口也和 histogram 一样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type Summary interface {
    Metric
    Collector

    // Observe adds a single observation to the summary.
    Observe(float64)
}

但我们在创建一个 Summary 时,并不是像创建 Histogram 那样划分桶,而是直接划分我们所要计算的分位数区间,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
temps := prometheus.NewSummary(prometheus.SummaryOpts{
    Name:       "pond_temperature_celsius",
    Help:       "The temperature of the frog pond.",
    Objectives: map[float64]float64{0.5: 0.05, 0.9: 0.01, 0.99: 0.001},
})

// Simulate some observations.
for i := 0; i < 1000; i++ {
    temps.Observe(30 + math.Floor(120*math.Sin(float64(i)*0.1))/10)
}

// Just for demonstration, let's check the state of the summary by
// (ab)using its Write method (which is usually only used by Prometheus
// internally).
metric := &dto.Metric{}
temps.Write(metric)
fmt.Println(proto.MarshalTextString(metric))

通过上面的 summary 上报,我们能够更加准确地获知 50% 的观测值,90% 的观测值以及 99% 的观测值,避免了前面 histogram 的问题。但 summary 的数据计算是由客户端进行的,会造成一定的性能损耗。

更多 histogram 和 summary 的对比可以参考这一篇文章

数据查询 #

Prometheus 定义了一个名为 PromQL 的 DSL 用来进行数据查询。常用的 Prometheus 数据可视化工具 Grafana 里面的面板就是通过 PromQL 来进行数据查询的。

瞬时向量 Instant Vector #

假设我们有一个对 HTTP 请求量的 counter 名为 http_requests_total,那么我们只需要在 Grafana 面板的 query editor 中输入 http_requests_total 就可以看到数据了。这个 http_requests_total 是一个瞬时向量,也就是说,这个数据是 Prometheus 采集数据的那一刻数据的值。对于 counter 数据,我们看到的会是一条不断增长的线(采集到的值只增不减)。

之前提到了,我们可以通过标签来给一个监控指标划分维度,在上面绘制出的图里,所有的 标签的值会交叉成多个时间序列,也就是说,假设有一个取值为 200404 的标签 code 和取值为 GETPOST 的标签 method,那么,图中会有四条线,分别为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http_requests_total { code=200, method=GET }
http_requests_total { code=200, method=GET }
http_requests_total { code=404, method=POST }
http_requests_total { code=404, method=POST }

这里重申一下,当我们上报数据的时候,这里的标签值不可以用一个数量非常多的值(例如用户 ID),否则会造成时间序列数量的极度膨胀。

假如我们只想看 code404 的数据,那么我们可以用标签来对数据进行过滤:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http_requests_total { code="404" }

显然,我们一开始写的 http_requests_total 就相当于 http_requests_total {}。这里的 = 表示完整匹配,对应地,不匹配用 !=,如果需要正则匹配,则用 =~!~。我们这里也可以将其写为 Prometheus 的底层表示形式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{ __name__="http_requests_total", code="404" }

这个写法比较少用,但是有时候不得不用,例如我们的监控指标名是 PromQL 的关键字的时候:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
on {}              # 错误,on 是关键字
{ __name__="on" }  # OK

另外,只使用标签而不使用监控指标名来进行匹配也是合法的,但如果不使用监控指标名,那么至少要存在一个标签匹配是不能匹配到空字符串的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{job=~".*"}               # 错误,没有监控指标名,且会匹配到空字符串

{job=~".+"}               # OK,不会匹配到空字符串
{job=~".*",method="get"}  # OK,虽然 job 会匹配到空字符串,但 method 不会

前面提到,histogram 和 summary 会产生多个时间序列,那么它们的时间序列要如何进行查询呢?事实上,Prometheus 会根据一定的规则来给这些时间序列命名,以 histgram 为例,假设存在一个监控 mymetric,设置了 1, 2, 3 bucket,且采集到了如下数据:

buckets

observe

write

values

1

2

2

0.2, 0.6

2

3

5

1.3, 1.5, 1.5

3

4

9

2.4, 2.6, 2.8, 2.9

那么,可以得到这样的结果(注意 bucket 的结果向下包含):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mymetric_bucket { le="1" } = 2
mymetric_bucket { le="2" } = 5
mymetric_bucket { le="3" } = 9
mymetric_bucket { le="+Inf" } = 9
mymetric_count = 9
mymetric_sum = 15.8

如前所述,histogram 并没有存储数据采样点的值,只保留了总和和每一个区间的 counter。我们可以在 PromQL 中用 histogram_quantile() 函数来计算其值的分位数。由于 histogram 的分位数是在 PromQL 中指定的,因此它的灵活性比 summary 高(summary 只能获取上报时定下来的分位数)。

范围向量 Range Vector #

前面提到我们用 http_requests_total 获取到单调递增的 HTTP 请求总数图像,但是这个对于我们而言并没有太大意义,我们希望看到的是类似「每分钟请求数量」这样的数据,PromQL 允许我们获取一段时间的数据,这个被称为范围向量。它的获取方式是在瞬时向量后面加一个中括号,里面填入需要的时间段长度,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http_requests_total [1m]

这里获取的就是过去一分钟的 HTTP 请求总数。但是,当我们将这个语句输入 query editor 后,我们会看到一个错误

invalid expression type “range vector” for range query, must be Scalar or instant Vector

也就是说,范围向量是无法被直接绘制的。我们需要用内置的函数将其转换为一个瞬时向量后才能被绘制出来。例如我们想看到每 1 分钟的 HTTP 请求量,这个需求事实上是「查看一分钟范围内的变化量」,那么我们可以用 increase 函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
increase(http_requests_total [1m])

更多完整的函数介绍可以在这里找到。

前面提到,假设有一个取值为 200404 的标签 code 和取值为 GETPOST 的标签 method,图中会有四条线,分别为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http_requests_total { code=200, method=GET }
http_requests_total { code=200, method=GET }
http_requests_total { code=404, method=POST }
http_requests_total { code=404, method=POST }

但我们希望的是查看每分钟的请求总量,此时,我们可以用 sum 操作符(注意这不是一个函数而是一个聚合操作符)将数据聚合起来:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sum(increase(http_requests_total [1m]))

上面的表达式可以将 4 条曲线合并为一条,让我们更清晰地看到请求总量的变化情况。但我们有时候还希望能够按照返回码来对数据进行归类,这个需求在希望观察错误码变化量的情况下非常常见。所有聚合操作符都可以跟 by (labels)without (labels) 这样的后缀,用于针对某些标签进行操作。例如上面的需求就可以用这个表达式实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sum by (code) (increase(http_requests_total [1m]))

这等价于:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sum without (method) (increase(http_requests_total [1m]))

后缀可以紧跟 sum,也可以放到被操作的表达式后面:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sum (increase(http_requests_total [1m])) by (code)

更多对操作符的介绍可以在这里找到。另外,也可以在这里找到更多的使用例子。

总结 #

Prometheus 基于时序数据库的查询实现了丰富复杂的语义,让用户能够灵活实现各种监控需求,为了能更好地表达自己的查询逻辑,我们需要先了解其中的基本语义,本文仅进行了较为简略的总结,更详细的可以参考官方文档官方最佳实践

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-10-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
PromQL的概念介绍
PromQL基于时间序列模型,即将数据按时间序列进行存储和查询。Prometheus将所有时间序列数据存储为样本值(即某个指标在某个时间点的值),每个时间序列都由一个唯一的标识符(即指标名称和一组标签)来标识。PromQL通过使用这些标识符来查询和聚合时间序列数据。
五分钟学SRE
2023/11/22
9770
PromQL的概念介绍
监控利器 prometheus 使用步骤
⿊盒监控:站在⽤户的⻆度看到的东⻄。⽹站不能打开,⽹站打开的⽐较慢, 监控机器的磁盘空间、内存占用、链接句柄等信息, 更多的是全局表象的信息, 一般不容易定位到具体问题.
用户2825413
2022/11/30
8970
监控利器 prometheus 使用步骤
Prometheus Metrics 设计的最佳实践和应用实例,看这篇够了!
Prometheus 是一个开源的监控解决方案,部署简单易使用,难点在于如何设计符合特定需求的 Metrics 去全面高效地反映系统实时状态,以助力故障问题的发现与定位。本文即基于最佳实践的 Metrics 设计方法,结合具体的场景实例——TKE 的网络组件 IPAMD 的内部监控,以个人实践经验谈一谈如何设计和实现适合的、能够更好反映系统实时状态的监控指标(Metrics)。该篇内容适于 Prometheus 或相关监控系统的初学者(可无任何基础了解),以及近期有 Prometheus 监控方案搭建和维护需求的系统开发管理者。通过这篇文章,可以加深对 Prometheus Metrics 的理解,并能针对实际的监控场景提出更好的指标(Metrics)设计。
腾讯云原生
2020/05/22
3.8K0
一文了解Prometheus
监控服务主动拉取被监控服务的指标,被监控服务一般通过主动暴露metrics端口或者通过Exporter的方式暴露指标,监控服务依赖服务发现模块发现被监控服务,从而去定期的抓取指标
yeedomliu
2022/06/25
1.1K0
一文了解Prometheus
Prometheus Metrics 设计的最佳实践和应用实例,看这篇够了!
作者 | 朱瑜坚 腾讯云后台开发工程师 Prometheus 是一个开源的监控解决方案,部署简单易使用,难点在于如何设计符合特定需求的 Metrics 去全面高效地反映系统实时状态,以助力故障问题的发现与定位。本文即基于最佳实践的 Metrics 设计方法,结合具体的场景实例——TKE 的网络组件 IPAMD 的内部监控,以个人实践经验谈一谈如何设计和实现适合的、能够更好反映系统实时状态的监控指标(Metrics)。该篇内容适于 Prometheus 或相关监控系统的初学者(可无任何基础了解),以及近期
腾讯云可观测平台
2020/06/05
2.9K0
从零开始写一个Exporter
上一篇文章中已经给大家整体的介绍了开源监控系统Prometheus,其中Exporter作为整个系统的Agent端,通过HTTP接口暴露需要监控的数据。那么如何将用户指标通过Exporter的形式暴露出来呢?比如说在线,请求失败数,异常请求等指标可以通过Exporter的形式暴露出来,从而基于这些指标做告警监控。
用户2937493
2019/09/10
1.9K0
一文带你了解 Prometheus
作者:kevinkrcai,腾讯 IEG 后台开发工程师 Prometheus 是一个开源的完整监控解决方案,本文将从指标抓取到查询及可视化展示,以及最后的监控告警,对 Prometheus 做一个基本的认识。 1. 简介 Prometheus 是古希腊神话里泰坦族的一名神明,名字的意思是"先见之明",下图中是 Prometheus 被宙斯惩罚,饱受肝脏日食夜长之苦。 下面就是我们 CRUD Boy 所了解的 Prometheus,下面是其官网封面图引导语:From metrics to insight,
腾讯技术工程官方号
2022/05/10
1.6K0
一文带你了解 Prometheus
Prometheus Go client library 详解
Prometheus 支持 4 种 指标类型,分别是 Counter、Gauge、Histogram 和 Summary。
frank.
2023/11/22
5260
Prometheus Go client library 详解
【Prometheus】Prometheus的样本
在 Prometheus 中,"样本"(Sample)是指时间序列数据的一个基本单位,包含了某个特定时刻的一个度量值。一个样本由以下几部分组成:
人不走空
2024/12/18
2731
PromQL 使用基础
Prometheus 通过指标名称(metrics name)以及对应的一组标签(label)唯一定义一条时间序列。指标名称反映了监控样本的基本标识,而 label 则在这个基本特征上为采集到的数据提供了多种特征维度。用户可以基于这些特征维度过滤、聚合、统计从而产生新的计算后的一条时间序列。
我是阳明
2020/06/15
3.3K0
PromQL 使用基础
第02期:Prometheus 数据采集(一
上篇文章(第01期:详解 Prometheus 专栏开篇)介绍了 Prometheus 的架构,本文开始将介绍 Prometheus 数据采集。本文首先会介绍采集数据的格式和分类,然后会给出一些使用上的建议。
爱可生开源社区
2020/05/29
2.1K0
下一代应用监控指标采集器Prometheus核心介绍
Prometheus是一个最初在SoundCloud上构建的开源系统监视和警报工具包 。自2012年成立以来,许多公司和组织都采用Prometheus,该项目拥有一个非常活跃的开发人员和用户社区。它现在是一个独立的开源项目。Prometheus于2016年加入谷歌主导的顶级开源社区云原生计算基金会(CNCF),成为第二个顶级托管项目。第一是大名鼎鼎的k8s。prometheus是属于下一代监控。可用来监控操作系统、应用、容器等。
码农小胖哥
2019/12/10
1.4K0
下一代应用监控指标采集器Prometheus核心介绍
运维监控之Prometheus入门简介篇
Prometheus(普罗米修斯)是一套开源的监控&报警&时间序列数据库的组合,它将所有信息都存储为时间序列数据;因此实现一种Profiling监控方式,实时分析系统运行的状态、执行时间、调用次数等,以找到系统的热点,为性能优化提供依据。
lyb-geek
2019/07/15
12.4K0
保姆级 Prometheus PromQL 讲解与实战操作
PromQL(Prometheus Query Language)为 Prometheus tsdb 的查询语言。是结合 grafana 进行数据展示和告警规则的配置的关键部分。
我的小碗汤
2023/03/20
14.8K0
保姆级 Prometheus PromQL 讲解与实战操作
prometheus实战篇:prometheus相关概念
Prometheus会将所有采集到的监控样本数据以时间序列的方式保存在内存数据库中,并且定时保存到硬盘上.时间序列是按照时间戳和值的序列顺序存放的,我们称之为向量,每条时间序列通过指标名称和一组标签集命名.如下所示,可以将时间序列理解为一个以时间为X轴的数字矩阵:
全干程序员demo
2023/12/25
5620
prometheus实战篇:prometheus相关概念
Prometheus学习笔记_01
本文介绍Prometheus 监控及在k8s集群中使用node-exporter、prometheus、grafana对集群进行监控。实现原理类似ELK、EFK组合。node-exporter组件负责收集节点上的metrics监控数据,并将数据推送给prometheus, prometheus负责存储这些数据,grafana将这些数据通过网页以图形的形式展现给用户。
Cyylog
2020/08/19
1.2K0
TiKV 源码解析系列文章(三)Prometheus(上)
Prometheus 支持四种指标:Counter、Gauge、Histogram、Summary。rust-prometheus 库目前还只实现了前三种。TiKV 大部分指标都是 Counter 和 Histogram,少部分是 Gauge。
PingCAP
2019/03/11
1.2K0
Prometheus 常用 PromQL 语句
PromQL 是 Prometheus 提供的一个函数式的表达式语言,可以使用户实时地查找和聚合时间序列数据。表达式计算结果可以在图表中展示,也可以在 Prometheus表达式浏览器中以表格形式展示,或者作为数据源,以 HTTP API 的方式提供给外部系统使用。PromQL 虽然以 QL 结尾,但是它不是类似 SQL 的语言,因为在时间序列上执行计算类型时,SQL 语言相对缺乏表达能力。而 PromQL 语言表达能力非常丰富,可以使用标签进行任意聚合,还可以使用标签将不同的标签连接到一起进行算术运算操作。内置了时间和数学等很多函数可以使用。
我是阳明
2020/07/24
11.8K0
Prometheus 常用 PromQL 语句
Prometheus 入门
Prometheus 是一套开源的系统监控报警框架。它启发于 Google 的 borgmon 监控系统,由工作在 SoundCloud 的 google 前员工在 2012 年创建,作为社区开源项目进行开发,并于 2015 年正式发布。
程序员果果
2019/07/05
1.3K0
Prometheus 入门
Prometheus 监控体系
从这个架构图,也可以看出 Prometheus 的主要模块包含, Server, Exporters, Pushgateway, PromQL, Alertmanager, WebUI 等。
BUG弄潮儿
2021/07/22
9700
相关推荐
PromQL的概念介绍
更多 >
LV.0
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验