β

Prometheus 初探

奇虎360-addops 129 阅读
 

首先-什么是 TSDB (Time Series Database):

我们可以简单的理解为.一个优化后用来处理时间序列数据的软件,并且数据中的数组是由时间进行索引的.

时间序列数据库的特点:

常见的时间序列数据库:

部分常见 TSDB 官网如下:

TSDB 官网
influxDB https://influxdata.com/
RRDtool http://oss.oetiker.ch/rrdtool/
Graphite http://graphite.readthedocs.org/en/latest/
OpenTSDB http://opentsdb.net/
Kdb+ http://kx.com/
Druid http://druid.io/
KairosDB http://kairosdb.github.io/
Prometheus https://prometheus.io/

关于 Prometheus

Prometheus是什么?

Prometheus 是由 SoundCloud 开发的开源监控报警系统和时序列数据库(TSDB).自2012年起,许多公司及组织已经采用 Prometheus,并且该项目有着非常活跃的开发者和用户社区.现在已经成为一个独立的开源项目核,并且保持独立于任何公司,Prometheus 在2016加入 CNCF ( Cloud Native Computing Foundation ), 作为在 kubernetes 之后的第二个由基金会主持的项目.

prometheus 的特点

和其他监控系统相比,Prometheus的特点包括:

prometheus 相关组件

Prometheus生态系统由多个组件组成,其中许多是可选的:

promethues 的各个组件基本都是用 golang 编写,对编译和部署十分友好.并且没有特殊依赖.基本都是独立工作.

prometheus 的架构

https://prometheus.io/assets/architecture.svg

部署及配置

promethues 官方给出了多重部署方案,包括但不限于 docker 容器,ansible,chef,saltstack 等.

其实官方已经给了预编译的二进制文件.如果没有修改代码的特殊需求,直接拿到二进制文件进行部署也是可以的.

下载地址: https://prometheus.io/download/

部署方式十分简单

tar xvfz prometheus-*.tar.gz
cd prometheus-*

在 prometheus 目录下有一个名为 prometheus.yml 的主配置文件.其中包含大多数标准配置及 prometheus 的自检控配置,配置文件如下.

global:
  scrape_interval:     15s # 默认抓取间隔, 15秒向目标抓取一次数据

    # 和外部系统交互时每一条从本机获取的数据都会打上如下标签
  external_labels:
    monitor: 'codelab-monitor'

# 这里是抓去 promethues 自身的配置
scrape_configs:
  # job name 会以标签`job=<job_name>`添加到每一条由该配置抓去到的时序数据
  - job_name: 'prometheus'

    # 覆盖默认抓取间隔
    scrape_interval: 5s

    static_configs:
      - targets: ['localhost:9090']

  # 添加两个线上抓取实例
  - job_name: 'ceph'
    scrape_interval: 5s

    static_configs:
      - targets: ['k0140v:9128']
        labels:
          group: 'shbt' # 会对该配置生成的时序数据添加一条 `group=<group_name>`的标签

      - targets: ['ceph01:9128']
        labels:
          group: 'bjyt'


  - job_name: 'openstack'
    scrape_interval: 30s
    static_configs:
      #target 可以使用 "," 分割,添加多个目标
      - targets: ['openstack185:9128', 'openstack194:9128']
        labels:
          group: "bjyt"

然后我们通过该配置文件启动 promethues

./prometheus -config.file=prometheus.yml

prometheus 本身是自带 exporter 的,我们通过请求 http://localhost:9090/metrics 可以查看从 exporter 中能具体抓到哪些数据

监控数据

数据样本

和大多数 TSDB 类似,promethus 支持的数据样本非常简单:

标识

标识监控数据的方式十分简单,给一个监控项名称和一些标签,时序数据经常使用这种标识方法

<metric name>{<label name>=<label value>, ...}

举例来说, 一个时间序列的监控名称为 api_http_requests_total 标签为 method="POST" handler="/message" ,那么监控数据的标识如下:

api_http_requests_total{method="POST", handler="/messages"}

这种标识方式与 OpenTSDB 相同.

监控结果

我们实际收集到的数据大多如下:

ceph_osd_avail_bytes{osd="osd.0"} 3.205084244e+12
ceph_osd_avail_bytes{osd="osd.1"} 2.892447332e+12
ceph_osd_avail_bytes{osd="osd.10"} 3.21853432e+12
ceph_osd_avail_bytes{osd="osd.100"} 3.062200424e+12
ceph_osd_avail_bytes{osd="osd.101"} 3.126474844e+12
ceph_osd_avail_bytes{osd="osd.102"} 3.079620512e+12
ceph_pool_available_bytes{pool="backups"} 1.30342001987587e+14
ceph_pool_available_bytes{pool="images"} 1.30342001987587e+14
ceph_pool_available_bytes{pool="rbd"} 1.30342001987587e+14
ceph_pool_available_bytes{pool="rgw-test"} 1.30342001987587e+14
ceph_pool_available_bytes{pool="test_crush"} 1.30342001987587e+14
ceph_pool_available_bytes{pool="vms"} 1.30342001987587e+14
ceph_pool_available_bytes{pool="vmscache"} 2.301547932444e+12

###监控数据类型

自带 dashboard及查询语句

prometheus 自带一个比较简单的dashboard 可以查看表达式搜索结果,报警配置,prometheus 配置,exporter 状态等

alt

我们以一些真实数据为例看一下表达式及查询结果.

1. 我们可直接查询监控项ceph_pool_read_total并绘图如下

alt

2. 我们也可以在查询语句中通过添加一组标签,并用 {} 阔起来,来细化查询.

例如我们只想查看 bjyt 这个 group 各个 pool 全局读取的数据.

ceph_pool_read_total{group="bjyt"}

alt

另外,也可以也可以将标签值反向匹配,或者对正则表达式匹配标签值:

例如

ceph_pool_read_total{pool=~"vms.*"}

会如上图但只查询出 pool 名为 vms 及 vmscahe 的数据.

3. 如果我们以时间窗口来作为筛选纬度计算各个 pool 读IO的真实速率,可以用以下语句查询

irate(ceph_pool_read_total{pool=~"vms"}[1m])

alt

这里的 irate() 为 promethues 的查询函数.与之对应的是rate().

这两个函数在 promethues 中经常用来计算增量或者速率,在使用时需要指定时间范围如[1m]

如果还是以前面的监控项进行查询但是以 rate() 计算速率的话,绘制的结果如下:

rate(ceph_pool_read_total{pool=~"vms"}[1m])

alt

promethues 支持的函数还有很多,具体的函数说明可详见官方文档 Functions

如果在线上使用的话,可以将 Prometheus 和 grafana 相结合.可以进行十分丰富的监控结果展示.

比如 ceph 单机房集群的监控可以是这样的:

alt

先简单介绍这么多.

后面会通过几篇文章详细介绍一些常用的查询方法, exporter的编写及使用方法,以及 promethues 如何结合 grafana使用和promethues 是如何进行报警的.


参考文献 :

 
作者:奇虎360-addops
应用运维|运维开发|opsdev|addops|虚拟化|openstack|docker|容器化|k8s|智能运维
原文地址:Prometheus 初探, 感谢原作者分享。

发表评论