Prometheus学习笔记——NWU_LK

Prometheus

监控系统组件

  • 指标数据采集
  • 指标数据存储
  • 指标数据趋势分析及可视化
  • 告警

监控体系介绍

  • 系统层监控:监控CPU、Load、Memory、IO等
  • 中间件及基础设施类系统监控:Kafka、RabbitMQ、Tomcat、Mysql、Ceph、ShardingSpere等
  • 应用层监控:用于衡量应用程序代码的状态和性能
  • 业务层监控:用于衡量应用程序的价值,例如电商网站的销售量等

监测的黄金指标

  • 延迟:服务器请求所需时长、例如HTTP请求平均延迟
  • 流量:衡量服务的容量需求,例如每秒处理的HTTP请求数或数据库系统的事务数量
  • 错误:请求失败的速率,衡量错误发生的情况
  • 饱和度:衡量资源的使用情况,用于表达应用程序有多满

Prometheus简介

Prometheus是一款时序数据库,也是一款设计用于进行目标监控的组件。其基于http call,从配置文件中指定的网络端点(endpoint)上周期性获取指标数据。其中网络端点被称作是一个Instance,而多个具有类似功能的Instance则被称为Job。Prometheus支持三种类型的途径从目标上抓取指标数据。

  • Exporters:添加到对应的组件上,由Exporters获取对应的指标信息,然后响应给Prometheus
  • Instrumentation:应用程序内置了Prometheus的指标收集器
  • PushGateway:适用于短期任务,将任务数据存到PushGateway,然后Prometheus来拉取

Prometheus组件

Prometheus生态包括了很多组件,它们中的一些是可选的:

  • Prometheus Server:用于抓取和存储时间序列数据
  • 客户端库:目的在于那些期望提供Instrumentation的应用程序提供便捷的开发途径。即很多应用程序内置的用于采集数据的组件
  • Push Gateway:接收那些通常由短作业生成的指标数据的网关
  • exporters:用于暴露现有应用程序或服务的指标给Prometheus
  • AlertManager:警告管理器,从promethues中受到告警通知后,通过去重、分组、路由等预处理功能后向用户发送告警信息
  • Data Visulizetion:Prometues Web UI,内置的可视化组件,并不好用,推荐grafana
  • Service Discovery:动态发现待监控的Target,从而完成监控配置的重要组件。现在Prometheus Server内建支持

多数Prometheus组件是Go语言写的,这使得这些组件很容易编译和部署。

数据模型

Prometheus的数据以“key-value”的形式存储时序数据,不支持存储文本信息,其中的键为指标,比如CPU速率、内存使用率等。很多机器都会有相同名称的指标,因而它需要添加更详细额信息来区分其属于哪个机器的指标信息,比如cpu_usage{core="1",ip="128.2.3.4"}。这些标签还可以作为过滤器进行指标过滤及聚合运算等。

指标类型

  • Counter:计数器,用于保存单调递增的数据,例如网站的访问次数等。
  • Gauge:仪表盘,用于存储有者起伏特征的指标数据,例如内存空闲大小
  • Histogran:直方图,它会在一段时间范围内对数据进行采样,并将其计入可配置的bucket中。Histogram能存储更多的信息,包括样本值分布在每个bucket中的数量、所有样本值之和以及总的样本数量,从而能可以使用一些内置函数,比如计算样本均值、计算样本分位值等。
  • Summary:摘要,Histogran的扩展类型,但它是直接由被检测端自行计算出分位数,并将结果返回给Prometheus Server

PromQL

Prometheus提供了内置的数据查询语言PromQL,支持用户进行实时数据查询以及聚合操作。PromQL内置提供了一组用于处理数据的函数,并支持处理两种向量。

  • 即时向量:最近依次的时间戳上跟踪的数据指标
  • 时间范围向量:指定时间范围内所有时间戳上的数据指标

Prometheus安装

到官网下载Prometheus的tar包直接解压到对应目录下,启动命令直接就是./prometheus。其次,还可以在官网下载对应的exporter或者gateway的tar包。Prometheus自身内置了监控自身的组件,而如果监控本机的话需要引入对应的exporter,将其放到/usr/local/bin下启动即可。可以通过Prometheus所在机器的9090端口,在页面上显示对应的监控内容。

PromQL

Prometheus的时间序列默认保持一个月,如果需要长时间保留的话需要配置外置数据库。

数据类型:即时向量(取一个时间内的)、范维向量(返回时间段内特定值范围内的样本)、标量、字符串

匹配器

符号 说明
= 标签等于该值,当等于“”时表示没有这个标签的也匹配
!= 标签不等于
=~ 正则匹配
!~ 正则不匹配

即时向量语法:指标名称{标签='值'}

范围向量语法:指标名称{标签='值'}[范围],此处的范围即时间,时间单位有ms、s、m、h、d、w、m、y。比如表示5小时30分钟的话就是5h30m,不能使用小数。其次,多个target上的数据抓取的时间点相同时他们的时间戳并不会严格一致,因为Prometheus Server考虑到了负载。

常用函数:

  • rate(指标[ ]):获取一定时间内的增长速率
  • topk(3,指标):获取该指标下排名前三的时间序列
  • bottomk(3,指标):获取该指标下排名后三的时间序列
  • irate():同rate,比rate准确
    示例:
  • http_requests_total[5m] offset 1d:表示该指标昨天的前五分钟数据

11个聚合函数

函数名 说明
sum 对样本值求和
avg 对样本值求平均值
count 对分组内的时间序列进行数量统计
stddev 对样本值求标准差
stdvar 求方差
min 求样本最小值
max 求样本最大值
quantile 分位数用于评估数据的分布状态
count_values 对分组内的时间序列的样本值进行数量统计

Prometheus 服务发现

让Prometheus发现所要监控的组件可以在配置文件中配置对应的target信息,但是其有一定的缺点,比如当target容易变动时这种方式就不适用,因此需要一种动态的发现机制。

  • 基于文件的服务发现:额外建立一个文件,里边包含了配置文件中target的信息,Prometheus可以周期性的检查这些文件从而完成服务的发现。配置文件的方式如下,在Prometheus配置文件和外部文件中分别加入以下信息:
scrape_config:
 - job_name: 'prometheus'
  file_sd_config:
   - files:
    - targets/prometheus*.yaml.  //表示当前目录的tartget目录下的文件
    refresh_interval: 2m
- targets:
  - 172.2.2.2:9100
  - 172.2.2.3:9100
  - 172.2.2.4:9100
  labels:
    app: node-exporter
    job: node
  • 基于DNS的服务发现
  • 基于Consul的服务发现:Prometheus从consul中获取注册的服务
  • 基k8s的服务发现

pushGateway

配置

scrape_config:
 - job_name: 'pushgateway'
  static_configs:
   - targets: ['localhost:9091','localhost:9092'] /*此处即getway所在机器*/

你可能感兴趣的:(大数据,大数据,监控类)