本文大纲:

• prometheus metrics的概念
• k/v的数据形式
• prometheus exporter的使⽤(pull形式采集数据)
• prometheus pushgateway的⼊门介绍(push形式采集数据)

1)prometheus metrics的概念
promethes监控中对于采集过来的数据统⼀称为metrics数据
当我们需要为某个系统某个服务做监控、做统计,就需要⽤到Metrics。

metrics是⼀种对采样数据的总称(metrics 并不代表某⼀种具体的数据格式 是⼀种对于度量计算单位的抽象 )

咱们来介绍⼀下 metrics 的⼏种主要的类型
Gauges
最简单的度量指标,只有⼀个简单的返回值,或者叫瞬时状态,例如,我们想衡量⼀个待处理队列中任务的个数、
⽤更简单的⽅式举个例⼦
例如 : 如果我要监控硬盘容量或者内存的使⽤量,那么就应该使⽤Gauges的metrics格式来度量
因为硬盘的容量或者内存的使⽤量是随着时间的推移不断的瞬时没有规则变化的
这种变化没有规律,当前是多少,采集回来的就是多少 5:00 21%。5:01 25% , 5:02 17%
既不能肯定是 ⼀只持续增⻓ 也不能肯定是⼀直降低
是多少 就是多少 这种就是Gauges使⽤类型的代表
如图所示 CPU的上下浮动就是采集使⽤Gauge形式的 metrics数据 没有规律 是多少就得到多少然后显示出来 

Counters 类型metris
Counter就是计数器,从数据量0开始累积计算 在理想状态下只能是永远的增⻓不会降低
Counter => 数字 +++ 2:00 => 0 prometheus
举个例⼦来说
⽐如对⽤户访问量的采样数据
我们的产品被⽤户访问⼀次就是1 过了10分钟后 积累到 100
过⼀天后 积累到 20000
⼀周后 积累到 100000-150000
如下图展示的Counter数据 是从0开始⼀直不断的积累,累加下去的 所以理想状态下 不可能出现任何降低的状况
最多只可能是 ⼀直保持不变(例如 ⽤户不再访问了,那么当前累积的总访问量 会以⼀条水平线的状态保持下去 直到 再被访问)

如下图展示的 就是⼀个counter类型的metrics数据采集。 采集的是 ⽤户的访问累积量

Histograms
Histogram统计数据的分布情况。⽐如最⼩值,最⼤值,中间值,还有中位数,75百分位, 90百分位, 95百分位, 98百分位, 99百分位, 和 99.9百分位的值(percentiles)。
这是⼀种特殊的 metrics数据类型 , 代表的是⼀种近似的百分⽐估算数值
⽐如我们在企业⼯作中 经常接触这种数据
Http_response_time HTTP响应时间
代表的是 ⼀次⽤户HTTP请求 在系统传输和执⾏过程中 总共花费的时间
nginx中的 也会记录这⼀项数值 在⽇志中
那么问题来了
我们做⼀个假设
如果我们想通过监控的⽅式 抓取当天的nginx access_log ,并且想监控⽤户的访问时间
我们应该怎么做呢?
把⽇志每⾏的 http_response_time 数值统统采集下来啊 然后计算⼀下总的平均值即可
那么⼤⽶要问⼤家⼀句了 假如我们采集到 今天⼀天的访问量 是100万次
然后把这100万次的 http_response_time 全都加⼀起 然后 除以100万 最后得出来⼀个avg值
0.05秒 = 50毫秒
这个数据的意义⼤么?
假如 今天中午1:00的时候 发⽣了⼀次线上故障 系统整体的访问变得⾮常缓慢 ⼤部分的⽤户
请求时间都达到了 0.5~1秒作⽤
但是这⼀段时间 只持续了5分钟, 总的⼀天的平均值并不能表现得出来 我们如何在1:00-
1:05的时候 实现报警呢?
在举个例⼦:
就算我们⼀天下来 线上没有发⽣故障 ⼤部分⽤户的响应时间 都在 0.05秒(通过 总时间/总
次数得出)
但是我们不要忘了 任何系统中 都⼀定存在 慢请求 就是有⼀少部分的⽤户 请求时间会⽐总
的平均值⼤很多 甚⾄接近 5秒 10秒的也有
(这种情况很普遍 因为各种因素 可能是软件本⾝的bug 也可能是系统的原因 更有可能是少
部分⽤户的使⽤途径中出现了问题)
那么我们的监控需要 发现和报警 这种少部分的特殊状况,⽤总平均能获得吗?
如果采⽤总平均的⽅式,那不管发⽣什么特殊情况,因为⼤部分的⽤户响应都是正常的 你
永远也发现不了少部分的问题
所以 Histogram的metrics类型 在这种时候就派上⽤场了
通过histogram类型(prometheus中 其实提供了⼀个 基于histogram算法的 函数 可以直接使
⽤)
可以分别统计出 全部⽤户的响应时间中
~=0.05秒的 量有多少 0 ~ 0.05秒的有多少, > 2秒的有多少 >10秒的有多少 => 1%
我们就可以很清晰的看到 当前我们的系统中 处于基本正常状态的有多少百分⽐的⽤户(或
者是请求)
多少处于速度极快的⽤户, 多少处于慢请求或者有问题的请求
metrics的类型其实还有另外的类型
但是在我们⼤⽶运维的课程中 我们最主要使⽤的 就是 counter ganga 和 histogram

