文章目录

  • prometheus数据模型
    • 概述
    • 指标类型
    • 作业job和实例targets/instance
    • prometheusQL(数据查询语言也是[时序数据库](https://so.csdn.net/so/search?q=时序数据库&spm=1001.2101.3001.7020)使用语言)
  • prometheus数据模块
  • 表达式浏览器(promQL过滤使用)
  • 部署service discovery服务发现
    • Prometheus指标抓取的[生命周期](https://so.csdn.net/so/search?q=生命周期&spm=1001.2101.3001.7020)
    • prometheus 服务发现机制
    • 静态配置发现
    • 动态发现
      • 基于文件服务发现
        • 编写Prometheus.yml文件
        • 指定配置文件启动
        • 在node节点开启服务
        • 文件发现的作用
    • 基于DNS自动发现
    • 基于consul发现
      • 1)相关概念
      • 2)安装consul_1.9.0版本
      • 3)启动开发者模式
      • 4)编辑/etc/consul目录下的prometheus-servers.json配置文件
      • 5)创建consul自动发现的prometheus.yml文件
      • 6)注册其他node节点
  • 总结
    • 指标类型
    • 作业job和实例targets/instance
    • prometheusQL两种向量
    • prometheus的配置文件
    • prometheus架构模型(工作流程)

prometheus数据模型

概述

  • prometheus仅用键值方式存储时序式的聚合数据,他不支持文本信息
  • 从每个target中会采集出很多指标,那么每个指标会暴露很多样本数据点,而这些数据点pro都需要存储而这些指标会以固定时间间隔生成很多样本数据点,而如何标示这些样本数据点,则是数据模型学习的意义

①时序列标识:key+lables

②当前时间序列的样本值value

③这些标签可以作为过滤器进行指标过滤及聚合运算,如何从上万的数据过滤出关键有限的时间序列,同时从有限的时间序列在特定范围的样本那就需要手动编写出时间序列的样本表达式来过滤出我们需求的样本数据

指标类型

  • 默认都是以双精度浮点型数据(服务端无数据量类型数据–类型是对客户端有意义的)

①counter : 计数器单调递增
②gauge:仪表盘:有起伏特征的
③histogram:直方图(统计的概念,做分位数统计):
在一段时间范围内对数据采样的相关结果,并记入配置的bucket中,他可以存储更多的数据,包括样本值分布在每个bucket的数量,从而iprometheus就可以使用内置函数进行计算:

计算样本平均值:以值得综合除以值的数量
计算样本分位值:分位数有助于了解符合特定标准的数据个数,例如评估响应时间超过1秒的请求比例,若超过20%则进行告警等

④summary(统计数据),摘要,histogram的扩展类型,它是直接由监控端自行聚合计算出分位数,同时将计算结果响应给prometheus server的样本采集请求,因而,其分位数计算是由监控端完成

计数器:单调递增 仪表盘:起伏特征 直方图:平均数或分位值 sumamary(统计数据)

作业job和实例targets/instance

  1. job:能够接收prometheus server数据scrape ;两种job:“mysql_nodes" “mysql_master_slave”,每一种job会分开进行拉取数据以及展示数据
  2. targets:每一个可以被监控的系统,成为targets多个相同的targets的集合(类)称为job
  3. instance:实例与targets(类似)

与target相比,instance更趋近于一个具体可以提供监控数据的实例,而targets则更像一个对象、目标性质

targets 与 instance区别:都代表了被监控端可以吐出监控数据的被监控端这个对象,tagers更倾向于是一个集合,instance更倾向于具体的被监控端

prometheusQL(数据查询语言也是时序数据库使用语言)

**①即时向量:**最近以此时间戳上跟踪的数据指标(一个时间点上的所有数据)
即时向量选择器:返回0个1个或者多个时间序列上在给定时间戳上的各自的一个样本,该样本成为即时样本

