一个监控及告警的系统,内含一个TSDB(时序数据库)。在我而言是一个数采程序

重要成员分三块

  • exploter:实际是外部接口,让各个程序实现这个接口,供普罗米修斯定时从此接口中取数
  • alert:告警模块
  • prometheus:实际上是数采模块+存储模块,但是它的存储不是持久化的

普罗米修斯的数据是一个值时间序列,例如

website_request_count{method="GET",path="/home/index",query="id=2"} 0.001

website_request_count是一个监控指标,花括号中的每个值是label标签,最后的是这次监控的值,还有一个未出现的量就是时间戳。

与熟悉的数据库相比起来,一个监控指标好比一个表,时间戳,值,与每个lebel的名称就是列。每一组label组成一个序列。一旦某个label不一致(包含label的数量,label的名称和值)都会被视为不同的序列

普罗米修斯的数据类型分四种

  • count:计数器类型,只增不减
  • gauge:仪表盘类型,数值可增可减
  • Hisgram:直方图类型,按照一定区间给各个段分组统计值,每个段为一个bucket
  • summary:摘要类型,按分位数统计各个分组结果

Hisgram与summary比较相似,应用场景也类似:主要源于数据分布不均的情况下(极值delta较大或出现利群值时),平均数已经无法准确反映数据的整体情况,故需要对数据进行分组,按各个分组的统计值反应数据的整体情况。其中Hisgram是按照一定的区间来给数据分段,默认范围是{.005, .01, .025, .05, .075, .1, .25, .5, .75, 1, 2.5, 5, 7.5, 10},它只能给数据分段,并不能得出这部分数据的中位数,4分位数等,若需要则要在服务端处理,而summary则可以在客户端已得出值。两种数据类型都带有_sum与_count两个指标。

从刮擦数据的结果中可以得出此数据的数据类型

# HELP prometheus_tsdb_wal_fsync_duration_seconds Duration of WAL fsync.

# TYPE prometheus_tsdb_wal_fsync_duration_seconds summary

prometheus_tsdb_wal_fsync_duration_seconds{quantile="0.5"} 0.012352463

prometheus_tsdb_wal_fsync_duration_seconds{quantile="0.9"} 0.014458005

prometheus_tsdb_wal_fsync_duration_seconds{quantile="0.99"} 0.017316173

prometheus_tsdb_wal_fsync_duration_seconds_sum 2.888716127000002

prometheus_tsdb_wal_fsync_duration_seconds_count 216

每一组指标顶端都有两行注释,第一行是对于这个指标的描述,第二行则是指明了这个指标的数据类型

普罗米修斯的查询中输入监控指标则可以两种形式(图表和数据)展示结果,该结果会包含所有序列的值(即出现过的label和值的集合)

如果要对某些label进行筛选,则可以下面形式

up{instance="helloworld"}

此时会查出所有instance为helloworld的序列

Prometheus既然包含了一个TSDB,对这部分数据则提供了一个查询语言叫ProuQL,下面则简单提一些内置函数

sum,avg,按某个指标进行求和运算,如sum(up),avg(up);

有时候会出现类似这样的写法 sum by(job) (up)或者sum with out(job) (up) 这样的写法,与实际上都是类似于SQL的grouop by,by则针对job 这个label的值分组统计up的值,而with out则除了job lebel外所有label都拿来作分组条件。

up[5m]写法 方括号中代表5分钟,可以是1分钟1m或者1小时1h。此写法会得出一个向量集合,所谓向量实际是一个结果中带了两个值,本身指标的值和时间戳,中间以@作为分隔,这样的写法通常结合rate,irate和delta函数。

rate(up[5m]),求up指标5m钟内每两个量变化率的平均值,是一个平均变化率,假设一组数,a1@t1,a2@t2,a3@t3,……an@tn

rate=( ∑ (a2-a1)/(t2-t1)+(a3-a2)/(t3-t2))/n

irate(up[5m])则是求5m这批数据中,相邻最近的两个值之间的变化率,是一个瞬时变化率

delta(up[5m])则是求这5m这批数据中,收尾两个值的相差值

