Prometheus 监控体系介绍

0    36    1

Tags:

👉 本文共约6665个字,系统预计阅读时间或需26分钟。

1 概述

1.1 主要功能

  • 多维 数据模型(时序由 metric 名字和 k/v 的 labels 构成)。
  • 灵活的查询语句(PromQL)。
  • 无依赖存储,支持 local 和 remote 不同模型。
  • 采用 http 协议,使用 pull 模式,拉取数据,简单易懂。
  • 监控目标,可以采用服务发现或静态配置的方式。
  • 支持多种统计数据模型,图形化友好。

1.2 核心组件

  • Prometheus Server, 主要用于抓取数据和存储时序数据,另外还提供查询和 Alert Rule 配置管理。
  • client libraries,用于对接 Prometheus Server, 可以查询和上报数据。
  • push gateway ,用于批量,短期的监控数据的汇总节点,主要用于业务数据汇报等。
  • 各种汇报数据的 exporters ,例如汇报机器数据的 node_exporter, 汇报 MongoDB 信息的 MongoDB exporter 等等。
  • 用于告警通知管理的 alertmanager 。

1.3 基础架构

一图胜千言,先来张官方的架构图

图片

从这个架构图,也可以看出 Prometheus 的主要模块包含, Server, Exporters, Pushgateway, PromQL, Alertmanager, WebUI 等。

它大致使用逻辑是这样:

  • Prometheus server 定期从静态配置的 targets 或者服务发现的 targets 拉取数据。
  • 当新拉取的数据大于配置内存缓存区的时候,Prometheus 会将数据持久化到磁盘(如果使用 remote storage 将持久化到云端)。
  • Prometheus 可以配置 rules,然后定时查询数据,当条件触发的时候,会将 alert 推送到配置的 Alertmanager。
  • Alertmanager 收到警告的时候,可以根据配置,聚合,去重,降噪,最后发送警告。
  • 可以使用 API, Prometheus Console 或者 Grafana 查询和聚合数据。

1.4 注意

  • Prometheus 的数据是基于时序的 float64 的值,如果你的数据值有更多类型,无法满足。
  • Prometheus 不适合做审计计费,因为它的数据是按一定时间采集的,关注的更多是系统的运行瞬时状态以及趋势,即使有少量数据没有采集也能容忍,但是审计计费需要记录每个请求,并且数据长期存储,这个和 Prometheus 无法满足,可能需要采用专门的审计系统。

2 BO关注项

2.1 数据收集方式

使用 pull 模式,拉取数据。

2.2 数据格式

Prometheus 时序格式与 OpenTSDB 相似:

其中包含时序名字以及时序的标签。

2.2.1 时序 4 种类型

Prometheus 时序数据分为 Counter, Gauge, Histogram, Summary 四种类型。

2.2.1.1 Counter

Counter 表示收集的数据是按照某个趋势(增加/减少)一直变化的,我们往往用它记录服务请求总量,错误总数等。

例如 Prometheus server 中 http_requests_total, 表示 Prometheus 处理的 http 请求总数,我们可以使用 delta, 很容易得到任意区间数据的增量,这个会在 PromQL 一节中细讲。

2.2.1.2 Gauge

Gauge 表示搜集的数据是一个瞬时的,与时间没有关系,可以任意变高变低,往往可以用来记录内存使用率、磁盘使用率等。

例如 Prometheus server 中 go_goroutines, 表示 Prometheus 当前 goroutines 的数量。

2.2.1.3 Histogram

Histogram 由 _bucket{le=""},_bucket{le="+Inf"}, _sum,_count 组成,主要用于表示一段时间范围内对数据进行采样,(通常是请求持续时间或响应大小),并能够对其指定区间以及总数进行统计,通常我们用它计算分位数的直方图。

例如:

Prometheus server 中 prometheus_local_storage_series_chunks_persisted, 表示 Prometheus 中每个时序需要存储的 chunks 数量,我们可以用它计算待持久化的数据的分位数。

2.2.1.4 Summary

Summary 和 Histogram 类似,由 {quantile="<φ>"},_sum,_count 组成,主要用于表示一段时间内数据采样结果,(通常是请求持续时间或响应大小),它直接存储了 quantile 数据,而不是根据统计区间计算出来的。

例如 Prometheus server 中 prometheus_target_interval_length_seconds。

2.2.1.5 Histogram vs Summary

  • 都包含 _sum,_count
  • Histogram 需要通过 _bucket 计算 quantile, 而 Summary 直接存储了 quantile 的值。

2.2.3 数据存储方式

数据存在promethues自身的数据库,以数据文件的形式存储,有自身的查询方式:promql;详见https://songjiayang.gitbooks.io/prometheus/content/promql/summary.html

2.2.4 数据输出方式

agent:被动拉取;

