Prometheus监控(二)

数据类型

Counter(计数器类型)

Counter类型的指标的工作方式和计数器一样,只增不减(除非系统发生了重置),Counter一般用于累计值。

Gauges(仪表盘类型)

Gauges是可增可减的指标类,可以用于反应当前应用的状态。比如在监控主机时,可用内存大小。

Histograms(直方图类型)

主要用于表示一段时间范围内对数据进行采样(通常是请求持续时间或响应大小),并能够对其指定区间以及总数进行统计,代表的是⼀种近似的百分⽐估算数值。举例说明: 如果你想监控用户的访问时间,将nginx日志的http_response_time列的数据全部采集下来,然后算一下总的平均值即可。但是这没有意义,如果只有一个用户请求特别慢,那么就会拉低总的平均值,而且你也发现不了小部分的问题。这时可以使用histogram来比较~=0.05秒的量有多少,0 ~ 0.05秒的有多少,>2秒的有多少,>10秒的有多少。

Summary(摘要类型)

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

标签匹配运算符

  • =:选择与提供的字符串完全相同的标签。
  • !=:选择不等于提供的字符串的标签。
  • =~:选择正则表达式匹配提供的字符串(或子字符串)的标签。
  • !~:选择不与提供的字符串(或子字符串)匹配的标签。

注释: 标签名称的匹配可以使用如下方示例:

(1)http_requests_total{environment=~"staging|testing|development",method!="GET"}
(2)http_requests_total{job=~".+",method!="GET"}
(3)http_requests_total{job=~".",method!="GET"}*

范围向量选择器

时间长度被追加在向量选择器尾部的方括号[]中,用以指定对于每个样本范围区间中的每个元素应该抓取的时间范围样本区间。

  • s - seconds
  • m - minutes
  • h - hours
  • d - days
  • w - weeks
  • y - years

示例: 取出过去5分钟内,度量指标名称为http_requests_total,标签为job="prometheus"的时间序列数据
http_requests_total{job="prometheus"}[5m]

位置修饰符

offset偏移修饰符,允许在查询中改变单个瞬时向量和范围向量中的时间偏移

示例: 取出相对于当前时间的前一周,过去五分钟的http_requests_total的速率:
rate(http_requests_total[5m] offset 1w)

逻辑/集二元运算符(逻辑/集合二元操作符)

  • and 交集
  • or 并集
  • unless 补集

vector1 and vector2 的逻辑/集合二元操作符,规则:vector1瞬时向量中的每个样本数据与vector2向量中的所有样本数据进行"标签"匹配,不匹配的,全部丢弃。运算结果是保留左边的度量指标名称和值。
示例:

公式:
node_cpu_seconds_total{job='test',cpu='1',mode=~"idle|system|user"}  and node_cpu_seconds_total{mode=~"system|user"}
返回的结果:
node_cpu_seconds_total{cpu="1",instance="gitlab:9100",job="test",mode="user"}
node_cpu_seconds_total{cpu="1",instance="gitlab:9100",job="test",mode="system"}

vector1 or vector2 的逻辑/集合二元操作符,规则:返回vector1中的所有元素和值,以及vector2中没有在vector1中匹配到的元素.
示例:

公式:
node_cpu_seconds_total{job='test',cpu='1',mode=~"user"} or node_cpu_seconds_total{cpu='1',job='test2',mode=~"system|user"}
返回的结果:
node_cpu_seconds_total{cpu="1",instance="gitlab:9100",job="test",mode="user"}   22.92
node_cpu_seconds_total{cpu="1",instance="gitlab:9100",job="test2",mode="system"}    54.14
node_cpu_seconds_total{cpu="1",instance="gitlab:9100",job="test2",mode="user"}   22.91

vector1 unless vector2的逻辑/集合二元操作符,又称差积。规则:包含在vector1中的元素,但是该元素不在vector2向量所有元素列表中,则写入到结果集中。
示例:

公式:
node_cpu_seconds_total{job='test',cpu='1',mode=~"user|system|idle"} unless node_cpu_seconds_total{mode=~"system|user"}
返回的结果:
node_cpu_seconds_total{cpu="1",instance="gitlab:9100",job="test",mode="idle"}