**②时间范围向量:**指定时间范围内所有时间戳上的数据指标
范围向量选择器:返回0个1个或多个时间序列上在给定时间范围内的各自的一组样本(范围向量选择器无法用于绘图)

prometheus数据模块

global:全局配置

altermanager configuration:告警模块(通过prometheusQL+布尔值表达式产生告警信息)

rules

scrape

表达式浏览器(promQL过滤使用)

表达式浏览器常规使用
在prometheusUI控制台上可以进行数据过滤
简单的用法:

  • CPU使用总量
node_cpu_seconds_total

  • 计算过去5分钟内的CPU使用速率
PromQL:(1-avg(irate(node_cpu_seconds_total{cpu="0",mode="idle"}[5m]))by(instance))*100avg:平均值
avg (irate (node_cpu_seconds_total{fmode=‘idle’ } [5m]):可以理解为CPU空闲量的百分比
by (instance):表示的是所有节点

  • 每台主机CPU在5分钟内的平均使用率
PromQL:(1-avg(irate(node_cpu_seconds_total{cpu="0",mode="idle"}[5m]))by(instance))*100avg:平均值
avg (irate (node_cpu_seconds_total{fmode=‘idle’ } [5m]):可以理解为CPU空闲量的百分比
by (instance):表示的是所有节点

  • 查询1分钟平均负载超过主机CPU数量两倍的时间序列
node_load1 > on (instance) 2 * count (node_cpu_seconds_total{mode='idle'})by (instance)
node_load5
node_load15
1、5、15分钟的cpu负载
一般来说以上的值不能长时间大于CPU核心数量

  • 内存使用率
node_memory_MemTotal_bytes
node_memory_MemFree_bytes
node_memory_Buffers_bytes
node_memory_Cached_ bytes计算使用率:
可用空间:以上后三个指标之和
己用空间:总空间减去可用空间
使用率:己用空间除以总空间

部署service discovery服务发现

Prometheus指标抓取的生命周期

Prometheus的服务发现(基于文件、DNS、consul、k8s等各种主流的服务发现总线)

#默认:static_config : 静态配置形式的服务发现

①基于文件的服务发现;
(定义一组资源"子"配置文件yaml格式 里面只存方需要采集的targets 信息,此种方式可以被pro动态获取到,而不需要重启)

②基于DNS的服务发现;

③基于API的服务发现:Kubernetes、Consul、Azure、重新标记

  • target重新打标

  • metric重新打标

④基于K8s的服务发现

prometheus 服务发现机制

  1. Prometheus Server的数据抓取工作于Pull模型,因而,它必需要事先知道各Target的位置,然后才能从相应的Exporter或Instrumentation中抓取数据
  2. 对于小型的系统环境来说,通过static_dpnfigs指定各Target便能解决问题,这也是最简单的配置方法;每个Targets用一个网络端点(ip:port)进行标识;
  3. 对于中大型的系统环境或具有较强动态性的云计算环境来说,静态配置显然难以适用;因此,Prometheus为此专门设计了一组服务发现机制,以便于能够基于服务注册中心(服务总线)自动发现、检测、分类可被监控的各Target,以及更新发生了变动的Target指标抓取的生命周期
  4. 在每个scrape_interval期间,Prometheus都会检查执行的作业(Job);这些作业首先会根据Job上指定的发现配置生成target列表,此即服务发现过程;服务发现会返回一个Target列表,其中包含一组称为元数据的标签,这些标签都以" meta_"为前缀;
  5. 服务发现还会根据目标配置来设置其它标签,这些标签带有"“前缀和后缀,b包括"scheme”、 " address"和" metrics path_",分别保存有target支持使用协议(http或https,默认为http) 、 target的地址及指标的URI路径(默认为/metrics) ;
  6. 若URI路径中存在任何参数,则它们的前缀会设置为" param"这些目标列表和标签会返回给Prometheus,其中的一些标签也可以配置中被覆盖;
  7. 配置标签会在抓取的生命周期中被重复利用以生成其他标签,例如,指标上的instance标签的默认值就来自于address标签的值;
  8. 对于发现的各目标,Prometheus提供了可以重新标记(relabel)目标的机会,它定义在job配置段的relabel_config配置中,常用于实现如下功能
  • 以上的8条——>详细版的prometheus工作生命周期
  • 将来自服务发现的元数据标签中的信息附加到指标的标签上
  • 过滤目标(会利用于重打标签机制上)

之后便是数据抓取,以及指标返回的过程,抓取而来的指标在保存之前,还允许用户对指标重新打标过滤的方式
它定义在job配置段的metric_relabel_configs配置中,常用于实现如下功能#册删除不必要的指标
从指标中册删除敏感或者不需要的标签
添加、编辑或者修改指标的标签值或标签格式

静态配置发现

  • 修改prometheus服务器上的配置为文件,指定targets的端口上面配置过
  - job_name: "node"static_configs:- targets:- 192.168.116.135:9100- 192.168.116.137:9100- 192.168.116.138:9100

动态发现

基于文件服务发现

基于文件的服务发现仅仅略优于静态配置的服务发现方式,它不依赖于任何平台或第三方服务,因而也是最为简单和通用的实现方式。prometheus server定期从文件中加载target信息(pro-server pull指标发现机制-job_name
获取我要pull的对象target)文件可以只用json和yaml格式,它含有定义的target列表,以及可选的标签信息,以下第一配置,能够将prometheus默认的静态配置转换为基于文件的服务发现时所需的配置;(rometheus会周期性的读取、重载此文件中的配置,从而达到动态发现、更新的操作)

编写Prometheus.yml文件
cd /usr/local/prometheus/mkdir file_sd && cd file_sdmkdir targets
vim /usr/local/prometheus/prometheus.yml------只列出与静态Prometheus.yml文件区别的地方-------- job_name: 'prometheus'# metrics_path defaults to '/metrics'# scheme defaults to 'http'.file_sd_configs:- files:- targets/prometheus_*.yamlrefresh_interval: 2m# All nodes- job_name: 'nodes'file_sd_configs:- files:- targets/nodes_*.yamlrefresh_interval: 2m

指定配置文件启动
./prometheus --config.file=./file_sd/prometheus.yml

在node节点开启服务

文件发现的作用

如果增加node或者prometheus服务端节点只需更改nodes_centos.yaml prometheus_server.yaml两个文件添加地址就行,不需要停止服务

基于DNS自动发现

基于DNS的服务发现针对一组DNS域名进行定期查询,以发现待监控的目标查询时使用的DNS服务器由/etc/resolv.conf文件指定;

该发现机制依赖于A、AAAA和SRv资源记录,且仅支持该类方法,
尚不支持RFC6763中的高级DNS发现方式

  • SRV: SRV记录的作用是指明某域名下提供的服务。实例:
    _http._tcp.example.com.SRV 10 5 80. www.example.comSRV后面项目的含义:
    10 -优先级,类似MX记录
    5 -权重
    80-端口
    www.example.com -实际提供服务的主机名。同时SRV可以指定在端口上对应哪个service
  • hprometheus 基于Dws的服务中的SRV记录,让prometheus发现指定target上对应的端口对应的是exporter或instrumentation

基于consul发现

1)相关概念

一款基于golang开发的开源工具,主要面向分布式,服务化的系统提供服务注册、服务一发现和配置管理的功能提供服务注册/发现、健康检查、Key/Value存储、多数据中心和分布式一致性保证等功能

原理:通过定义json文件将可以进行数据采集的服务注册到consul中,用于自动发现同时使用prometheus做为client端获取consul上注册的服务,从而进行获取数据

2)安装consul_1.9.0版本