up{job=~"^123$"}此处job表示是按照正则匹配(出现了“=~”),而后面则跟着对应的正则表达式,^和$仅仅是正则中的开始与结束符号而已。

prometheus的配置采用yaml

scrape_config主要是配置各个刮擦任务,每个刮擦任务为一个job,每个job的可以有独立的刮擦周期,并有不同的刮擦类型,可以有普通的static_configs,还有其他针对不同exporter的配置,如azure_sd_config,kubernetes_sd_config等,此处要提的是relable这个配置项,relable的配置项的内容可以影响着跨擦结果,里面的label不属于刮擦数据的内容,但是它有可能会被增加到刮擦的结果中而存到库里面去。

每个relable配置项有以下几个属性

action:代表relable的行为,包含

replace:如果值匹配了regex,则把source_labels替换,替换的label值看replacement而定,替换的label名按target_label而定;

keep:如果label名匹配了 regex的,此条数据才保留

drop:如果label名匹配了regex的,此条数据则被舍弃掉,与上面的相反

hashmad:作用未明

labelmap:一般结果需要多个label经过正则运算后拼凑组合生成新的值的会用这种,label值结果会按replacement生成;

labeldrop:与drop类似,但它舍弃的只是label而已且是拿label值与regex匹配;

labelkeep:与labeldrop相反

regex:正则表达式,默认值是(.*);

source_labels:一个数组,用于处理的各个原始label;

spearetor:默认值是 ";"

target_label:处理后新的label名

replacement:默认值是$1,replace和labelmap按这个来生成结果,后面是数字表明第几个与regex匹配的结果

接下来谈的是prometheus的服务发现,在prometheus界面中有Target与Service Discovery两个菜单,这两个菜单内容与服务发现极有关系。回顾上述关于scrape的配置内容,我们配置的只有static_config,此处一般设置一个target则往一个节点处刮擦数据。由于他是静态,而对于动态的则是基于服务发现的,凡是刮擦类型中带sd的(service-discover)均有服务发现的功能,该job中的所有节点都无需通过手动配置而加入被刮擦的集合中,如kubernetes_sd_config,按照官网介绍,根据role属性的不同设置而对k8s的不同对象进行scrape,如设成service,则scrape回来的数据包含这些label:

__meta_kubernetes_namespace

__meta_kubernetes_service_name

__meta_kubernetes_service_label_

__meta_kubernetes_service_annotation_

__meta_kubernetes_service_port_name

__meta_kubernetes_service_port_protocol

__meta_kubernetes_service_port_number

通过service discover界面看出果真存在若干个被发现的服务(一行代表一个服务),

还记得relabel中的drop action,这里一个发现了7个服务,但是被drop掉的有6个,最终被保存下来的服务的数据仅有一个序列,这个在Taget页面中得到展示,Target就是展示被筛选过后剩余的需要真正监控的服务。

prometheus杂碎的更多相关文章

  1. prometheus监控系统

    关于Prometheus Prometheus是一套开源的监控系统,它将所有信息都存储为时间序列数据:因此实现一种Profiling监控方式,实时分析系统运行的状态.执行时间.调用次数等,以找到系统的 ...

  2. Prometheus 系统监控方案 一

    最近一直在折腾时序类型的数据库,经过一段时间项目应用,觉得十分不错.而Prometheus又是刚刚推出不久的开源方案,中文资料较少,所以打算写一系列应用的实践过程分享一下. Prometheus 是什 ...

  3. Prometheus 系统监控方案 二 安装与配置

    下载Prometheus 下载最新安装包,本文说的都是在Linux x64下面内容,其它平台没尝试过,请选择合适的下载. Prometheus 主程序,主要是负责存储.抓取.聚合.查询方面. Aler ...

  4. [系统集成] 部署 mesos-exporter 和 prometheus 监控 mesos task

    前几天我在mesos平台上基于 cadvisor部署了 influxdb 和 grafana,用于监控 mesos 以及 docker app 运行信息,发现这套监控系统不太适合 mesos + do ...

  5. Docker 监控- Prometheus VS Cloud Insight

    如今,越来越多的公司开始使用 Docker 了,2 / 3 的公司在尝试了 Docker 后最终使用了它.为了能够更精确的分配每个容器能使用的资源,我们想要实时获取容器运行时使用资源的情况,怎样对 D ...

  6. 安装prometheus+grafana监控mysql redis kubernetes等

    1.prometheus安装 wget https://github.com/prometheus/prometheus/releases/download/v1.5.2/prometheus-1.5 ...

  7. Prometheus : 入门

    Prometheus 是一个开源的监控系统.支持灵活的查询语言(PromQL),采用 http 协议的 pull 模式拉取数据等特点使 Prometheus 即简单易懂又功能强大. Prometheu ...

  8. Prometheus 架构 - 每天5分钟玩转 Docker 容器技术(83)

    Prometheus 是一个非常优秀的监控工具.准确的说,应该是监控方案.Prometheus 提供了监控数据搜集.存储.处理.可视化和告警一套完整的解决方案. 让我们先来看看 Prometheus ...

  9. 剖析Prometheus的内部存储机制

    Prometheus有着非常高效的时间序列数据存储方法,每个采样数据仅仅占用3.5byte左右空间,上百万条时间序列,30秒间隔,保留60天,大概花了200多G(引用官方PPT). 接下来让我们看看他 ...