聚合运算符:

Prometheus支持下面的内置聚合操作符。这些聚合操作符被用于聚合单个即时向量的所有时间序列列表,把聚合的结果值存入到新的向量中。

(1). sum (在所有的value上求和)
sum(node_cpu_seconds_total{job="test"})
(2). max (在所有的value求最大值)
max(node_cpu_seconds_total{job="test"})
(3). min (在所有的value求最小值)
min(node_cpu_seconds_total{job="test"})
(4). avg (在所有的value上求平均值)
avg(node_cpu_seconds_total{job="test"})
(5). stddev (求标准差)
(6). stdvar (求方差)
(7). count (统计向量元素的个数)
count(node_cpu_seconds_total{job="test"})
(8). count_values (统计相同数据值的元素数量)
count_values("tag",node_cpu_seconds_total{cpu="0",mode="nice"}) #tag是标签名
(9). bottomk (在维度上取几个最小值)
bottomk(3,node_cpu_seconds_total{instance="gitlab:9100",cpu="0",mode=~"idle|nice|softirq"})
(10). topk (在维度上取几个最大值)
topk(3,node_cpu_seconds_total{instance="gitlab:9100",cpu="0",mode=~"idle|nice|softirq"})
(11). quantile (统计分位数)
quantile(0.99,prometheus_http_request_duration_seconds_sum{handler!="/metrics"})   #值为0.38代表百分之99的请求都在0.38ms下。
(12). sort(排序)
(13). time(打印当前时间戳)
(14). sqrt(计算元素的平方根)
(15). timestamp(返回样本的时间戳(不是当前时间戳))

功能性函数说明

