Docker 容器监控

news2024/10/6 16:22:51

目录

cAdvisor

安装cAdvisor

使用Prometheus监控cAdvisor

cAdvisor暴露的Prometheus指标

容器指标

1. 文档:

2. 指标

 硬件指标

1. 文档:

2. 指标:

Node Exporter 

安装Node Exporter

1. 启动容器,默认端口为9100

2. 访问http端点,查看指标

3. --collector. 启用指标,--no-collector. 禁用指标,--collector.disable-defaults 禁用所有默认启用 的指标。例如:

指标

 默认禁用指标

1. 文档:

2. 禁用指标的原因:

3. 指标

 Prometheus

安装

1. 配置文件

2. 启动容器

3. 访问端点:http://192.168.1.197:9090

 4. 指标类型

5. 5分钟CPU使用率表达式

6. 机器平均负载,node_load1 1分钟平均负载,node_load5 5分钟平均负载,node_load15 15分钟 平均负载

7. 内存使用率

8. 磁盘空间使用率

规则配置

规则检查

记录规则

报警规则

配置文件中指定规则文件

报警管理器

grafana

1. 源码地址

GitHub - grafana/grafana: The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more.

2. 官网

3. 安装使用,默认用户名:admin 默认密码:admin

4. 几个现有的grafana 模板

5. 去官网挑选模板

cAdvisor

源码:https://github.com/google/cadvisor

node exporter

源码:https://github.com/prometheus/node_exporter

prometheus:

官方文档:https://prometheus.io/ PromQL

文档:https://prometheus.io/docs/prometheus/latest/querying/basics/

源码:https://github.com/prometheus/prometheus

报警管理器文档:https://prometheus.io/docs/alerting/latest/overview/

报警管理器源码:https://github.com/prometheus/alertmanager

中文文档:https://www.prometheus.wang/quickstart/why-monitor.html

cAdvisor

cAdvisor让容器用户了解容器的资源使用情况和性能特征。用于收集、聚合、处理和导出有关正在运行的容器的信息。它为每个容器保存资源隔离参数、历史资源使用情况、完整历史资源使用直方图和网络统计信息。简而言之:对容器进行实时监控和性能数据采集,包括CPU、内存、网络、文件系统等资源的使用情况

安装cAdvisor

1. 下载二进制文件:https://github.com/google/cadvisor/releases/download/v0.46.0/cadvisorv0.46.0-linux-amd64

2. 编写Dockerfile构建容器

FROM ubuntu:latest
LABEL cadvisor 0.46.0
COPY ./cadvisor-v0.46.0-linux-amd64 /usr/bin/cadvisor
RUN chmod +x /usr/bin/cadvisor
ENTRYPOINT ["/usr/bin/cadvisor"]

docker build -t cadvisor:0.46.0 .

3. 运行容器

docker run \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:ro \
--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 \
--userns=host \
--privileged \
--device=/dev/kmsg \
cadvisor:0.46.0

4. web访问监控图标

http://localhost:8080

使用Prometheus监控cAdvisor

cAdvisor将容器和硬件统计数据公开为Prometheus开箱即用的指标。默认情况下,这些指标在http端点的/metrics路径下。例如:http://192.168.1.197:8080/metrics。可以通过设置

-prometheus_endpoint和-disable_metrics或-enable_metrics命令行标志来自定义此端点

1. -disable_metrics:

要禁用的指标的逗号分隔列表。选项包括: accelerator,advtcp,app,cpu,cpuLoad,cpu_topology,cpuset,disk,diskIO,hugetlb,memory,memo ry_numa,network,oom_event,percpu,perf_event,process,referenced_memory,resctrl,sched,tc p,udp。默认值: advtcp,cpu_topology,cpuset,hugetlb,memory_numa,process,referenced_memory,resctrl,sche d,tcp,udp。

2. -enable_metrics:

要启用的指标的逗号分隔列表,如果设置则覆盖-disable_metrics选项。选项包括: accelerator,advtcp,app,cpu,cpuLoad,cpu_topology,cpuset,disk,diskIO,hugetlb,memory,memo ry_numa,network,oom_event,percpu,perf_event,process,referenced_memory,resctrl,sched,tc p,udp。

3. -prometheus_endpoint:

