Monitoring with Prometheus读书笔记

原书见:

https://www.safaribooksonline.com/library/view/monitoring-with-prometheus/9780988820289/


摘录了一些内容,稍微整理了下,更详细的内容可以阅读原书.

简介

Prometheus灵感来源于谷歌的borgmon.

他的设计专注于最近发生的事,而不是几个星期几个月前的,默认只保存15天的时间序列.

内置PromQL查询语言,可以方便进行metric查询和定义新的metric.

数据格式

<time series name>{<label name>=<label value>, ...}

例子:

total_website_visits{site="MegaApp", location="NJ", instance="webserver",job="web"}

安装

安装过程比较简单,官网下载之后解压即可.

windows下可以使用choco安装:

choco install prometheus

也可以使用docker运行:

docker run -p 9090:9090 prom/prometheus

解压后自带一个配置文件,启动时带上文件路径即可:

prometheus --config.file "/etc/prometheus/prometheus.yml"

(放置在了/etc/prometheus下)

默认跑在9090端口.

监控容器和节点

节点(机器)监控可以使用node exporter.

下载node exporter 解压 复制到可执行中

wget https://github.com/prometheus/node_exporter/releases/download/v0.16.0/node_exporter-0.16.0.linux-amd64.tar.gz
$ tar -xzf node_exporter-*
$ sudo cp node_exporter-*/node_exporter /usr/local/bin/

默认是9100端口,可以通过/metrics访问.

收集的数据较多,不需要的指标可以通过--no-模块名禁用,同时一些没有开启的模块可以通过--模块名开启.

容器监控可以使用cadvisor

docker run \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:rw \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--volume=/dev/disk/:/dev/disk:ro \
--publish=8080:8080 \
--detach=true \
--name=cadvisor \
google/cadvisor:latest

监听在8080端口.

对应的Prometheus配置修改:

scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node'
static_configs:
- targets: ['138.197.26.39:9100', '138.197.30.147:9100', '138.197.30.163:9100']
- job_name: 'docker'
static_configs:
- targets: ['138.197.26.39:8080', '138.197.30.147:8080', '138.197.30.163:8080']

(ip等信息写在targets中)

Label

注意改变一个label或增加一个新的label会创建一个新的time series.

对收集的metrics的label进行操作.

可以去掉不必要的metrics和label,增加编辑label.

有两个阶段可以修改:

  • relabel_configs:用来修改服务发现过来的元数据label.
  • metric_relabel_configs:获得数据存储到磁盘之前操作

如图所示:

一些配置(和job_name平级):

metric_relabel_configs:
- source_labels: [__name__]
separator: ','
regex: '(container_tasks_state|container_memory_failures_total)'
action: drop

__name__是metrics的保留label,表示这个metric的名字,这里将这些名字用,拼起来,过滤掉符合正则的名字的metrics.

metric_relabel_configs:
- source_labels: [id]
regex: '/docker/([a-z0-9]+);'
replacement: '$1'
target_label: container_id

替换掉id符合正则的内容产生另一个名为container_id的label.

此外有一个honor_labels的参数可以控制替换后的label和现有重名的问题,默认为false,现有的冲突会加上exported_的前缀.设置为true,会忽略该替换的label.

metric_relabel_configs:
- regex: 'kernelVersion'
action: labeldrop

移除掉现有符合正则的label.

Metrics

CPU利用率

使用node_cpu_seconds_total

如图:

计算5min为取样每秒的瞬时利用率

100 - avg (irate(node_cpu_seconds_total{job="node",mode="idle"}[5m])) by (instance) * 100

5m是range vector,表示使用记录的上一个5分钟的数据.

irate是瞬时变化率,适合变化较频繁的metric.

avg是因为有多个metrics(分别是每核的)

CPU饱和度

node_load*

后面的*有1 5 15,表示多少分钟.

该metric和核数有关,查看核数可以使用:

count by (instance)(node_cpu_seconds_total{mode="idle"})

内存使用

node_memory_*

列出空闲内存

(node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Cached_bytes + node_memory_Buffers_bytes)) / node_memory_MemTotal_bytes * 100

内存饱和度

监控paging in和paging out的内存

/proc/vmstat

node_vmstat_pswpin

node_vmstat_pswpout

单位是KB

1024 * sum by (instance) (
(rate(node_vmstat_pgpgin[1m])
+ rate(node_vmstat_pgpgout[1m]))
)

算出每分钟的变化量

rate是平均变化率,相比irate适合变化幅度不剧烈的数据.

磁盘使用率

node_filesystem_*

使用率:

(node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_free_bytes{mountpoint="/"}) / node_filesystem_size_bytes{mountpoint="/"} * 100

可以用=~匹配正则 相对的有!~

predict_linear(node_filesystem_free_bytes{job="node"}[1h], 4*3600) < 0

通过1h的估计量 看看4h后是否会用完

exporter的可用性监控

可以使用up.

up{job="node"}

返回1表示node_exporter存活.

持久化Query

除了直接查询,query还可以在其他场合持久化使用:

  • Recording rule - 通过query创建新的metrics
  • Alerting rules - 生成报警
  • Visualization - 可视化

设置prometheus.yml的rules_files块,增加一个新的rule:

rule_files:
- "rules/node_rules.yml"

对应的该文件内容如下:

groups:
- name: node_rule
rules:
- record: instance:node_cpu:avg_rate5m
expr: 100 - avg (irate(node_cpu_seconds_total{job="node",mode="idle"}[5m])) by (instance) * 100

