Prometheus笔记

https://blog.csdn.net/luanpeng825485697/article/details/82318204

https://www.cnblogs.com/yangxiaoyi/p/7398156.html

Prometheus 实战

1. 简介

主要功能

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

核心组件

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

基础架构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NstOO69d-1617085973407)(C:\Users\Administrator\Desktop\Prometheus\PrometheusArchitecture.png)]

大致逻辑:

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

注意

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

Docker方式安装

基于docker 搭建Prometheus+Grafana

访问

2. 基础概念

  • 数据模型
    • 时序索引
    • 时序样本
    • 格式

2.1 数据模型

Promethues 存储的是 时序数据,即按照相同时序(相同的名字和标签),以时间维度存储连续的数据的集合

2.1.1 时序索引

时序(time series) 是由名字(Metric),以及一组 key/value 标签定义的,具有相同的名字以及标签属于相同时序。


时序的名字由 ASCII 字符,数字,下划线,以及冒号组成,它必须满足正则表达式 [a-zA-Z_:][a-zA-Z0-9_:]*,其名字应该具有语义化,一般表示一个可以度量的指标,例如 http_requests_total,表示 http 请求的总数。


时序的标签可以使 Prometheus 的数据更加丰富,能够区分具体不同的实例,例如 http_requests_total{method="POST"} 可以表示所有 http 中的 POST 请求。

标签名称由 ASCII 字符,数字,以及下划线组成, 其中 __ 开头属于 Prometheus 保留,标签的值可以是任何 Unicode 字符,支持中文。

2.1.2 时序样本

按照某个时序以时间维度采集的数据,称之为样本,其值包含:

  • 一个 float64 值
  • 一个毫秒级的 unix 时间戳
2.1.3 格式
<metric name>{<label name>=<label value>, ...}

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

2.2 Metric types

  • 时序 4 中类型
    • Counter
    • Guage
    • Histogram
    • Summary
    • Histogram vs Summary

时序 4 种类型 Prometheus 时序数据分为 Counter 、 Guage、 Histogram、 Summary 四种类型

2.2.1 Counter

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

2.2.2 Guage

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

2.2.3 Histogram

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

2.2.4 Summary

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

Histogram vs Summary

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

2.3 作业与实例

2.3.1 作业和实例

prometheus 中,将任意一个独立的数据源(target)称之为实例(instance)。包含相同类型的实例的集合称之为作业(job)。

例:如下是一个含有四个重复实例的作业:

- job: api-server
	- instance 1: 1.2.3.4:5670
	- instance 2: 1.2.3.4:5671
	- instance 3: 5.6.7.8:5670
	- instance 4: 5.6.7.8:5671
2.3.2 自生成标签和时序

prometheus 在采集数据的同时,会自动在时序的基础上添加标签,作为数据源(target)的标识,以便区分:

3. PromQL

3.1 PromQL 基本使用

PromQL (Prometheus Query Language) 是 Prometheus 自己开发的数据查询 DSL 语言,语言表现力非常丰富,内置函数很多,在日常数据可视化,rule 告警中都会使用到它。

  • 字符串 在查询语句中,字符串往往作为查询条件 labels 的值,和Golang 字符串语法一致,可以使用 " ", '', 或者`` ,

  • 数字 表达式中可以使用正数或浮点数,例如

    3
    -2.4
    

3.2 查询结果类型

PromQL 查询结果主要有 3 种类型:

  • 瞬时数据 (Instant vector): 包含一组时序,每个时序只有一个点,例如: http_requests_total
  • 区间数据 (Range vector): 包含一组时序,每个时序有多个点,例如: http_requests_total[5m]
  • 纯量数据 (Scalar): 纯量只有一个数字,没有时序,例如: count(http_requests_total)

3.3 查询条件

一个简单的查询相当于是对各种标签的筛选,例如:

http_requests_total{code="200"} // 表示查询名字为
http_requests_total,code 为 "200" 的数据

查询条件支持正则匹配,例如:

http_requests_total{code!="200"} // 表示查询 code 不为 "200" 的数据
http_requests_total{code=~"2.."} // 表示查询 code 为 "2xx" 的数据
http_requests_total{code!~"2.."} // 表示查询 code 不为 "2xx" 的数据

3.4 操作符

Prometheus 查询语句中,支持常见的各种表达式操作符

  • 算术运算符:

    +,-,*,/,%,^

    例如 http_requests_total *2表示将 http_requests_total所有数据 double 一倍。

  • 比较运算符:

    ==,!=,>,<,>=,<=

    例如http_requests_total > 100表示http_requests_total 结果中大于 100 的数据。

  • 逻辑运算符

    and,or,unless

    例如 http_requests_total ==5 or http_requests_total == 2表示http_requests_total结果中
    等于 5 或者 2 的数据。

  • 聚合运算符:

    sum,min,max,avg,stddev,stdvar,count,count_values,bottomk,topk,quantile,