暴露普罗米修斯指标的端点(默认为“/metrics”)

4. 示例:

docker run \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:ro \
--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 \
--userns=host \
--privileged \
--device=/dev/kmsg \
cadvisor:0.46.0 -disable_metrics cpu,cpuLoad

cAdvisor暴露的Prometheus指标

容器指标

1. 文档:

https://github.com/google/cadvisor/blob/master/docs/storage/prometheus.md#prometheus -container-metrics

2. 指标

 硬件指标

1. 文档:

https://github.com/google/cadvisor/blob/master/docs/storage/prometheus.md#prometheus -hardware-metrics

2. 指标:

 

Node Exporter 

Node Exporter 是prometheus官方提供的agent,项目被托管在prometheus的账号之下。用于收集主机的硬件和操作系统指标。

安装Node Exporter

1. 启动容器,默认端口为9100

# 安装Node Exporter 来收集硬件信息
docker run -d \
--net="host" \
--pid="host" \
--userns="host" \
-v "/:/host:ro,rslave" \
--name node_exporter \
quay.io/prometheus/node-exporter:latest \
--path.rootfs=/host

2. 访问http端点,查看指标

http://192.168.1.197:9100/metrics

3. --collector. 启用指标,--no-collector. 禁用指标,--collector.disable-defaults 禁用所有默认启用 的指标。例如:

docker run -d \
--net="host" \
--pid="host" \
--userns="host" \
-v "/:/host:ro,rslave" \
--name node_exporter \
quay.io/prometheus/node-exporter:latest \
--path.rootfs=/host \
--collector.disable-defaults \
--collector.arp --collector.bcache

指标

默认启用指标

1. 文档:

https://github.com/prometheus/node_exporter#enabled-by-default

2. 指标

 

 

 

 默认禁用指标

1. 文档:

https://github.com/prometheus/node_exporter#disabled-by-default

2. 禁用指标的原因:

1.高基数,

2.运行时长超过Prometheus scrap_interval或scrap_timeout设置的 时长,

3.对主机资源消耗巨大。因此,启用默认禁用指标需慎重,按需启用。

3. 指标

 

 Prometheus

一个开源的监控和报警系统,通过定时收集采集端的数据,经过计算存入到时序数据库。通过PromQL 对时序数据库中的指标进行计算,从而分析出系统的状态。通过定时评估指定的基于PromQL的表达式 从而实现警告的触发。

安装

1. 配置文件

global:
# 每20s获取一次数据指标
scrape_interval: 20s
# 获取数据超时时长 10s
scrape_timeout: 10s
# 规则评估评率,即计算指标是否有触发规则的计算频率
evaluation_interval: 20s
# 规则文件,从所有匹配的文件中读取规则和警报
rule_files:
- "alertRule.yml"
- "recordRule.yml"
# 采集配置列表
scrape_configs:
- job_name: 'cadvisor'
static_configs:
- targets:
- 192.168.239.149:8080
- job_name: 'node'
static_configs:
- targets:
- 192.168.239.149:9100
- 192.168.239.142:9100
- 192.168.239.143:9100
- job_name: 'prometheus'
static_configs:
- targets:
- 192.168.239.149:9090
# 报警管理
alerting:
alertmanagers:
- static_configs:
- targets: ['192.168.239.149:9093']

检查配置文件语法:

docker run --rm --entrypoint promtool -v /opt/prometheus:/etc/prometheus prom/prometheus check config /etc/prometheus/prometheus.yml

2. 启动容器

docker run -itd --name prometheus -p 9090:9090 \
-v /opt/prometheus:/etc/prometheus \
prom/prometheus --config.file=/etc/prometheus/prometheus.yml

3. 访问端点:http://192.168.1.197:9090

 4. 指标类型

Counter:计数器,只增不减,用于描述某个指标的累计状态。比如cpu总使用时长: node_cpu_seconds_total

Gauge:可增可减的计量器,用于描述某个指标的当前状态,比如空闲内存空间: node_memory_MemFree_bytes

5. 5分钟CPU使用率表达式

1 - 5分钟内增量空闲CPU/5分钟内增量总CPU ,按instance分组。由于 node_cpu_seconds_total指标是一个counter类型,所以该指标是一直累计CPU使用量,因此需要 以增量来获取CPU的量。表达式如下:

100- sum(increase(node_cpu_seconds_total{mode="idle"}[5m])) by (instance)/sum(increase(node_cpu_seconds_total[5m])) by (instance) * 100

6. 机器平均负载,node_load1 1分钟平均负载,node_load5 5分钟平均负载,node_load15 15分钟 平均负载

node_load1

node_load5

node_load15

7. 内存使用率

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

8. 磁盘空间使用率

node_filesystem_avail_bytes 可用字节数 ,node_filesystem_size_bytes 总字 节数

node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"} * 100

规则配置

规则检查

promtool check rules /path/to/example.rules.yml

记录规则

roups:
- name: RecordCpu
rules:
- record: Cpu15mRate
expr: 100- sum(increase(node_cpu_seconds_total{mode="idle"}[15m])) by
(instance)/sum(increase(node_cpu_seconds_total[15m])) by (instance) * 100
labels:
CpuRate: 15

报警规则

groups:
# 组名
- name: node_health
# 规则
rules:
# 报警名称
- alert: InstanceDown
# 基于PromQL的条件表达式
expr: up == 0
# 评估等待时间,表示,触发条件表达式后,等待一段时间发送报警信息
for: 1m
# 自定义label 标签
labels:
NodeHealth: false
# 附加信息,比如详细的描述报警情况
annotations:
# 摘要
summary: "Instance {{ $labels.instance }} down"
# 详情
description: " {{ $labels.instance }} of job {{ $labels.job }} has been
down for more than 1 minutes "
- name: node_resource
rules:
- alert: Cpu5mRate
expr: 100- sum(increase(node_cpu_seconds_total{mode="idle"}[5m])) by
(instance)/sum(increase(node_cpu_seconds_total[5m])) by (instance) * 100 > 2
labels:
CpuRate: hight
annotations:
# 摘要
summary: "Instance {{ $labels.instance }} 5分钟CPU使用率过高"
# 详情
description: " {{ $labels.instance }} of job {{ $labels.job }} 5分钟CPU使用
率过高 "
- alert: NodeLoad15
expr: node_load15 > 0.8
labels:
NodeLoad15: hight
annotations:
# 摘要
summary: "Instance {{ $labels.instance }} 15分钟平均负载过高请留意"
# 详情
description: " {{ $labels.instance }} of job {{ $labels.job }} 15分钟平均负载
过高 "
- alert: MemRate
expr: (node_memory_MemTotal_bytes - (node_memory_MemFree_bytes +
node_memory_Buffers_bytes+node_memory_Cached_bytes ))/node_memory_MemTotal_bytes
* 100 > 20
labels:
NodeMemRate: hight
annotations:
# 摘要
summary: "机器内存使用率过高"
# 详情
description: "机器内存使用率超过20%,请留意"
- alert: DiskRate
expr: node_filesystem_avail_bytes{mountpoint="/"} /
node_filesystem_size_bytes{mountpoint="/"} * 100 > 80
labels:
DiskRate: hight
annotations:
# 摘要
summary: "机器磁盘使用率过高"
# 详情
description: "机器磁盘使用率超过80%,请留意"

配置文件中指定规则文件

rule_files:

    - "alertRule.yml"

    - "recordRule.yml"

报警管理器

报警管理器负责接收prometheus产生的报警,对报警消息进行管理。

例如:

去重:对同时触发的多个相同的警报去重

分组:同一个组的所有警报信息将被合并为一个警报通知,避免一次性接收大量的警告通知 路由:可根据情况配置路由,通知不同角色的运维人员

抑制:当某一个警告发出后,可以停止重复发送由此警告引发的其他警告

静默:被静默的标签将不会进行警告通知

1. 启动报警管理器

docker run --name alertmanager -d -p 9093:9093 quay.io/prometheus/alertmanager

2. 添加配置到prometheus 配置文件

# 报警管理
alerting:
alertmanagers:
- static_configs:
- targets: ['192.168.239.149:9093']

3. 访问http://192.168.1.197:9093可查看报警信息

grafana

一个开源的监控系统Web UI ,支持多种数据源。支持自定义看板,以及采用官方现有数据看板。

1. 源码地址