(1). increase()
increase(node_cpu_seconds_total{mode="idle"}[1m])
#返回一个度量标准: last值-first值。取⼀段时间增量的总量
(2). by()
count(node_cpu_seconds_total{mode="idle"}) by(cpu)
#这个函数,可以把sum加合到⼀起的数值,按照指定的⼀个⽅式进⾏⼀层的拆分
(3). rate()
#rate函数是专门搭配counter类型数据使⽤的函数它的功能是按照设置⼀个时间段,(last值-first值)/时间差s,取⼀段时间增量的平均每秒数量.
(4). predict_limpar(预测函数)
predict_linear(node_filesystem_free_bytes{device="/dev/sda3",fstype="xfs",instance="jenkins:9100",job="test2",mountpoint="/"}[1m],300)
#根据磁盘1分钟内的变化,预测5分钟后的值
(5). abs()
#返回输入向量的所有样本的绝对值。
(6). absent()
#如果赋值给它的向量具有样本数据,则返回空向量;如果传递的瞬时向量参数没有样本数据,则返回不带度量指标名称且带有标签的样本值为1的结果,当监控度量指标时,如果获取到的样本数据是空的, 使用absent方法对告警是非常有用的.(有数据返回空,没数据返回1)
(7). ceil
#返回一个向上舍入为最接近的整数。
(8). changes()
changes(node_filesystem_free_bytes[1m])
#changes(v range-vector) 输入一个范围向量, 返回这个范围向量内每个样本数据值变化的次数。
(9). clamp_max()
#clamp_max(v instant-vector, max scalar)函数,输入一个瞬时向量和最大值,样本数据值若大于max,则改为max,否则不变
(10). clamp_min()
#输入一个瞬时向量和最大值,样本数据值小于min,则改为min。否则不变
(11). hour,minute,month,year,day_of_month(),day_of_week(),days_in_month()
#当前的小时,分钟,月,年,当天在这个月是第几天,当天在这个星期是第几天,这个月有多少天.
(12). delta()
delta(node_cpu_seconds_total{cpu="0",instance="gitlab:9100",job="test",mode="idle"}[1m])
#delta(v range-vector)函数,计算一个范围向量v的第一个元素和最后一个元素之间的差值。返回值:key:value=度量指标:差值
(13). floor()
#此函数,与ceil()函数相反。 4.3 为 4 。
(14). exp()
#输入一个瞬时向量, 返回各个样本值的e指数值,即为e^N次方,e=2.718281828,N=Value。
(15). idelta()
#idelta(v range-vector) 的参数是一个区间向量, 返回一个瞬时向量。它计算最新的 2 个样本值之间的差值。这个函数一般只用在 Gauge 类型的时间序列上。
(16). label_join()
label_join(up{instance="localhost:9091",job="pushgateway"},"foo", ",", "job","instance")
=》up{foo="pushgateway,localhost:9091",instance="localhost:9091",job="pushgateway"}
#函数可以将时间序列 v 中多个标签 src_label 的值,通过 separator作为连接符写入到一个新的标签 dst_label 中。可以有多个 src_label 标签。
(17). label_replace()
label_replace(up{instance="jenkins:9100",job="test2"},"port", "$2", "instance","(.*):(.*)")
=> up{instance="jenkins:9100",job="test2",port="9100"}
#label_replace 函数为时间序列添加额外的标签。该函数会依次对 v 中的每一条时间序列进行处理,通过 regex 匹配 src_label 的值,并将匹配部分 relacement 写入到 dst_label 标签中。
(18). round()
#round()函数与 ceil 和 floor 函数类似,返回向量中所有样本值的最接近的整数。
(19). vector()
#将标量返回s为没有标签的向量。
(20). irate()
irate(node_load1[1m])
#irate(v range-vector)函数, 输入:范围向量,输出:key: value = 度量指标: (last值-last前一个值)/时间戳差值,它是基于最后两个数据点。
(21). <aggregation>_over_time()
#以下函数允许聚合给定范围向量的每个系列随时间的变化并返回具有每系列聚合结果的即时向量:
- avg_over_time(range-vector):指定时间间隔内所有点的平均值。
avg_over_time(node_cpu_seconds_total{cpu="0",instance="gitlab:9100",job="test",mode="idle"}[1m])
- min_over_time(range-vector):指定时间间隔内所有点的最小值。
- max_over_time(range-vector):指定时间间隔内所有点的最大值。
- sum_over_time(range-vector):指定时间间隔内所有值的总和。
- count_over_time(range-vector):指定时间间隔内所有值的计数。
- quantile_over_time(scalar, range-vector):指定间隔中的值的φ-分位数(0≤φ≤1)。
#中分位的计算方法:如果数字个数为奇数,中位值就是中间那个数,如果是偶数,则是中间两个数的平均数。
#90百分位数的计算方式: a=[1,2,3,4]
a. (n-1)*p=(4-1)*0.9=2.7  #则整数部分i=2,小数部分j=0.7,n=数字个数,p=90百分位数。
b. a[i]=3;a[i+1]=4
c. (1-0.7)*3+(0.7*4)=3.7
- stddev_over_time(range-vector) : 区间向量内每个度量指标的总体标准差。
#总体标准差计算方法:
步骤一、(每个样本数据 减去总体全部数据的平均值)。
步骤二、把步骤一所得的各个数值的平方相加。
步骤三、把步骤二的结果除以 n (“n”指总体数目)。
步骤四、从步骤三所得的数值之平方根就是总体的标准偏差。
- stdvar_over_time(range-vector) : #区间向量内每个度量指标的总体标准方差,计算方法相当于没有第四步的总体标准差方法。

系统监控命令行

系统负载

node_load1   #系统一分钟内的负载
node_load5
node_load15

CPU

使用率:
100 - (avg(irate(node_cpu_seconds_total{instance=~"jenkins",mode="idle"}[5m])) * 100)
等待:
avg(irate(node_cpu_seconds_total{instance=~"jenkins",mode="iowait"}[5m])) * 100

内存

总大小:
node_memory_MemTotal_bytes{instance=~"jenkins"}
使用率:
(1 - (node_memory_MemAvailable_bytes{instance=~"jenkins"} / (node_memory_MemTotal_bytes{instance=~"jenkins"})))* 100

硬盘