2) k/v的数据形式
prometheus 的数据类型就是依赖于这种 metris的类型来计算的
⽽对于采集回来的数据类型再往细了说必须要以⼀种具体的数据格式供我们查看和使⽤
那么我们来看⼀下⼀个exporter 给我们采集来的 服务器上的k/v形式 metrics数据
当⼀个exporter(node_exporter) 被安装和运⾏在 被监控的服务器上后
使⽤简单的 curl命令 就可以看到 exporer帮我们采集到 metrics数据的样⼦ , 以 k / v 的形式展现和保存
curl localhost:9100/metrics

如上图所⽰ curl之后的结果输出
prometheus_server
带# 的⾏ 是注释⾏ ⽤来解释下⾯这⼀项 k / v 数值 是什么东东的采样数据
⽽ 我们真正关⼼的 是这样的 数据

看到了没有 就是⽤空格分开的 KEY / Value 数据
第⼀个代表的是 当前采集的 最⼤⽂件句柄数 是 65535
第⼆个代表的是 当前采集的 被打开的⽂件句柄数是: 10
这样就⾮常好理解了
另外 我们在看下这⾥ 

第⼆⾏的 # 告诉我们了 这⼀项数据的metrics类型 属于gauge
因为很简单, ⽂件句柄数的使⽤ 是没有规律的瞬时采样数据 当前是多少就是多少

3) exporter的使⽤
官⽹提供了丰富的 成型 exportrs插件可以使⽤
举⼏个例⼦


下载⾸页 其实就已经提供了 很多 很常⽤的 exporters
这些exporters 分别使⽤不同的开发语⾔开发,有 go 有 Java 有python 有ruby 等等
我们不关⼼社区组织 ⽤什么语⾔做的开发
我们只要关⼼ 如何下载和正确安装使⽤ 即可
⼤多数exporters 下载之后,就提供了启动的命令 ⼀般直接运⾏ 带上⼀定的参数就可以了
⽐如 最常⽤的 node_exporter =》 这个exporter⾮常强⼤,⼏乎可以把 Linux系统中 和系统⾃
⾝相关的监控数据 全抓出来了(很多参数 说真的 都没听说过 ⽐你想象的 学过的 多的多)
这⾥只给⼤家⼀个截图 展⽰node_exporter⼀部分的 ⽀持的监控数据采集


每⼀项 其实还有N多的⼦项, 该有的数据都有了,不该有的 不重要的 基本也有了 应有尽有
咱们还需要 ⾃⼰开发采集exporter吗? 其实不怎么需要了 直接⽤就好了

4) pushgateway 的概念介绍
之前说的 exporter 是⾸先安装在被监控服务器上运⾏在后台
然后⾃动采集系统数据 , 本⾝又是⼀个 HTTP_server 可以被prometheus服务器定时去HTTP GET取得数据

属于pull的形式
如果把这个过程反过来
push的形式是把pushgateway安装在客户端或者服务端(其实装哪⾥都⽆俗谓)
pushgateway本⾝也是⼀个http服务器
运维通过写⾃⼰的脚本程序抓⾃⼰想要的监控数据然后推送到 pushgateway(HTTP) 再由pushgateway推送到 prometheus服务端

是⼀个反过来的被动模式
为什么已经有了那么强⼤的 pull 形式的node_exporter采集还需要⼀个pushgateway的形式呢?

其实对这个问题的回答是:
• exporter虽然采集类型已经很丰富了,但是我们依然需要很多⾃制的监控数据⾮规则化的⾃定制的
• exporter 由于数据类型采集量⼤,其实很多数据或者说⼤部分数据其实我们监控中真的⽤不到,⽤pushgateway是定义⼀项数据就采集着⼀种节省资源
• ⼀个新的⾃定义的pushgateway脚本开发远远⽐开发⼀个全新的exporter 简单快速的多的多的多! (exporter的开发需要使⽤真正的编程语⾔ ,shell这种快速脚本是不
⾏的⽽且需要了解很多 prometheus⾃定的编程格式才能开始制作⼯作量很⼤)
• exporter虽然已经很丰富了,但是依然有很多的我们需要的采集形式, exporter⽆法提供,或者说 现有的expoter还不⽀持,但是如果使⽤pushgateway的形式 就可以任意灵活,想做什么都可以做到⽽且极快

最后 ⽤⼀张图 来⽴刻这两种不同的 采集形式