GitHub - grafana/grafana: The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more.

2. 官网

Grafana Cloud | Observability platform overview

3. 安装使用,默认用户名:admin 默认密码:admin

docker run -d -p 3000:3000 --name=grafana -v /var/lib/grafana grafana/grafana-enterpris

4. 几个现有的grafana 模板

1860 、9276、193、11600

5. 去官网挑选模板

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/168481.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023免费电脑c盘磁盘数据恢复软件EasyRecovery

无论是台式机还是笔记本电脑,我们都习惯将其划分成多个大小不一的磁盘,有的是用于安装系统,有的则是用于存储文件。今天小编就和大家解答一下关于电脑磁盘的问题,电脑只剩c盘是硬盘坏了吗,电脑突然就剩c盘怎么恢复。想…

【BP靶场portswigger-客户端16】测试WebSockets安全漏洞-3个实验(全)

前言: 介绍: 博主:网络安全领域狂热爱好者(承诺在CSDN永久无偿分享文章)。 殊荣:CSDN网络安全领域优质创作者,2022年双十一业务安全保卫战-某厂第一名,某厂特邀数字业务安全研究员&…

CMMI落地4大工具 助力CMMI3-5级高效落地

CMMI落地4大工具近日正式上线,全面支持CMMI3-5级,助力CMMI高效落地。CoCode旗下的Co-ProjectV3.0智能项目管理平台全新发布:CMMI成熟度自测工具、量化管理工具(组织级过程改进工具和量化项目管理工具)、组织级过程资产…

分享视频剪辑必备的三个素材软件(配音/文案/图片)

hello,大家好,相信现在很多小伙伴都需要制作视频,无论是从事短视频行业,还是单纯想分享生活视频的都需要对视频进行简单的处理吧?有时候会需要介绍视频内容或是给视频增加点配音,来让视频不那么单调&#x…

C++11 解决内存泄露问题的智能指针:shared_ptr、unique_ptr、weak_ptr

我们经常听到内存泄漏,但是对这个抽象的概念一直没有什么理解,比如产生内存泄漏又将如何,我平时写程序从来不考虑这个等等。这篇的目的:第一,给大家实验实验内存泄露带来的问题,让大家直观感受内存泄露。第…

[数据结构基础]链式二叉树及其前序、中序和后序遍历

一. 链式二叉树的结构和实现 1.1 链式二叉树的结构 链式二叉树,即使用链来表示一颗二叉树。链式二叉树的存储又可分为二叉链和三叉链,其中二叉链存储节点数据、指向左子节点的指针和指向右子节点的指针,三叉链相对于二叉链多存储指向父亲节…

一种基于肌电信号运动起点、波峰、终点实时自动检测的方法

一种基于肌电信号运动起点、波峰、终点实时自动检测的方法 (⊙o⊙)…,这篇是我写收费文章的第一篇。咱也尝试下知识付费,哈哈。 先看下效果,在给定理想正弦波的情况下,可以准确识别到正弦波的起点、波峰和终点。机器实拍图如下。 因为我的实际环境没有专利里面那么复杂,所…

Android 蓝牙开发——基础开发(三)

蓝牙开发这部分主要以 APP 端调用功能接口为开始&#xff0c;到 Framework 端的调用流程&#xff0c;最后到调用状态机结束&#xff0c;不涉及蓝牙协议栈的开发分析。 一、BluetoothAdapter 1、APP获取适配器 蓝牙权限 <mainifest><uses-permission android:name&…

3.ESP32-S2/S3 USB 挂载SPI-SD,当作U盘使用,无线U盘

使用的 IDF_4.4 C语言开发 1.ESP32-S2/S3 USB烧录 输出日志 2.ESP32-S2/S3 USB 挂载内部Flash&#xff0c;当作U盘使用&#xff0c;无线U盘 3.ESP32-S2/S3 USB 挂载SPI-SD&#xff0c;当作U盘使用&#xff0c;无线U盘 目录1.打开 usb_msc_wireless_disk 工程 Confinguration2.…

数学建模-数学规划(Matlab)