3.5 内置函数

Prometheus 内置不少函数,方便查询以及数据格式化,例如将结果由浮点数转为整数的 floor 和 ceil,

floor(avg(http_requests_total{code="200"}))
ceil(avg(http_requests_total{code="200"}))

//查看 http_requests_total 5分钟内,平均每秒数据
rate(http_requests_total[5m])

详情-英文文档

详情-中文文档

4. 数据可视化

Prometheus 自带的 Web Consul 、 Grafana

5. Prometheus 配置

6. Exporter

在 Prometheus 中负责数据汇报的程序统一叫做 Exporter, 而不同的 Exporter 负责不同的业务。如负责主机信息手机的 node_exporter

6.1 文本格式

一个 Exporter 本质上就是将收集的数据,转化为对应的文本格式,并提供 http 请求。

Exporter 收集的数据转化的文本内容以行 ( \n ) 为单位,空行将被忽略, 文本内容最后一行为空行。

6.1.1 注释

文本内容,如果以#开头通常表示注释。

6.1.2 采样数据

内容如果不以 # 开头,表示采样数据。它通常紧挨着类型定义行,满足以下格式:

metric_name [
    "{" label_name "=" `"` label_value `"` { "," label_name "=" `"` label_value `"` } [ "," ] "}"
	] value [ timestamp ]

6.2 Node Exporter 安装使用

6.3 Node Exporter 常用查询

  • CPU 使用率
  • CPU 各 mode 占比率
  • 机器平均负载
  • 内存使用率
  • 磁盘使用率
  • 网络 IO
  • 网卡出 / 入 包

6.4 其它 Exporter

  • MySQL sercer Exporter 收集 Mysql Server 的信息
  • MongoDB exporter 收集 MongoDB 信息

详情

7. Pushgateway

7.1 Pushgateway 简介

  • Prometheus 采用 pull 模式,可能由于不在一个子网或者防火墙原因,导致 Prometheus 无法直接拉取各个 target 数据。
  • 在监控业务数据的时候,需要将不同数据汇总, 由 Prometheus统一收集。

安装

docker pull prom/pushgateway
docker run -d -p 9091:9091 prom/pushgateway

8. Alertmanager

9. 高可用方案探讨

9.1 高可用

Prometheus 监控系统的高可用主要分为两部分:

  • Prometheus Server 的高可用,无单点风险
  • Alertmanager 的高可用,避免告警消息丢失和重复。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、prometheus简介 Prometheus是一个开源的系统监控和告警系统,现在已经加入到CNCF基金会,成为继k8s之后第二个在CNCF维护管理的项目,在kubernetes容器管理系统中,通常会搭配prometheus进行监控,prometheus支持多种exporter采集数据,还支持通过pushgateway进行数据上报,Prometheus再性能上可支撑上万台规模的集群。 二、prometheus架构图 三、prometheus组件介绍 1.Prometheus Server: 用于收集和存储时间序列数据。 2.Client Library: 客户端库,检测应用程序代码,当Prometheus抓取实例的HTTP端点时,客户端库会将所有跟踪的metrics指标的当前状态发送到prometheus server端。 3.Exporters: prometheus支持多种exporter,通过exporter可以采集metrics数据,然后发送到prometheus server端 4.Alertmanager: 从 Prometheus server 端接收到 alerts 后,会进行去重,分组,并路由到相应的接收方,发出报警,常见的接收方式有:电子邮件,微信,钉钉, slack等。 5.Grafana:监控仪表盘 6.pushgateway: 各个目标主机可上报数据到pushgatewy,然后prometheus server统一从pushgateway拉取数据。 四、课程亮点 五、效果图展示 六、讲师简介 先超(lucky):高级运维工程师、资深DevOps工程师,在互联网上市公司拥有多年一线运维经验,主导过亿级pv项目的架构设计和运维工作 主要研究方向: 1.云计算方向:容器 (kubernetes、docker),虚拟化(kvm、Vmware vSphere),微服务(istio),PaaS(openshift),IaaS(openstack)等2.系统/运维方向:linux系统下的常用组件(nginx,tomcat,elasticsearch,zookeeper,kafka等),DevOps(Jenkins+gitlab+sonarqube+nexus+k8s),CI/CD,监控(zabbix、prometheus、falcon)等 七、课程大纲

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值