总大小:
node_filesystem_size_bytes {instance=~"jenkins",fstype=~"ext4|xfs"}
剩余大小:
node_filesystem_avail_bytes {instance=~'jenkins:9100',fstype=~"ext4|xfs"}
使用率:
1-(node_filesystem_free_bytes{instance=~'jenkins:9100',fstype=~"ext4|xfs"} / node_filesystem_size_bytes{instance=~'jenkins:9100',fstype=~"ext4|xfs"})
IOPS:
磁盘每秒读取速率: irate(node_disk_reads_completed_total{instance=~"jenkins:9100"}[1m])
磁盘每秒写入速率: irate(node_disk_writes_completed_total{instance=~"jenkins:9100"}[1m])
磁盘读延迟(ms): irate(node_disk_read_time_seconds_total{instance=~"gitlab:9100"}[1m])
磁盘写延迟(ms): irate(node_disk_write_time_seconds_total{instance=~"gitlab:9100"}[1m])

文件句柄

系统当前打开的文件句柄:
node_filefd_allocated{instance=~"jenkins"}  #这个值是从/proc/sys/fs/file-nr获取到的

网络

入网: irate(node_network_receive_bytes_total{instance=~'$node',device!~'tap.*'}[5m])
出网:irate(node_network_transmit_bytes_total{instance=~'$node',device!~'tap.*'}[5m])

监控报警(alertmanager)

安装alertmanager
wget http://github.com/prometheus/alertmanager/releases/download/v0.16.1/alertmanager-0.16.1.linux-amd64.tar.gz
tar xf alertmanager-0.16.1.linux-amd64.tar.gz -C /usr/local/
mv /usr/local/alertmanager-0.16.1.linux-amd64 /usr/local/alertmanager
./alertmanager --config.file /usr/local/alertmanager/alertmanager.yml --web.external-url='http://192.168.18.213:9093'   #--web.external-url是报警是显示的远程地址

邮件报警

1. prometheus.yml添加添加alertmanager信息
[root@nagios alertmanager]# cat ../prometheus/prometheus.yml
alerting:alertmanagers:- static_configs:- targets:- localhost:9093        #alertmanager的远程地址rule_files:- "/usr/local/prometheus/rules.yml"   #匹配的规则文件2. 修改rules.yml文件
[root@nagios alertmanager]# cat /usr/local/prometheus/rules.yml
groups:
- name: node_memoryrules:- alert: "内存告警"  #报警名称expr: (1- (node_memory_MemAvailable_bytes/node_memory_MemTotal_bytes))*100 > 80for: 15s  #每隔15秒检测一次labels:   #标签severity: warning annotations:    #描述summary: "The percentage of memory exceeded the limit is now {{$value}} percent"3.修改alertmanager配置文件
[root@nagios alertmanager]# cat alertmanager.yml
global:resolve_timeout: 5msmtp_smarthost: 'smtp.doormobi.com:25' # 邮箱smtp服务器代理smtp_from: 'jenkins@doormobi.com' # 发送邮箱名称smtp_auth_username: 'jenkins@doormobi.com' # 邮箱名称smtp_auth_password: 'xxxxx' # 邮箱密码或授权码smtp_require_tls: false   #不使用tls加密 templates:- 'template/*.tmpl'  #配置要发送信息的模板,基于当前目录。route:  #定义路由信息receiver: 'email'  #发送警报的接收者的名称,以下receivers name的名称group_by: ['alertname']group_wait: 5sgroup_interval: 1mrepeat_interval: 1mreceivers:
- name: 'email'email_configs:- to: 'yuliang.zhu@qizhixinxi.com'headers: { Subject: "[WARN] 报警邮件"} # 接收邮件的标题send_resolved: true  #告警解除后否发送通知,这里选择发送inhibit_rules:- source_match:severity: 'critical'target_match:severity: 'warning'equal: ['alertname', 'dev', 'instance']4. 编写报警模板
[root@nagios alertmanager]# cat template/test.tmpl
{{ define "email.default.html" }}
{{ range .Alerts }}
========start==========<br/>
告警程序: prometheus_alert<br/>
告警详情: {{ .Annotations.summary }}<br/>
告警级别: {{ .Labels.severity }}<br/>
告警类型: {{ .Labels.alertname }}<br/>
故障主机: {{ .Labels.instance }}<br/>
触发时间: {{ .StartsAt.Format "2006-01-02 15:04:05" }}<br/>
========end==========<br/>
{{ end }}
{{ end }}