目录 一、线性规划求解 二、非线性规划问题 三、整数规划&#xff08;包括0-1规划&#xff09; 四、最大最小化模型 五、多目标规划模型 注意&#xff1a;代码文件仅供参考&#xff0c;一定不要直接用于自己的数模论文中国赛对于论文的查重要求非常严格&#xff0c;代码雷同…

微服务Spring Boot 整合 Redis 实现 UV 数据统计

文章目录⛄引言一、HyperLoglog基础用法⛅HyperLoglog 基本语法、命令⚡HyperLoglog 命令完成功能实现二、UV统计 测试百万数据的统计☁️什么是UV统计⚡使用SpringBoot单元测试进行测试百万数据统计⛵小结⛄引言 本文参考黑马 点评项目 在各个项目中&#xff0c;我们都可能需…

DaVinci:限定器 - HSL

调色页面&#xff1a;限定器Color&#xff1a;Qualifier限定器 - HSL Qualifier - HSL根据色相、饱和度和亮度等来选择画面上的对应区域&#xff0c;从而将二级调色与修饰限制在一定的范围。选择范围Selection Range拾取器Picker在检视器画面上按住并拖动&#xff0c;可以选择相…

Linux FHS结构

FHS是Filesystem Hierarchy Standard&#xff08;文件系统层次化标准&#xff09;的缩写&#xff0c;多数Linux版本采用这种文件组织形式&#xff0c;类似于Windows操作系统中c盘的文件目录&#xff0c;FHS采用树形结构组织文件。FHS定义了系统中每个区域的用途、所需要的最小构…

格式化输出

1、golang不同输出语句的区别&#xff1a; 特点PrintPrintlnPrintf输出内容到控制台&#xff08;终端输出&#xff09;SprintSprintlnSprintf输出内容为字符串FprintFprintlnFprintf输出内容到文件特点 输出内容不会换行。 不能格式化字符串。 输出内容换行,。 不能格式化字符…

【C语言进阶】枚举与联合体

目录一&#xff1a;枚举1.1&#xff1a;枚举类型的定义&#xff1a;1.1&#xff1a;枚举的优点&#xff1a;1.2&#xff1a;枚举的使用&#xff1a;二&#xff1a;联合&#xff08;共用体&#xff09;2.1&#xff1a;联合类型的定义&#xff1a;2.2&#xff1a;联合类型的特点&…

cin、cin.getline(arr, size)、getline(cin, str)

一、cin使用空白&#xff08;空格、制表符、换行符&#xff09;来确定字符串的截止位置 注意下方这段代码 使用cin来接收姓名和甜点名&#xff0c;当我的名字长度大于一个单词长度时&#xff0c;cin直接按空格进行接收&#xff0c;将我输入的xiao接收到name中&#xff0c;wei接…

swiftUI coreml deeplabv3去除背景

现在手机的性能越来越好&#xff0c;好多深度学习的框架都能能够跑在手机上。因此就集成一下一个官方的深度学习model试一下。 其他的框架生成的模型都能通过相应的工具转换成mlmodel用&#xff0c;转换也比较简单。 下面以替换图像去背景为例&#xff0c;不过官方模型这个效果…

概论_第3章_二维随机变量__边缘概率密度

边缘概率密度是二维随机变量中的重点内容&#xff0c; 经常作为一个重要的考点&#xff0c; 必须掌握。一 定义对二维随机变量(X, Y) ,分量X, 或者Y的概率密度称为 (X, Y)的边缘概率密度&#xff0c;简称边缘密度&#xff0c;记为 或者 。边缘密度 或者 可由 二维随机变量的密…

什么是pod(容器组)

pod&#xff08;容器组&#xff09; 术语中英文对照&#xff1a; 英文全称英文缩写中文翻译PodPod容器组ContainerContainer容器ControllerController控制器 什么是 Pod 容器组&#xff1f; Pod&#xff08;容器组&#xff09;是 Kubernetes 中最小的可部署单元。一个 Pod&a…

基于FPGA的UDP 通信(六)

引言 前文链接&#xff1a; 基于FPGA的UDP 通信&#xff08;一&#xff09; 基于FPGA的UDP 通信&#xff08;二&#xff09; 基于FPGA的UDP 通信&#xff08;三&#xff09; 基于FPGA的UDP 通信&#xff08;四&#xff09; 基于FPGA的UDP 通信&#xff08;五&#xff09;…