Prometheus监控实战 第四章 监控主机和容器

监控主机和容器

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
  1. job 正在监控的事物的类型
  2. 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等仪表板可视化查询
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享