当前位置:Gxlcms > 数据库问题 > 什么是 TSDBm,用来处理时间序列数据的软件

什么是 TSDBm,用来处理时间序列数据的软件

时间:2021-07-01 10:21:17 帮助过:26人阅读

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

  1. <span class="hljs-attribute">global:
  2. <span class="hljs-attribute">scrape_interval: <span class="hljs-number">15s # 默认抓取间隔, <span class="hljs-number">15秒向目标抓取一次数据
  3. # 和外部系统交互时每一条从本机获取的数据都会打上如下标签
  4. <span class="hljs-attribute">external_labels:
  5. <span class="hljs-attribute">monitor: <span class="hljs-string">‘codelab-monitor‘
  6. # 这里是抓去 promethues 自身的配置
  7. <span class="hljs-attribute">scrape_configs:
  8. # job name 会以标签<span class="hljs-built_in">`job=<job_name>`添加到每一条由该配置抓去到的时序数据
  9. - <span class="hljs-attribute">job_name: <span class="hljs-string">‘prometheus‘
  10. # 覆盖默认抓取间隔
  11. <span class="hljs-attribute">scrape_interval: <span class="hljs-number">5s
  12. <span class="hljs-attribute">static_configs:
  13. - <span class="hljs-attribute">targets: [<span class="hljs-string">‘localhost:9090‘]
  14. # 添加两个线上抓取实例
  15. - <span class="hljs-attribute">job_name: <span class="hljs-string">‘ceph‘
  16. <span class="hljs-attribute">scrape_interval: <span class="hljs-number">5s
  17. <span class="hljs-attribute">static_configs:
  18. - <span class="hljs-attribute">targets: [<span class="hljs-string">‘k0140v:9128‘]
  19. <span class="hljs-attribute">labels:
  20. <span class="hljs-attribute">group: <span class="hljs-string">‘shbt‘ # 会对该配置生成的时序数据添加一条 <span class="hljs-built_in">`group=<group_name>`的标签
  21. - <span class="hljs-attribute">targets: [<span class="hljs-string">‘ceph01:9128‘]
  22. <span class="hljs-attribute">labels:
  23. <span class="hljs-attribute">group: <span class="hljs-string">‘bjyt‘
  24. - <span class="hljs-attribute">job_name: <span class="hljs-string">‘openstack‘
  25. <span class="hljs-attribute">scrape_interval: <span class="hljs-number">30s
  26. <span class="hljs-attribute">static_configs:
  27. #target 可以使用 <span class="hljs-string">"," 分割,添加多个目标
  28. - <span class="hljs-attribute">targets: [<span class="hljs-string">‘openstack185:9128‘, <span class="hljs-string">‘openstack194:9128‘]
  29. <span class="hljs-attribute">labels:
  30. <span class="hljs-attribute">group: <span class="hljs-string">"bjyt"</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>

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

  1. ./prometheus -<span class="hljs-keyword">config<span class="hljs-variable">.file=prometheus<span class="hljs-variable">.yml</span></span></span>

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

监控数据

数据样本

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

  • 一个 float64 的值
  • 一个毫秒精度的时间戳

标识

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

  1. <span class="hljs-tag"><<span class="hljs-name">metric <span class="hljs-attr">name>{<span class="hljs-tag"><<span class="hljs-name">label <span class="hljs-attr">name>=<span class="hljs-tag"><<span class="hljs-name">label <span class="hljs-attr">value>, ...}</span></span></span></span></span></span></span></span></span>

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

  1. api_http_requests_total{method=<span class="hljs-string">"POST", handler=<span class="hljs-string">"/messages"}</span></span>

这种标识方式与 OpenTSDB 相同.

监控结果

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

  1. ceph_osd_avail_bytes{osd=<span class="hljs-string">"osd.0"} <span class="hljs-number">3.205084244e+<span class="hljs-number">12
  2. ceph_osd_avail_bytes{osd=<span class="hljs-string">"osd.1"} <span class="hljs-number">2.892447332e+<span class="hljs-number">12
  3. ceph_osd_avail_bytes{osd=<span class="hljs-string">"osd.10"} <span class="hljs-number">3.21853432e+<span class="hljs-number">12
  4. ceph_osd_avail_bytes{osd=<span class="hljs-string">"osd.100"} <span class="hljs-number">3.062200424e+<span class="hljs-number">12
  5. ceph_osd_avail_bytes{osd=<span class="hljs-string">"osd.101"} <span class="hljs-number">3.126474844e+<span class="hljs-number">12
  6. ceph_osd_avail_bytes{osd=<span class="hljs-string">"osd.102"} <span class="hljs-number">3.079620512e+<span class="hljs-number">12
  7. ceph_pool_available_bytes{pool=<span class="hljs-string">"backups"} <span class="hljs-number">1.30342001987587e+<span class="hljs-number">14
  8. ceph_pool_available_bytes{pool=<span class="hljs-string">"images"} <span class="hljs-number">1.30342001987587e+<span class="hljs-number">14
  9. ceph_pool_available_bytes{pool=<span class="hljs-string">"rbd"} <span class="hljs-number">1.30342001987587e+<span class="hljs-number">14
  10. ceph_pool_available_bytes{pool=<span class="hljs-string">"rgw-test"} <span class="hljs-number">1.30342001987587e+<span class="hljs-number">14
  11. ceph_pool_available_bytes{pool=<span class="hljs-string">"test_crush"} <span class="hljs-number">1.30342001987587e+<span class="hljs-number">14
  12. ceph_pool_available_bytes{pool=<span class="hljs-string">"vms"} <span class="hljs-number">1.30342001987587e+<span class="hljs-number">14
  13. ceph_pool_available_bytes{pool=<span class="hljs-string">"vmscache"} <span class="hljs-number">2.301547932444e+<span class="hljs-number">12</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>

###监控数据类型

  • Counter:计数器是一个累加的度量类型,记录单调递增的数据.一般用于记录服务的请求数,任务完成数,错误发生数.
  • Gauge:量表用于记录可任意变大变小的数值,如cpu idle,内存使用率,磁盘IO等。
  • Historgram:直方图用于度量数据中值的分布情况,如请求时间或响应大小。
  • Summary: 用于度量数据累价值或总数.

自带 dashboard及查询语句

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

技术图片

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

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

技术图片

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

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

  1. ceph_pool_read_total{group=<span class="hljs-string">"bjyt"}</span>

技术图片

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

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

例如

  1. ceph_pool_read_total{pool=~<span class="hljs-string">"vms.*"}</span>

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

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

  1. irate(<span class="hljs-name">ceph_pool_read_total{pool=~<span class="hljs-string">"vms"}[<span class="hljs-number">1m])</span></span></span>

技术图片

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

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

  • irate(): 计算的是给定时间窗口内的每秒瞬时增加速率.
  • rate(): 计算的是给定时间窗口内的每秒的平均值.

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

  1. rate(<span class="hljs-name">ceph_pool_read_total{pool=~<span class="hljs-string">"vms"}[<span class="hljs-number">1m])</span></span></span>

技术图片

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

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

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

技术图片

先简单介绍这么多.

什么是 TSDBm,用来处理时间序列数据的软件

标签:增加   lis   时间序列   分时   包含   adt   友好   获取   too   

人气教程排行