监控主机和容器
node_export 监控
node_export 一个可用于收集各种主机指标数据(包括CPU、内存和磁盘)的库, 安装在node上。
下载安装
prometheus.io/download/#n…
解压后在node上安装
端口号
默认9100端口
node_exporter --web.listen-address==":9600" --web.telemetry-path=="/node_metrics"
复制代码
收集列表
node_exporter --no-collector.arp
复制代码
不使用collector.arp
所有列表在 github.com/prometheus/…
textfile collector
存储信息: metadata{role="docker_server",datacenter="NJ"} 1
指定目录地址: /var/lib/node_exporter/textfile_collector/metadata.prom
--collector.textfile.directory
复制代码
systemd收集器
- docker.service Docker守护进程
- ssh.service SSH守护进程
- rsyslog.service RSyslog守护进程
node_exporter --collector.textfile.directory /var/lib/node_exporter/textfile_collector --collector.systemd --collector.systemd.unit-whitelist="(docker|ssh|rsyslog).service"
复制代码
抓取
其中9100为node_exporter的端口号
scrap_config:
- job_name: 'promethus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node'
static_configs:
- targets: ['ip1:9100', 'ip2:9100']
复制代码
过滤收集器
scrap_config:
- job_name: 'promethus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node'
static_configs:
- targets: ['ip1:9100', 'ip2:9100']
params:
collect[]:
- cpu
- meminfo
复制代码
监控docker容器
cadvisor
docker run执行 端口号8080 ui地址/containers
docker run \
...
--publish=8080:8080
google/cadvisor:latest
复制代码
抓取的生命周期
服务发现-》配置-》重新标记-》抓取-》重新标记
(还不明白为什么要重新标记两次
标签
更改或添加标签会创建新的时间序列。
标签分类
- topological label
- job 正在监控的事物的类型
- instance 目标的IP地址和端口
- schemetic label
url、error_code、user
重新标记
记住这两个阶段的最简单方法是:在抓取之前使用relabel_configs,在抓取之后使用
metric_relabel_configs
- 删除不必要的指标
- 从指标中删除敏感或不需要的标签
- 添加、编辑或修改指标的标签值或标签格式
删除指标
action:drop
替换指标
这是因为默认操作是replace,如果没有指定操作,那么Prometheus将假定你要执行替换操作。
默认情况下honor_labels为false,Prometheus将通过在其前面添加exported_前缀来重命名现有标签。
replacement: $1
删除标签
action: labeldrop
标签是时间序列的唯一性约束。如果你删除标签并导致时间序列重复,那么系统可能会出现问题!
USE方法
CPU使用率
100 - avg(irate(node_cpu_seconds_total{job="node",mode="idle"}[5m])) by (instance) * 100
复制代码
cpu饱和率
平均负载少于CPU的数量通常是正常的,长时间内超过该数字的平均值则表示CPU已饱和。
- cpu数量:
count by (instance) (node_cpu_seconds_total{mode="idle"})
复制代码
- node_load:
它们显示了1分钟、5分钟和15分钟的平均负载。1分钟的平均负载:node_load1。
node_load1 > on (instance) 2 * count by (instance) (node_cpu_seconds_total{mode="idle"})
复制代码
内存使用率
单位为字节
- node_memory_MemTotal_bytes:主机上的总内存
- node_memory_MemFree_bytes:主机上的可用内存
- node_memory_Buffers_bytes:缓冲缓存中的内存
- node_memory_Cached_bytes:页面缓存中的内存
后三个加起来,是内存可用内存总和
100 - (node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes)) / node_memory_MemTotal_bytes * 100
复制代码
内存饱和度
1024 * sum by (instance) (
(rate(node_vmstat_pswpin[1m]) + rate(node_vmstat_pswpout[1m]))
)
复制代码
node_exporter 从/proc/vmstat中收集到的,上次启动以来的字节数,以KB为单位。
- node_vmstat_pswpin:系统每秒从磁盘读到内存的字节数
- node_vmstat_pswpout:系统每秒从内存写到磁盘的字节数
磁盘使用率
对于磁盘,我们只测量磁盘使用情况而不是使用率、饱和度或错误。
(1-node_filesystem_size_bytes{mountpoint="/data"}/node_filesystem_free_bytes{mountpoint="/data"})*100
复制代码
predict_linear(node_filesystem_free_bytes{job="node"}[1h], 4*3600) < 0
复制代码
服务状态
node_systemd_unit_state
metadata 指标
node_systemd_unit_state{name="docker.service"} == 1
and on (instance, job)
metadata{datacenter="SF"}
复制代码
查询持久性
evaluation_interval 就是这里的时间
rule_files:
- "rules/node_rules.yml"
复制代码
- 记录规则:根据查询创建新指标
跨多个时间序列生成聚合。
预先计算消耗大的查询
- 警报规则:从查询生成警报
- 可视化:使用Grafana等仪表板可视化查询