配置文件修改后可以使用promtool的对应命令,比如promtool check rules node_rules.yml进行检查.

可以在Prometheus上通过/rules查看:

可视化

使用grafana

centos下安装:

wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.2.2-1.x86_64.rpm
sudo yum localinstall grafana-5.2.2-1.x86_64.rpm

配置在/etc/grafana/grafana.ini.

通过sudo service grafana-server start启动服务.

默认使用3000端口.

默认用户名和密码在配置文件,为admin:admin.

登陆后增加数据源选择Prometheus即可.

然后可以新增dashboard,配置对应的查询:


文中可能会有不少错误,欢迎提出.

原书的内容更为详尽和丰富,有兴趣的可以阅读原书.


参考资料:

https://prometheus.io/docs/prometheus/latest/getting_started/

https://github.com/prometheus/node_exporter

https://github.com/google/cadvisor

https://grafana.com/

https://legacy.gitbook.com/book/songjiayang/prometheus/details

Prometheus使用入门的更多相关文章

  1. Prometheus 入门教程(一):Prometheus 快速入门

    文章首发于[陈树义]公众号,点击跳转到原文:https://mp.weixin.qq.com/s/ZXlBPHGcWeYh2hjBzacc3A Prometheus 是任何一个高级工程师必须要掌握的技 ...

  2. Prometheus快速入门

    Prometheus是一个开源的,基于metrics(度量)的一个开源监控系统,它有一个简单而强大的数据模型和查询语言,让我们分析应用程序.Prometheus诞生于2012年主要是使用go语言编写的 ...

  3. Prometheus从入门到精通:一、部署

    一.Prometheus是什么? prometheus是一个开源指标监控解决方案,指标就是指的CPU的使用率.内存使用率等数据. 二.Prometheus的架构 这里直接粘贴官网的架构图: 三.安装 ...

  4. 主流前沿的开源监控和报警系统Prometheus+Grafana入门之旅

    Prometheus概述 定义 Prometheus 官网地址 https://prometheus.io/ Prometheus 官网文档地址 https://prometheus.io/docs/ ...

  5. 实战 Prometheus 搭建监控系统

    实战 Prometheus 搭建监控系统 Prometheus 是一款基于时序数据库的开源监控告警系统,说起 Prometheus 则不得不提 SoundCloud,这是一个在线音乐分享的平台,类似于 ...

  6. Hyperledger Explorer

    简介 Hyperledger Explorer is a simple, powerful, easy-to-use, well maintained, open source utility to ...

  7. Prometheus监控学习笔记之Prometheus普罗米修斯监控入门

    0x00 概述 视频讲解通过链接网易云课堂·IT技术快速入门学院进入,更多关于Prometheus的文章. Prometheus是最近几年开始流行的一个新兴监控告警工具,特别是kubernetes的流 ...

  8. Prometheus监控系统之入门篇(一)续

    在上篇Prometheus监控系统之入门篇(一)中我们讲解了Prometheus的基本架构和工作流程, 并从0到1搭建了Prometheus服务,pushgateway以及告警系统. 本篇我们主要介绍 ...

  9. Prometheus入门教程(二):Prometheus + Grafana实现可视化、告警

    文章首发于[陈树义]公众号,点击跳转到原文:https://mp.weixin.qq.com/s/56S290p4j9KROB5uGRcGkQ Prometheus UI 提供了快速验证 PromQL ...

随机推荐

  1. java servlet的域对象

    在进行网络编程中的项目时 经常用到的域对象主要包括以下三种: 1. ServletContext  作用范围比较大 代码如下: //一个请求代码: ServletContext sc = reques ...

  2. nltk 词性解析

    转载链接: https://blog.csdn.net/pengjian444/article/details/81143983

  3. 维护爬虫代理IP池--采集并验证

    任务分析 我们爬的免费代理来自于https://www.kuaidaili.com这个网站.用`requests`将ip地址与端口采集过来,将`IP`与`PORT`组合成`requests`需要的代理 ...

  4. SQL注入——知表名不知列明情景下查询数据

    场景 有某些情况,可以查找到表名,但查找不到列名. MySQL < 5 或 web过滤 information_scema 详解 select `1` from (select 1,2,3,4, ...

  5. Python-杂物

    1,and和or 在一个bool and a or b语句中,当bool条件为真时,结果是a:当bool条件为假时,结果是b. a = "heaven" b = "hel ...

  6. c#发送短息验证码

    <add key="WebReference.Service.PostUrl" value="http://106.ihuyi.cn/webservice/sms1 ...

  7. NOIP-珠心算

    题目描述 珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术.珠心算训练,既能够开发智力,又能够为日常生活带来很多便利,因而在很多学校得到普及. 某学校的珠心算老师采用一种快速考察珠心算加 ...

  8. Android Studio的构建系统:Gradle

    原文作者:youxiachai <用Gradle 构建你的android程序> 前言 android gradle 的插件终于把混淆代码的task集成进去了,加上最近,android st ...

  9. codeforces 13 b

    给你三根线段判段是否组成了A 条件,两条线段交于端点并且夹角不大于90,第三条线段端点在两条线段上并且划分的大小满足 大:小<4:1 注释很全.(主要是我记不清楚了,,好像过了一个多星期了) # ...

  10. 【技术分享】BurpSuite 代理设置的小技巧

    作者:三思之旅 预估稿费:300RMB 投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿 在Web渗透测试过程中,BurpSuite是不可或缺的神器之一.BurpSuite的核心是 ...