unzip consul_1.9.0_linux_amd64.zip -d /usr/local/bin/

3)启动开发者模式

consul开发者模式,可以快速开启单节点的consul服务,具有完整功能,方便开发测试

mkdir -pv /consul/data/
mkdir /etc/consul && cd /etc/consulconsul agent -dev -ui -data-dir=/consul/data/ \
-config-dir=/etc/consul/ -client=0.0.0.0

agent -dev:运行开发模式
agent -server:运行server模式
-ui:ui界面
-data-dir:数据位置
/etc/consul:可以以文件形式定义各个services的配置,也可以基于api接口直接配置
-client:监听地址

4)编辑/etc/consul目录下的prometheus-servers.json配置文件

vim /etc/consul/prometheus-servers.json{"services": [{"id": "prometheus-server-node01","name": "prom-server-node01","address": "192.168.226.128","port": 9090,"tags": ["prometheus"],"checks": [{"http": "http://192.168.226.128:9090/metrics","interval": "5s"}]}]
}
consul reload   #重载配置文件

启动prometheus

5)创建consul自动发现的prometheus.yml文件

cd /usr/local/prometheus/mkdir consul_sd && cd consul_sdvim prometheus.yml- job_name: 'prometheus'# metrics_path defaults to '/metrics'# scheme defaults to 'http'.consul_sd_configs:- server: "192.168.32.10:8500"tags:- "prometheus"refresh_interval: 2m# All nodes- job_name: 'nodes'consul_sd_configs:- server: "192.168.32.10:8500"tags:- "nodes"refresh_interval: 2m