报警效果:

微信报警

1. 修改alertmanager配置文件
[root@nagios alertmanager]# vim alertmanager.yml
route:receiver: 'email'group_by: ['alertname']group_wait: 5sgroup_interval: 15srepeat_interval: 15sroutes:- receiver: 'weixing'match_re:severity: 'warning'
receivers:
- name: 'email'email_configs:- to: 'yuliang.zhu@qizhixinxi.com'headers: { Subject: "[WARN] 报警邮件"} # 接收邮件的标题
- name: 'weixing'wechat_configs:- send_resolved: true #告警解除后否发送通知,这里选择发送corp_id: 'wx7982c7fdf4eac184'api_secret: 'kUc_0gVzCPe2qQ8E8ckY7qcaGEuIzuAknGjibh8xxx--'to_party: '5'agent_id: '1000003'2. 添加报警模板
[root@nagios alertmanager]# cat template/wechat.tmpl
{{ define "wechat.default.message" }} #此处与邮件不同
{{ range .Alerts }}
========start==========
告警程序: prometheus_alert
告警级别: {{ .Labels.severity }}
告警类型: {{ .Labels.alertname }}
故障主机: {{ .Labels.instance }}
触发时间: {{ .StartsAt.Format "2006-01-02 15:04:05" }}
告警详情: {{ .Annotations.summary }}
========end==========
{{ end }}
{{ end }}

钉钉报警

1.安装prometheus,钉钉报警插件
wget https://github.com/timonwong/prometheus-webhook-dingtalk/releases/download/v0.3.0/prometheus-webhook-dingtalk-0.3.0.linux-amd64.tar.gz
tar xf prometheus-webhook-dingtalk-0.3.0.linux-amd64.tar.gz -C /usr/local/
mv /usr/local/prometheus-webhook-dingtalk-0.3.0.linux-amd64 /usr/local/prometheus-webhook-dingtalk
/usr/local/prometheus-webhook-dingtalk/prometheus-webhook-dingtalk --ding.profile="ops_dingding=钉钉机器人地址" &2. 修改alertmanager配置文件
[root@nagios alertmanager]# vim alertmanager.yml
route:receiver: 'email'group_by: ['alertname']group_wait: 5sgroup_interval: 15srepeat_interval: 15sroutes:- receiver: 'weixing'match_re:severity: 'warning'- receiver: 'webhook'match_re:severity: 'warning'
receivers:
- name: 'email'email_configs:- to: 'yuliang.zhu@qizhixinxi.com'headers: { Subject: "[WARN] 报警邮件"}   #接收邮件的标题
- name: 'weixing'wechat_configs:- send_resolved: true    #告警解除后否发送通知,这里选择发送corp_id: 'wx7982c7fdf4eac184'api_secret: 'kUc_0gVzCPe2qQ8E8ckY7qcaGEuIzuAknGjibh8xxx--'to_party: '5'agent_id: '1000003'
- name: 'webhook'webhook_configs:- url: http://localhost:8060/dingtalk/ops_dingding/send   #刚才安装的钉钉插件send_resolved: true  

转载于:https://www.cnblogs.com/SleepDragon/p/10642955.html