随机推荐

  1. 搭建vue脚手架---vue-cli

    vue-cli作为一款mvvm框架语言(vue)的脚手架,集成了webpack环境及主要依赖,对于项目的搭建.打包.维护管理等都非常方便快捷.我们在开发项目时尤其需要这样一个快速构建项目的工具. 以下 ...

  2. 你真的了解META-INF吗?

    你真的了解META-INF吗? 做过JAVA EE开发的工程师应该都知道在JAVA build出来的JAR或者WAR的顶层目录下有个META-INF文件夹吧,可是有多少人能够清楚说出这个文件夹到底是做 ...

  3. VirtWire 向客服发ticket

    1 首先需要登录自己的账户 2 点击网页的Open Ticket 3 选择要发送何种类型的ticket 4 写自己的问题,包括一个合适的主题,选择你发ticket是针对哪个vps(一个账户下可以ord ...

  4. 网络测试工具 - QCheck

    本片博客内容借鉴51CTO中joyssue博主文章. 网络性能不仅与交换和路由设备的性能相关,而且与线路质量也有很大关系.使用Qcheck可以测试网络性能.这是NetIQ公司开发的一款免费网络测试软件 ...

  5. Emgucv - 下载、安装、配置

    工欲善其事,必先利其器. 一.下载 Emgucv学习之前,我们先要搭建好开发环-Emgucv库.VS开发平台. (1)VS开发平台,个人觉得VS2015挺好用的,比如:自定义窗口布局.更优的代码编辑器 ...

  6. [Vijos1130][NOIP2001]数的计数 (递推)

    自己的递推一塌糊涂 考前抱佛脚 #include<bits/stdc++.h> using namespace std; ]; int main() { int n;scanf(" ...

  7. 重新看待Jar包冲突问题及解决方案

    Jar包冲突是老生常谈的问题,几乎每一个Java程序猿都不可避免地遇到过,并且也都能想到通常的原因一般是同一个Jar包由于maven传递依赖等原因被引进了多个不同的版本而导致,可采用依赖排除.依赖管理 ...

  8. Alpha冲刺——序言篇(任务与计划)

    所属课程 软件工程1916|W(福州大学) 作业要求 Alpha冲刺--序言篇 团队名称 待就业六人组 一.代码规范 详见项目在线文档:项目代码规范 二.本次冲刺任务与计划 任务 内容 时间 第一天 ...

  9. Java中的RASP实现

    RSAP RASP是Gartner公司提出的一个概念,称:程序不应该依赖于外部组件进行运行时保护,而应该自身拥有运行时环境保护机制: RASP就是运行时应用自我保护(Runtime applicati ...

  10. linux之软连接,硬连接篇

    作业四: 1) 建立/etc/passwd的软连接文件,放在/tmp目录下 [root@localhost 桌面]# ln -s /etc/passwd/a.txt /tmp/aa.txt 2) 建立 ...