( user2+ nice2+ system2+ idle2+ iowait2+ irq2+ softirq2) - ( user1+ nice1+ system1+ idle1+ iowait1+ irq1+ softirq1)
CPU在t1到t2时间段空闲使用时间 =(idle2 - idle1)
CPU在t1到t2时间段即时利用率 = 1 - CPU空闲使用时间 / CPU总的使用时间
increase()
函数:解决counter类型的时间增量
多核CPU计算
sum()
结果求和- 获取CPU时间
- 获取空闲时间`idle`
获取总的时间
- iowait io等待时间
- irq 硬中断
- soft irq 软中断
- steal 虚拟机的分片时间
- nice 进程分配nice值的时间
- idle空闲
- user用户态
- sytem内核态
- 标签过滤 `key{label=""}`
- 模糊匹配 `key{label=~"web.*"}`
- 数值过滤
- 四则运算 `key{.} > 400`函数
- `rate(.[5m])` 搭配counter型数据, 按照设置的一个时间段,取`counter`在这个时间段的增量的平均每秒 value=∆S/∆tvalue = ∆S/∆tvalue=∆S/∆t
- 时间段的取值 要考虑采集数据的程序采集间隔
- `increase(.[5m])`搭配`counter`型数据,取一个时间段的增量 value=∆Svalue=∆Svalue=∆S
- `sum()`加和
- 结合 `by()`
- `topk(x,key)` 取最高前x位
- 不适合 `graph` ; 适用于`console` 查看
- 适合瞬时报警
- `count()`
- 模糊监控判断
- 向prometheus进行发信号
- kill -HUP pid
- 向prometheus发送HTTP请求
- curl -XPOST http://prometheus.chenlei.com/-/reload后台运行
- [使用 `screen` 工具](https://linux.cn/article-8215-1.html)
- [使用 `daemonize`](https://github.com/bmc/daemonize)yum install -y kernel-devel > yum groupinstall -y Development tools > git clone
prometheus
额外参数- –web.listen-address : 监听地址 `0.0.0.0:9090`
- –web.read-timeout : 请求链接最大等待时间 `2m`
- –web.max-connections: 最大连接数 `10`
- –storage.tsdb.retention: 数据保存期限 `90d`
- –storage.tsdb.path: 数据保存路径 `/data/prometheus/server/data`
- –query.max-concurrency: 最大并发数 `20`
- –query.timeout: 查询超时时间 `2m`存储结构
server/ └── data ├── 01DM9HP1PHHK2BD1MGC7J1C0YC │ ├── chunks │ │ └── 000001 │ ├── index │ ├── meta.json │ └── tombstones ├── 01DM9ZDG8QKWTPYZ86K7XW6FKZ │ ├── chunks │ │ └── 000001 │ ├── index │ ├── meta.json │ └── tombstones ├── 01DMAM0NM51YSQ4EVRRV46X2E1 │ ├── chunks │ │ └── 000001 │ ├── index │ ├── meta.json │ └── tombstones ├── 01DMAM0P4CGJWSSA15QPWJGZXF │ ├── chunks │ │ └── 000001 │ ├── index │ ├── meta.json │ └── tombstones ├── lock ├── queries.active └── wal ├── 00000011 ├── 00000012 ├── 00000013 ├── 00000014 ├── 00000015 ├── 00000016 ├── 00000017 ├── 00000018 └── checkpoint.000010 └── 00000000
wal/
目录中,防止突然断电或者重启,以用来恢复内存中的数据global:
scrape_interval: 5s #抓取频率
evaluation_interval: 1s
alerting:
alertmanagers:
- static_configs:
- targets:
rule_files:
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: '233-node-exporter'
static_configs:
- targets: ['192.168.9.233:9100']
- job_name: '232-node-exporter'
static_configs:
- targets: ['192.168.9.232:9100']
- job_name: '239-node-exporter'
static_configs:
- targets: ['192.168.9.239:9200']
prometheus server
可以单独运行在不同节点上,并不要求是监控节点- [0.9.1 / 2019-08-01](https://github.com/prometheus/pushgateway/releases/tag/v0.9.1)
- 下载地址: [链接](https://github.com/prometheus/pushgateway/releases/download/v0.9.1/pushgateway-0.9.1.linux-amd64.tar.gz)
- 解压
- 运行自定义采集脚本发送到pushgateway
- 安装pushgeteway
- prometheus配置job关联pushgateway
- 目标主机编写脚本采集数据
- [定时执行发送metric数据到pushgateway](https://blog.csdn.net/y_z_w123/article/details/79816474) #!/bin/bash instance_name=instance_name label=label value=123 echo "$label $value" | curl --data-binary @-
- 单点瓶颈
- 没有数据过滤
- [官网介绍](https://prometheus.io/docs/instrumenting/writing_exporters/)
- web HTTP 服务, 响应外部GET请求
- 运行在后台,定期触发抓取本地的监控数据
- 响应结果 必须符合prometheus的metrics的格式JavaSpring版exporter
- [自定义Metrics:让Prometheus监控你的应用程序(Spring版)](http://ylzheng.com/2018/01/24/use-prometheus-monitor-your-spring-boot-application/)Go语言开发Prometheus Exporter
- [grafana官网](https://grafana.com/)
- [官网安装引导](https://grafana.com/grafana/download?platform=linux)
- 默认端口: 3000配置
- 添加`prometheus`数据源
- 添加`dashboard`
- 建立Dashboard
- 数据源配置
- Visualization
- Axes
- Legend
- Thresholds & Time Regions
- Data link通用配置
- 导出json
- save as还原
- 导入json/粘贴json报警功能
报警是
- 钉钉告警
- pageduty
- 数据来源 node_exporter
- 计算公式
value=available/Sumvalue=available/Sumvalue=available/Sum
实际可用内存=free+buffers+cached
- 公式实现
- 数据来源 node_exporter
- 计算公式
value=读速度+写速度value=读速度+写速度value=读速度+写速度
- 公式实现
函数: predict_linear(), 预测趋势
- 数据来源 bash脚本+pushgateway
- 脚本编写 采集内网流量ping延迟和丢包率
instance=
- 定时执行
- 安装crontab
- 在`/etc/crontab`配置cron运行对应可执行脚本
- 查看结果
- 在prometheus查看targets有没有在线,如果没有需要到prometheus配置,记得刷新配置
- 查看配置
- 看指标,在命令行输入刚刚自定的key应该会有提示出现`lostpk` `rrt`