Prometheus监控(二)相关推荐

  1. 使用 Docker 部署 Grafana + Prometheus 监控 MySQL 数据库

    使用 Docker 部署 Grafana + Prometheus 监控 MySQL 数据库 原文:使用 Docker 部署 Grafana + Prometheus 监控 MySQL 数据库 一.背 ...

  2. 从零搭建Prometheus监控报警系统

    从零开始搭建Prometheus自动监控报警系统 从零搭建Prometheus监控报警系统 什么是Prometheus? Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据 ...

  3. 服务器运维监控指标,运维体系~指标监控~Prometheus监控告警与日志

    一 Prometheus 入门 1.1 入门介绍 运维体系~指标监控 先来一张图,说明一下Prometheus监控相关的软件和知识点. 1: 首先要安装:Prometheus, 负责收集各种监控指标, ...

  4. 云计算监控—Prometheus监控系统(文末赠书)

    陈金窗 刘政委 张其栋 郑少斌 读完需要 20 分钟 速读仅需 7 分钟 本文摘自于<Prometheus 监控技术与实战>一书,从云计算时代的业务特点出发,探讨了云计算监控的目标和挑战, ...

  5. Prometheus监控kubernetes

    Prometheus监控 kubernetes 咱们的目标通过Prometheus监控Kubernetes集群. 1.使用ConfigMaps管理Prometheus的配置文件 创建prometheu ...

  6. prometheus监控+告警

    1 开始安装前的准备 1.1 修改主机名 1.2 关闭防火墙 1.3 关闭seliunx 1.4 关闭防火墙 1.5 下载阿里云的yum源 2 下载所用到的包 2.1 安装 node_porter 2 ...

  7. Prometheus监控告警

    监控告警-Prometheus 第一章:概述 本章将介绍监控告警的一些基本概念. 1.1 什么是监控告警? 监控是什么? 说白了就是用一种形式去盯着.观察服务器,把服务器的各种行为表现都显示出来,用以 ...

  8. @prometheus监控详解

    文章目录 prometheus 简介 一.常用的监控 二.普罗米修斯简述(prometheus) 三.prometheus部署 四.prometheus(web) 1.配置插件环境 2.prometh ...

  9. Prometheus监控

    用Zabbix监控底层设备,用Prometheus监控容器. Prometheus监控官网地址 Prometheus架构图 分为客户端Agent和Server端.agent端推送数据给服务器. 一.G ...

  10. prometheus监控mysql慢查询_使用Grafana+Prometheus监控mysql服务性能

    prometheus(也叫普罗米修斯)官网: grafana官网: 特征 普罗米修斯的主要特点是: 具有由度量名称和键/值对标识的时间序列数据的 一个 来利用这一维度 不依赖分布式存储; 单个服务器节 ...

最新文章

  1. java treemap get_java treeMap 排序后 get不到value
  2. 杭十四计算机教室,杭十四中学生做了个图书馆智能机器人
  3. 《C++应用程序性能优化::第二章C++语言特性的性能分析》学习和理解
  4. 光磁记录实现数据冷存储
  5. Eclipse中classpath和deploy assembly的文件位置
  6. mui 头部tab代码2
  7. 年薪50W测试大牛,分享测试开发基础知识
  8. CICD详解(六)——SVN+Jenkins项目控制实战
  9. ThinkPad T14 Gen3拆机更换升级内存和固态硬盘
  10. steamcommunity本地反代443端口/80端口被占用解决办法
  11. mysql ipv4转ipv6_从IPv4到IPv6过渡
  12. bixby怎么编程_三星的Bixby可以做什么?
  13. 【真.干货】一篇文章了解关于计算机硬件那些事
  14. 你每天走的步数,手机是怎么算出来的?
  15. 《Microduino实战》——2.5 Microduino传感器系列
  16. iOS 应用闪退的原因
  17. 使用Elasticsearch计算布林带宽度指标
  18. Zcoin 项目评级:BB ,展望稳定 | TokenInsight
  19. Harbor仓库概述
  20. 简历模板和PPT素材

热门文章

  1. SpringMVC日期处理(二)
  2. 【渝粤教育】国家开放大学2018年春季 8638-21T薪酬制度与薪酬管理 参考试题
  3. 2013北理机试题——中缀算术表达式对应二叉树的先序遍历
  4. 机器学习系列(九)【最大熵模型】
  5. Intellij IDEA 发布后的项目在哪里
  6. 为PHP开发搭建环境
  7. /etc/resolv.conf
  8. IDEA的第一个java程序
  9. CSS3中的过渡、动画和变换
  10. Go-闭包和匿名函数讲解