配置文件启动prometheus

./prometheus --config.file=./consul_sd/prometheus.yml

开启consul服务

6)注册其他node节点

vim /etc/consul/nodes.json{"services": [{"id": "node_exporter-node01","name": "node01","address": "192.168.116.136","port": 9100,"tags": ["nodes"],"checks": [{"http": "http://192.168.116.136:9100/metrics","interval": "5s"}]},{"id": "node_exporter-node02","name": "node02","address": "192.168.116.137","port": 9100,"tags": ["nodes"],"checks": [{"http": "http://192.168.116.137:9100/metrics","interval": "5s"}]}]
}

重载配置文件

consul reload

启动node节点

总结

指标类型

计数器:单调递增

仪表盘:起伏特征

直方图:平均数或分位值

sumamary(统计数据)

作业job和实例targets/instance

①job:能够接收prometheus server数据scrape ;两种job:“mysql_nodes" “mysql_master_slave”,每一种job会分开进行拉取数据以及展示数据

②指标(配置文件/promql) : targets 与 instance区别:都代表了被监控端可以吐出监控数据的被监控端这个对象,tagers偏向于表示一个集合,instance偏向于表示具体的一个可提供监控数据的对象

PromQL : 指标 {标签1=标签值1,......标签N=标签值N}  样本(值)

prometheusQL两种向量

①即时向量:表示的是一个时间刻度

②时间范围向量:表示的是一组时间区间

③即时向量选择器:在指定的时间戳上的数值(称之为即时向量样本)

④范围向量选择器:在一组时间区间内的0或1或多个数值(范围向量样本)

支持多种即时向量组合形式,不支持多种时间范围向量组合形式

prometheus的配置文件

①global:全局配置 ②altermanager :告警模块 ③rules ④scrape(服务发现)

prometheus架构模型(工作流程)

crape收集数据方式:①exporter ②自建/内建指标 ③pushgateway

服务发现:①基于fd文件 ②基于DNS——>SRV记录 ③基于consul——>自动发现,同时利用prometheus的自身周期扫描配置文件更新项并加载的特性,实现动态更新 ④基于k8s服务发现