Prometheus监控数据格式学习的更多相关文章

  1. 使用docker方式构建prometheus监控的学习

    一.背景:近期学习部署prometheus监控系统,经研究发现prometheus提供docker运行模式.根据我的经验,能够使用docker模式构建系统一定多快好省. 二.环境: 1.centos7 ...

  2. Prometheus 监控领域最锋利的“瑞士军刀”

    原文:https://mp.weixin.qq.com/s/Cujn6_4w8ZcXCOWpoAStvQ 一.Kubernetes 容器监控的标配—Prometheus 1.简介 Prometheus ...

  3. Prometheus监控学习笔记之教程推荐

    最近学习K8S和基于容器的监控,发现了如下的教程质量不错,记录下来以备参考 1. K8S最佳实战(包括了K8S的Prometheus监控和EFK日志搜集) https://jimmysong.io/k ...

  4. Prometheus监控学习记录

    官方文档 Prometheus基础文档 从零开始:Prometheus 进阶之路:Prometheus —— 技巧篇 进阶之路:Prometheus —— 理解篇 prometheus的数据类型介绍 ...

  5. Prometheus监控学习笔记之prometheus的federation机制

    0x00 概述 有时候对于一个公司,k8s集群或是所谓的caas只是整个技术体系的一部分,往往这个时候监控系统不仅仅要k8s集群以及k8s中部署的应用,而且要监控传统部署的项目.也就是说整个监控系统不 ...

  6. Prometheus监控学习笔记之Prometheus不完全避坑指南

    0x00 概述 Prometheus 是一个开源监控系统,它本身已经成为了云原生中指标监控的事实标准,几乎所有 k8s 的核心组件以及其它云原生系统都以 Prometheus 的指标格式输出自己的运行 ...

  7. Prometheus监控学习笔记之Prometheus监控简介

    0x00 Prometheus容器监控解决方案 Prometheus(普罗米修斯)是一个开源系统监控和警报工具,最初是在SoundCloud建立的.它是一个独立的开放源码项目,并且独立于任何公司.不同 ...

  8. Prometheus监控学习笔记之Prometheus查询无数据或者Grafana不显示数据的诡异问题

    0x00 概述 Prometheus和Grafana部署完成后,网络正常,配置文件正常,抓取agent运行正常,使用curl命令获取监控端口数据正常,甚至Prometheus内的targets列表内都 ...

  9. Prometheus监控学习笔记之容器监控Grafana模块

    0x00 概述 Grafana 是一个开源的,可以用于大规模指标数据的可视化项目,甚至还能对指标进行报警.基于友好的 Apache License 2.0 开源协议,目前是prometheus监控展示 ...

随机推荐

  1. leetcode(57)- Implement strStr()

    题目: Implement strStr(). Returns the index of the first occurrence of needle in haystack, or -1 if ne ...

  2. Xcode使用心得03:打开僵尸(Zombie)模式

    如果打开了ARC或垃圾回收模式,在程序中发消息给以及重新分配的对象,将会引起程序崩溃.这时定位崩溃原因将非常困难,因为出问题的对象已经重新分配了.一个解决的方法就是要求Xcode将对象设置为" ...

  3. ruby中printf "%x"%-4为何会打印开头..

    先看一下ruby中printf "%x" % -4的返回结果: irb(main):134:0> printf "%x\n" % -4 ..fc 前面的. ...

  4. 图片验证码demo示例

    1.首先我们需要一个生成图片验证码图片的一个工具类(下方会有代码示例) 代码如下: package com.util; import java.awt.BasicStroke; import java ...

  5. CentOS 7.4上安装mysql 8.0

    我的CentOS版本通过从cat /etc/centos-release查看得知 CentOS Linux release 7.4.1708 (Core) 因此需要yum删除mariadb,然后安装m ...

  6. cookie的增删改查函数

    function setCookie(name,value,expires,path,domain){ //设置过期时间 var oDate = new Date(); oDate.setDate(o ...

  7. IT轮子系列(七)——winform 版本更新组件

    前言 最近做了一个winform客户端的项目,里面有一个功能是版本更新.以前也有写过,可忘了具体的逻辑.网上也有介绍用发布模式进行更新的,自己尝试后没有成功,提示“vba证书无效”.于是,费了些时间搜 ...

  8. palindrome number(回文数)

    Determine whether an integer is a palindrome. Do this without extra space. Some hints: Could negativ ...

  9. 我的sql数据库存储过程分页- -

    以前用到数据库存储过程分页的时候都是用 not in 但是最近工作的时候,随着数据库记录的不断增大,发现not in的效率 真的不行 虽然都设置了索引,但是当记录达到10w的时候就发现不行了,都是需要 ...

  10. oracle面试题目总结

    阿里巴巴公司DBA笔试题  http://searchdatabase.techtarget.com.cn/tips/2/2535002.shtml   注:以下题目,可根据自己情况挑选题目作答,不必 ...