promethues server:主动拉取客户端的数据。promethues将拉取到的数据存到data/目录。(除了 promethues 前台的PromQ查询页面,应该有某种工具可以直接在命令行查询promethues的历史数据(暂未找到);多种导出工具,可以支持Prometheus存储数据转化为HAProxy、StatsD、Graphite等工具所需要的数据存储格式(工具未研究过)。)

2.2.5 agent部署方式

promethues未提供自动部署agent的功能。

2.2.6 任务下发方式

agent每个周期固定采集设备的指定指标,若要自定义采集某些指标则需要修改agent源码。

promethues server拉取数据的任务在prometheus.yml配置。

3 promethues组件及部署

3.1 promethues server

3.1.1 部署

tar包解压即可用

3.1.2 PROMETHEUS.YML配置举例

3.1.3 命令

3.1.4 前台地址

http://192.168.7.40:9090/graph

默认9090端口

3.2 grafana

http://192.168.7.40:3000

端口默认3000,

用户密码:admin/admin

./grafana-server

3.3 主机节点

http://10.140.20.142:9100/metrics

3.4 redis节点

http://10.140.20.143:9121/metrics

3.5 elasticsearch节点

http://10.140.20.146:9108/metrics

4 数据查询

4.1 http方式查询promethues数据

https://prometheus.io/docs/prometheus/latest/querying/api/#querying-metadata

4.1.1 即时查询

URL查询参数:

  • query=:普罗米修斯表达查询字符串。
  • time=<rfc3339 | unix_timestamp>:评估时间戳。可选的。
  • timeout=:评价超时。可选的。默认为,并通过价值上限-query.timeout标志。

若省略时间time测试,则默认使用服务器时间

例:查询2018-01-16T03:12:51.781这个时刻go_memstats_frees_total的值

注:”value”:[时间戳,”对应值”]

4.1.2 范围查询

URL查询参数:

  • query=:普罗米修斯表达查询字符串。
  • start=<rfc3339 | unix_timestamp>:开始时间戳。
  • end=<rfc3339 | unix_timestamp>:结束时间戳。
  • step=:查询分辨率步的宽度。
  • timeout=:评价超时。可选的。默认为,并通过价值上限-query.timeout标志。

例:时间在2018-01-01T20:10:30.781到2018-01-01T20:11:00.781范围内,间隔15秒,up的数据

4.2 http查询方式作用未知系列??

QUERYING METADATA

Finding series by label matchers

The following endpoint returns the list of time series that match a certain label set.

URL query parameters:

  • match[]=: Repeated series selector argument that selects the series to return. At least one match[] argument must be provided.
  • start=<rfc3339 | unix_timestamp>: Start timestamp.
  • end=<rfc3339 | unix_timestamp>: End timestamp.

The data section of the query result consists of a list of objects that contain the label name/value pairs which identify each series.

The following example returns all series that match either of the selectors up or process_start_time_seconds{job="prometheus"}:

Querying label values

The following endpoint returns a list of label values for a provided label name:

The data section of the JSON response is a list of string label names.

This example queries for all label values for the job label:

EXPRESSION QUERY RESULT FORMATS

Expression queries may return the following response values in the result property of the data section. placeholders are numeric sample values. JSON does not support special float values such as NaN, Inf, and -Inf, so sample values are transferred as quoted JSON strings rather than raw numbers.

Range vectors

Range vectors are returned as result type matrix. The corresponding result property has the following format:

Instant vectors

Instant vectors are returned as result type vector. The corresponding result property has the following format:

Scalars

Scalar results are returned as result type scalar. The corresponding result property has the following format:

Strings

String results are returned as result type string. The corresponding result property has the following format:

TARGETS

This API is experimental as it is intended to be extended with targets dropped due to relabelling in the future.

The following endpoint returns an overview of the current state of the Prometheus target discovery:

Currently only the active targets are part of the response.

ALERTMANAGERS

This API is experimental as it is intended to be extended with Alertmanagers dropped due to relabelling in the future.

The following endpoint returns an overview of the current state of the Prometheus alertmanager discovery:

Currently only the active Alertmanagers are part of the response.

查询指标标签:curl -g ‘http://192.168.7.40:9090/api/v1/series?match[]=up&match[]=process_start_time_seconds{job="prometheus"}‘

查询标签 {“status”:”success”,”data”:[]}[logstash@CP-ITSM-OMC-ZSC05 supervisor]$ curl http://10.140.20.146:9090/api/v1/label/job/values
{“status”:”success”,”data”:[“elasticsearch_exporter”,”node”,”prometheus”,”redis_exporter”,”redis_exporter_143”,”redis_exporter_144”]}

4.3 查询节点数据

查询节点exporter的所有数据:curl -s http://192.168.7.40:9100/metrics

5 exporter格式

基于协议缓冲区格式 和 文本格式

客户端可以暴露promethues无法解析的其他格式