Prometheus-----2相关推荐

  1. Prometheus+Granfana

    二.虚机(服务器)方式 prometheus在虚机(服务器)中安装运行. 命令行启动 在安装完成以后,可以直接在命令行启动.启动方式通常是: ./prometheus --config.file=pr ...

  2. 083、Prometheus架构(2019-05-05 周日)

    参考https://www.cnblogs.com/CloudMan6/p/7692765.html Prometheus 是一个非常优秀的监控工具,准确的说,应该是监控方案.Prometheus 提 ...

  3. Prometheus 对比 Zabbix

    公司要上监控,Prometheus 是最热门的监控解决方案,作为喜新厌旧的程序员,我当然是选择跟风了,但上级更倾向于 Zabbix,那没办法,只能好好对比一番,给出几个靠谱的理由了. 但稍稍深入一点, ...

  4. 在微服务架构下基于 Prometheus 构建一体化监控平台的最佳实践

    欢迎关注方志朋的博客,回复"666"获面试宝典 随着 Prometheus 逐渐成为云原生时代的可观测事实标准,那么今天为大家带来在微服务架构下基于 Prometheus 构建一体 ...

  5. Prometheus 有瓶颈?怎么打造企业级监控系统?

    欢迎关注方志朋的博客,回复"666"获面试宝典 来源 | https://cloud.tencent.com/developer/article/1690227 Thanos[1] ...

  6. 实战 Prometheus 搭建监控系统

    欢迎关注方志朋的博客,回复"666"获面试宝典 Prometheus 是一款基于时序数据库的开源监控告警系统,说起 Prometheus 则不得不提 SoundCloud,这是一个 ...

  7. Prometheus 如何做到“活学活用”,大牛总结的避坑指南

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者丨徐亚松 来源丨http://www.xuyasong ...

  8. 自从上线了 Prometheus 监控告警,真香!

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 对很多人来说,未知.不确定.不在掌控的东西,会有潜意识的逃 ...

  9. 监控神器Prometheus用不对,也就是把新手村的剑

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者丨徐亚松 来源丨http://www.xuyasong.com ...

  10. 全网最火的Nacos监控中心——Prometheus+Grafana

    最近公司在做Nacos监控这块,于是我就随手搭建了一台监控中心,虽然是国外的,但是对于功能上足够用了,下面我来介绍下怎么搭建!!! 1.准备环境 Nacos集群 参考地址:https://nacos. ...

最新文章

  1. FFmpeg中RTSP客户端拉流测试代码
  2. android studio ndk 书籍,NDK 在AndroidStudio3.2.1版本集成方法(ndk-build方式)
  3. ldap、additional info: no global superior knowledge
  4. HDLBits 系列(4)如何设计一定不会产生Latch的组合逻辑?
  5. element ui 红点_element-ui 自定义表单验证 , 但是不出现小红心了
  6. 查看Unix/Linux的CPU个数和内存大小,系统位数(转载)
  7. CMS:文章管理之模型和Store
  8. P4245 【模板】任意模数多项式乘法(NTT)
  9. 解决 JSP 页面报错 equal symbol expected
  10. C++笔记-異常處理機制(释放堆区空间)
  11. Android 进程间通信——Service、Messenger
  12. Linux网络编程复习笔记
  13. 如何优化你的布局层级结构之RelativeLayout和LinearLayout及FrameLayout性能分析(一)...
  14. MyBatis 插件原理与实战
  15. python,音乐,视频生成二维码
  16. 黑盒测试与bug定位
  17. Cortex-M3 VS ARM7
  18. js实现鼠标跟随效果
  19. Microsoft Outlook 2019 for mac(电子邮件和日历工具)
  20. 我的人工智能梦(一、前言)

热门文章

  1. java 运动控制,S7-1500T连接S120实现运动控制(Startdrive)
  2. 亚马逊Listing优化技巧有哪些?
  3. shell案例系列3-将多个文件写入到同一个文件
  4. 传统零售业分析指标|数据化管理笔记
  5. 【愚公系列】2023年06月 攻防世界-Web(wzsc_文件上传)
  6. 研发绩效考核按月还是按季度进行?
  7. vc++2017 使用笔记
  8. CC2530定时器T1产生PWM
  9. python简易识别联通,电信,移动手机号码
  10. 某网站JS的变态写法/诺禾