Prometheus查询表达式

Prometheus Querying

查询

prometheus提供了功能性表达式语言,可让用户对于时间序列的数据进行选择和聚合。通过表达式查询的结果可以绘制为曲线图,也可以在prometheus提供的表达式浏览器中显示为表格,也可以通过外部系统以HTTP API来调用使用。

expression language data types

prometheus 表达式语言中,有四种类型:

  • 即时向量(instant vector) 包含每个时间序列的单个样本的一组时间序列,共享相同的时间戳。
  • 范围向量(Range vector) 包含每个时间序列随时间变化的数据点的一组时间序列。
  • 标量(Scalar) 一个简单的数字浮点值
  • 字符串(String) 一个简单的字符串值(目前未被使用)

根据使用情况(例如绘图或者显示表达式的输出),这些类型中只有一些是由用户指定的表达式产生的结果而有效的,例如,即时向量表达式是可以绘图的唯一类型。

时间序列选择器

  • 即时向量选择器

    即时向量选择器允许选择一组时间序列,或者某个给定的时间戳的样本数据。下面这个例子选择了具有http_requests_total的时间序列:

      http_requests_total
    

    你可以通过附加一组标签,并用{}括起来,来进一步筛选这些时间序列。下面这个例子只选择有http_requests_total名称的、有prometheus工作标签的、有canary组标签的时间序列:

      http_requests_total{job="prometheus",group="canary"}
    

    另外,也可以也可以将标签值反向匹配,或者对正则表达式匹配标签值。下面列举匹配操作符:

      =:选择正好相等的字符串标签
      !=:选择不相等的字符串标签
      =~:选择匹配正则表达式的标签(或子标签)
      !=:选择不匹配正则表达式的标签(或子标签)
    

    例如,选择staging、testing、development环境下的,GET之外的HTTP方法的http_requests_total的时间序列:

      http_requests_total{environment=~"staging|testing|development",method!="GET"}
    
  • 范围向量选择器

    范围向量表达式正如即时向量表达式一样运行,前者返回从当前时刻的时间序列回来。语法是,在一个向量表达式之后添加[]来表示时间范围,持续时间用数字表示,后接下面单元之一:

    • s:seconds
    • m:minutes
    • h:hours
    • d:days
    • w:weeks
    • y:years

    在下面这个例子中,我们选择此刻开始5分钟内的所有记录,metric名称为http_requests_total、作业标签为prometheus的时间序列的所有值:

      http_requests_total{job="prometheus"}[5m]
    
  • 偏移修饰符(offset modifier)
    偏移修饰符允许更改查询中单个即时向量和范围向量的时间偏移量,例如,以下表达式返回相对于当前查询时间5分钟前的http_requests_total值:

      http_requests_total offset 5m
    

    Note:请注意,偏移量修饰符始终需要跟随选择器,即以下是正确的:

      sum(http_requests_total{method="GET"} offset 5m) // GOOD.
    

    下面是错误的:

      sum(http_requests_total{method="GET"}) offset 5m // INVALID.
    

    如下是范围向量的相同样本。这返回http_requests_total在一周前5分钟内的速率:

      rate(http_requests_total[5m] offset 1w)
    
  • 操作符

    Prometheus支持多种二元和聚合的操作符请查看这里

  • 函数
    Prometheus支持多种函数,来对数据进行操作请查看这里

怎么使用prometheus监控容器?

prometheus监控不同的目标服务需要实现不同的exporter插件,早期的时候,官方出了container-exporter项目,但是现在项目已经停止。推荐使用谷歌的cAdvisor项目作为prometheus的exporter。cAdvisor作为一个监控单机容器的项目,数据较为全面,但是也有很大的问题,例如io等数据没有等等。结合prometheus后就能在整个集群监控查询容器。举个例子,你有一个项目有3个容器分布在三台机器,你怎么监控整个项目的流量,内存量,负载量的实时数据。这就是prometheus的多维度查询解决的问题,数据从3台机器的cadvisor得到每个容器的数据,它的多维度查询语法就能让你得到你想要的数据。

这里假设你有10台机器部署了容器需要监控,你在10台机器上分别部署cAdvisor容器

sudo docker run \
  --volume=/:/rootfs:ro \
  --volume=/var/run:/var/run:rw \
  --volume=/sys:/sys:ro \
  --volume=/var/lib/docker/:/var/lib/docker:ro \
  --publish=8080:8080 \
  --detach=true \
  --name=cadvisor \
  google/cadvisor:latest

找一台机器部署prometheus服务,这里依然使用容器部署:

docker run \
    -p 9090:9090 \
    --log-driver none \
    -v /hdd1/prometheus/etc/:/etc/prometheus/ \
    -v /hdd1/prometheus/data/:/prometheus/ \
    -v /etc/localtime:/etc/localtime \
    --name prometheus \
    prom/prometheus

创建/hdd1/prometheus/etc/prometheus.yml配置文件

    my global config
    global:
      scrape_interval:     15s # By default, scrape targets every 15 seconds.
      evaluation_interval: 15s # By default, scrape targets every 15 seconds.
      # scrape_timeout is set to the global default (10s).
      # Attach these labels to any time series or alerts when communicating with
      # external systems (federation, remote storage, Alertmanager).
      external_labels:
          monitor: 'container-monitor'
    # Load and evaluate rules in this file every 'evaluation_interval' seconds.
    rule_files:
       - "/etc/prometheus/rules/common.rules"
    # A scrape configuration containing exactly one endpoint to scrape:
    # Here it's Prometheus itself.
    scrape_configs:
      # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
      - job_name: 'container'
        static_configs:
        - targets: ['10.12.1.129:8080','10.12.1.130:8080','10.50.1.92:8080','10.50.1.93:8080','10.50.1.119:8080']

配置文件中 -targets中的端点填写你的实际cadvisor所在的ip和暴露的端口.正确启动后访问ip:9090就能查询数据了哦。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,100评论 18 139
  • Prometheus Prometheus是一套开源的监控&报警&时间序列数据库的组合,起始是由SoundClou...
    YichenWong阅读 19,220评论 0 6
  • Prometheus 是什么?Prometheus是一套开源的监控&报警&时间序列数据库的组合,起始是由Sound...
    Zero___阅读 2,511评论 0 1
  • 架构 Prometheus 是一个开源的监控框架,它通过不同的组件完成数据的采集,数据的存储,告警,其中Prome...
    猴子精h阅读 5,061评论 0 5
  • 对于想要较快减轻体重者,三餐中可以用燕窝代餐棒取代3餐。一般体重者可代用早晚餐,非常合适,一个月可减重5~10斤,...
    zyz_3398阅读 2,731评论 0 1