5.1 基于协议缓冲区格式 和 文本格式 的区别

图片

5.2 基于协议缓冲区格式

Reproducible sorting of the protocol buffer fields in repeated expositions is preferred but not required, i.e. do not sort if the computational cost is prohibitive.

Each MetricFamily within the same exposition must have a unique name. Each Metric within the same MetricFamily must have a unique set of LabelPair fields. Otherwise, the ingestion behavior is undefined.

5.3 文本类型格式

#打头的是注释行(除非#之后的第一个标记是HELP或TYPE)。

HELP行:可能包含任何UTF-8字符序列(在指标名称之后),但反斜杠和换行字符必须分别转义为\和\ n。对于相同的指标名称,只能有一条HELP行,一个指标只能有一个HELP行。

TYPE行:TPYE后的第一个参数是指标名,第二个参数是数据类型(可以是counter, gauge, histogram, summary, untyped)。相同的指标名称,只能有一个TYPE行。如果指标名称没有TYPE行,则该类型设置为无类型。

格式:

label_value可以是任何UTF-8格式的内容,但反斜杠、双引号、换行符 必须转义成

histogram(直方图) summary(汇总)类型的特别格式:

  • 需要单独一行xxx_sum;
  • 需要单独一行xxx_count;
  • Each quantile of a summary named x is given as a separate sample line with the same name x and a label {quantile=”y”};
  • A histogram must have a bucket with {le=”+Inf”}. Its value must be identical to the value of x_count;
  • histogram类型必须要有{le=”+Inf”},并且值要和xxx_count一致;

5.4 文本类型格式举例

6 导出器exporter

6.1 概述

指标名,一般为导出程序名称作为前缀,例如, haproxy_up;

度量标准必须使用基本单位(例如秒,字节),并保留将其转换为更具可读性的图形工具;

指标后缀_sum, _count, _bucket and _total 只可用在Summaries、 Histograms 、 Counters

7 告警alertmanager程序

概述:

promethues:根据配置文件prometheus.yml的rule_files告警规则,将告警信息存到promethues的磁盘,供promethues的前台页面查看;根据配置文件prometheus.yml的alerting(配置altermanager进程的ip 端口信息),将告警信息发送altermanager进程上。

altermanager:接收promethues发来的告警信息,存在磁盘中供altermanager进程的前台查看;同时根据altermanager的告警配置文件simple.yml发送邮件等提醒。

7.1 promethues告警配置举例

图片

7.2 promethues告警规则配置文件举例

图片

alert:自定义的告警含义简写

expor:告警条件,如上图的node_forks为具体mertics里的指标

for:周期

labels:severity,在alertmanager前台页面可以根据severity条件来查询告警信息

annotations:summary写些较详细的告警信息

7.3 alertmanager告警发送邮件提示

图片

图片

7.4 启动alertmanager

nohup ./alertmanager –config.file=simple.yml &

alertmanager前台:http://192.168.7.176:9093/

本人提供Oracle、MySQL、PG等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!

7.5通过其他方式告警

HIPCHAT_CONFIG: 是一款能够在苹果mac平台上运行的社交聊天软件,HipChat的功能和QQ相似,集聊天、视频、语音等功能于一身,不同之处在于HipChat界面更加的简洁、操作更加的流畅。

PAGERDUTY_CONFIG:是一款能够在服务器出问题时发送提醒的软件。在发生问题时,提醒的方式包括屏幕显示、电话呼叫、短信通知、电邮通知等,而且在无人应答时还会自动将提醒级别提高。PagerDuty 不是免费的。

PUSHOVER_CONFIG:是一款网络通知推送服务,类似ifttt或脚本服务,你可以将需要推送的服务设置好后,遇到情况将把通知自动推送到你的安卓手机。

SLACK_CONFIG:slack是聊天群组 + 大规模工具集成 + 文件整合 + 统一搜索。截至2014年底,Slack 已经整合了电子邮件、短信、Google Drives、Twitter、Trello、Asana、GitHub 等 65 种工具和服务,可以把各种碎片化的企业沟通和协作集中到一起。

OPSGENIE_CONFIG :集成电话短信邮件等等

VICTOROPS_CONFIG:聊天应用

HTTP_CONFIG:A http_config allows configuring the HTTP client that the receiver uses to communicate with HTTP-based API services.

8 问题笔记

8.1已解决

  • prometheus浏览器查询不到exporter指标数据,但是浏览器exporter的mertic有指标数据。原因是时间不同步

参考

https://mp.weixin.qq.com/s/bPAOh20ha-rek7Y0q7WJGA

http://zhoujinl.github.io/2018/03/25/prometheus/

标签:

头像

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

9 + 3 =

 

嘿,我是小麦,需要帮助随时找我哦
  • 18509239930
  • 个人微信

  • 麦老师QQ聊天
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部
返回顶部