【云原生】Prometheus监控Docker指标并接入Grafana
目录
一、前言
二、docker监控概述
2.1 docker常用监控指标
2.2 docker常用监控工具
三、CAdvisor概述
3.1 CAdvisor是什么
3.2 CAdvisor功能特点
3.3 CAdvisor使用场景
四、CAdvisor对接Prometheus与Grafana
4.1 环境准备
4.2 docker部署CAdvisor
4.2.2 docker部署CAdvisor服务
4.2.3 访问界面
4.2.4 访问metrics
4.3 配置Prometheus
4.3.1 修改Prometheus配置文件
4.3.2 重启Prometheus服务
4.3.3 访问Prometheus控制台
4.4 接入Grafana
4.4.1 Grafana官网找一个模板
4.4.2 Grafana配置dashboard模板
五、写在最后
一、前言
docker的规模化使用已经成为当下的趋势,尤其是云原生技术的发展让docker的重要性得到进一步的提升,使用docker部署一些常规的中间件非常方便,不仅大大降低了环境搭建的成本,也能够在一定程度上节省了不少的资源,但是随之而来,也同时出现另一个问题就是尽管docker部署方便,但是一旦机器上部署的docker容器越来越多,如何对它们进行监控呢,毕竟docker也是要吃机器资源的,本文将通过实际案例来说明下如何解决这个问题。
二、docker监控概述
2.1 docker常用监控指标
在监控Docker容器时,以下是一些常用的监控指标:
-
CPU使用率
-
描述:容器的CPU使用百分比。
-
用途:监控容器是否超出CPU资源限制,识别高负载问题。
-
-
内存使用量
-
描述:容器使用的内存总量和内存限制。
-
用途:监控内存使用情况,防止内存泄漏或过度使用。
-
-
网络流量
-
描述:容器的网络流入和流出流量。
-
用途:检测网络瓶颈或异常流量模式。
-
-
磁盘I/O
-
描述:容器的磁盘读写操作量。
-
用途:监控磁盘性能,避免I/O瓶颈。
-
-
文件系统使用量
-
描述:容器文件系统的总使用空间和可用空间。
-
用途:确保容器有足够的磁盘空间。
-
-
容器状态
-
描述:容器的运行状态(运行中、停止、重启等)。
-
用途:监控容器的健康状态,识别崩溃或重启事件。
-
-
进程数量
-
描述:容器内部运行的进程数量。
-
用途:检测进程异常,防止资源耗尽。
-
-
容器日志
-
描述:容器内部应用程序或系统产生的日志信息。
-
用途:排查应用程序问题,查看错误和警告信息。
-
-
运行时间
-
描述:容器自启动以来的运行时间。
-
用途:监控容器的稳定性和正常运行时间。
-
-
负载平均值
-
描述:容器的系统负载平均值。
-
用途:评估系统负载情况,识别潜在的性能问题。
-
利用上面这些指标,可以帮助运维人员全面了解容器的健康状况和性能表现,从而进行有效的管理和优化。
2.2 docker常用监控工具
目前市面上也陆陆续续出现了不少关于docker的监控方案,下面列举一些docker常用监控工具
-
cAdvisor
-
Google开发的开源项目,用于收集、聚合、分析容器的资源使用和性能数据。
-
-
Prometheus
-
开源的系统和服务监控系统,可与Grafana等配合使用,支持Docker容器的监控和告警。
-
-
Grafana
-
开源的数据可视化和监控平台,支持多种数据源,可以与Prometheus等监控工具集成,用于实时监控和数据展示。
-
-
Datadog
-
云监控和安全平台,提供Docker容器监控功能,支持自定义仪表盘、告警设置等。
-
-
Sysdig
-
提供容器和云环境的监控解决方案,支持Docker和Kubernetes集成,提供实时和历史性能数据。
-
利用这些工具可以帮助管理员监视Docker容器的资源使用情况、性能指标、日志和事件,有助于优化和管理容器化环境。
三、CAdvisor概述
3.1 CAdvisor是什么
cAdvisor(Container Advisor)是一个由Google开发的开源项目,专为监控Docker容器而设计。它提供了容器级别的资源使用情况和性能指标,帮助用户深入了解每个运行中的容器的运行状态和资源消耗情况。
3.2 CAdvisor功能特点
CAdvisor具有下面的功能特点:
-
资源使用情况监控
-
cAdvisor能够监控CPU、内存、磁盘和网络的使用情况,并提供实时的性能指标。
-
-
容器级别视角
-
与传统的宿主机监控工具不同,cAdvisor专注于每个独立容器的监控,提供更精细化的数据。
-
-
跨平台支持
-
支持多种容器运行时,如Docker和Kubernetes等,以及多种操作系统。
-
-
轻量级和易集成
-
作为一个轻量级的容器内部监控工具,cAdvisor可以与其他监控系统集成,如Prometheus和Grafana,实现更复杂的监控和报告。
-
-
Web界面和API支持
-
通过Web界面和API,用户可以直观地查看和管理监控数据,支持数据的导出和自定义查询。
-
3.3 CAdvisor使用场景
cAdvisor广泛应用于容器化环境中,特别是Docker和Kubernetes集群中,用于实时监控和性能优化,其功能和特性使其在以下场景中特别有用:
-
性能调优:
-
通过监控资源使用情况,帮助用户识别和解决性能瓶颈,优化容器应用的性能。
-
-
资源管理
-
确保容器在资源限制下正常运行,避免资源竞争和耗尽问题,提高整体资源利用率。
-
-
容器健康检查:
-
监控容器的运行状态和行为,及时发现和处理异常情况,保证容器的可靠性和稳定性。
-
-
集成与监控系统:
-
cAdvisor作为一个轻量级的容器内部监控工具,能够与其他监控系统(如Prometheus和Grafana)集成,支持更复杂的监控需求和定制报告。
-
-
实时监控和报告:
-
通过Web界面和API直观地查看和管理监控数据,支持数据的导出和自定义查询,帮助用户实时了解容器的运行状况和性能表现。
-
总体来说,cAdvisor为用户提供了深入了解和有效管理容器的能力,是现代容器化部署中不可或缺的重要组成部分。
四、CAdvisor对接Prometheus与Grafana
4.1 环境准备
-
prometheus服务;
-
参考相关的资料提前部署prometheus;
-
-
grafana服务;
-
参考相关的资料提前部署grafana;
-
-
docker环境;
-
提前安装docker,可以再在docker中部署几个服务;
-
4.2 docker部署CAdvisor
为了能够获取到docker容器的运行状态,用户可以通过docker的stats命令获取到当前主机上运行的容器统计指标信息,有点像linux的top命令信息展示,通过这个命令可以查看容器的cpu利用率,内存使用量,网络IO以及磁盘IO等信息。
docker stats
除了使用命令外,还可以通过docker提供的HTTP api查看容器详细统计的监控信息。
4.2.2 docker部署CAdvisor服务
CAdvisor是Google开源的一款用于展示和分析容器运行状态的可视化工具,通过在主机上运行CAdvisor,用户可以轻松获取到当前主机上容器的运行统计信息,并以图表的形式向用户呈现。
执行如下的docker命令安装CAdvisor
docker run -d \
--name=cadvisor \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:rw \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--publish=8080:8080 \
google/cadvisor:latest
4.2.3 访问界面
容器启动成功后,可以在浏览器通过:IP:8080进行访问,效果如下
往下翻也可以看到一些更详细的图形化指标信息
4.2.4 访问metrics
CAdvisor也暴露了metrics的指标端点,可以在访问的url上添加/metrics查看,如下:
不难理解,既然暴露出了metrics的端点指标接口,就可以通过Prometheus接入之后进行监控
4.3 配置Prometheus
4.3.1 修改Prometheus配置文件
找到Prometheus的yml配置文件,在job的配置中添加CAdvisor的配置job信息,如下:
- job_name: "cadvisor"scrape_interval: 10smetrics_path: '/metrics'static_configs:- targets: ["公网IP:8080"]
4.3.2 重启Prometheus服务
略
4.3.3 访问Prometheus控制台
浏览器访问Prometheus的监控页面,可以看到CAdvisor就接入进来了
也可以通过链接点进去进一步查看监控的指标信息,和上面看到效果是一致的
4.4 接入Grafana
如何将上述的指标信息更好的呈现出来呢,可以通过在Grafana上配置dashboard,从而以更直观的方式展现,下面看具体的操作步骤;
4.4.1 Grafana官网找一个模板
登录到Grafana官网,搜索docker,找一个关于docker的dashboard,拷贝模板ID,下面会用到:
Grafana dashboards | Grafana Labs
比如这里我拷贝的是11600这个模板ID
4.4.2 Grafana配置dashboard模板
添加导入一个模板
跳转到下面的界面之后,拷贝上面的ID到下面的框中
点击右侧的load按钮,跳转到下面的页面之后,选择本机的Prometheus
最后点击Import按钮进行加载,来到下面的监控页面
这个页面上清楚展示了主机上的容器信息,比如运行中的容器数量,具体某个容器的内存占用情况等,一目了然的可以直观的看到各类关于容器的指标信息。
五、写在最后
本文通过操作实践详细接受了使用prometheus监控docker的完整流程,如果正好你的项目中有使用到docker进行服务部署需要做监控的时,可以作为参考,本文到此结束感谢观看。
相关文章:

【云原生】Prometheus监控Docker指标并接入Grafana
目录 一、前言 二、docker监控概述 2.1 docker常用监控指标 2.2 docker常用监控工具 三、CAdvisor概述 3.1 CAdvisor是什么 3.2 CAdvisor功能特点 3.3 CAdvisor使用场景 四、CAdvisor对接Prometheus与Grafana 4.1 环境准备 4.2 docker部署CAdvisor 4.2.2 docker部署…...

搭建日志系统ELK(二)
搭建日志系统ELK(二) 架构设计 在搭建以ELK为核心的日志系统时,Logstash作为日志采集的核心组件,负责将各个服务的日志数据采集、清洗、过滤。然而缺点也很明显: 占用较多的服务器资源。配置复杂,学习曲线陡峭。处理大数据量时…...

常用排序算法的实现与介绍
常用排序算法的实现与介绍 在计算机科学中,排序算法是非常基础且重要的一类算法。本文将通过C语言代码实现,介绍几种常见的排序算法,包括冒泡排序、选择排序、插入排序和快速排序。以下是这些排序算法的具体实现和简要介绍。 1. 冒泡排序&am…...

仓颉语言 -- 宏
使用新版本 (2024-07-19 16:10发布的) 1、宏的简介 宏可以理解为一种特殊的函数。一般的函数在输入的值上进行计算,然后输出一个新的值,而宏的输入和输出都是程序本身。在输入一段程序(或程序片段,例如表达…...
Nginx代理minIO图片路径实现公网图片访问
1、网络部署情况 VUE前端项目Nginx部署在公司内网,端口7790 后台接口项目部署在公司内网,端口7022 minIO服务部署在公司内网,端口9000 公网IP设备将80端口映射到7790端口(具体映射方式不详),实现通过互…...

从零开始掌握tcpdump:参数详解
Linux tcpdump命令详解 1. 语法 tcpdump [-adeflnnNOpqStvxX] [-c <数据包数目>] [-dd] [-ddd] [-F <表达文件>] [-i <网络界面>] [-r <数据包文件>] [-s <数据包大小>] [-tt] [-T <数据包类型>] [-vv] [-w <数据包文件>] [输出数…...

漏洞挖掘 | edusrc记一次某中学小程序渗透测试
一、搜集渗透目标 现在的EDU挖web端的上分效率远不如小程序,因此这篇文章浅浅记录一次小程序的挖掘吧。如果各位大牛想要快速出洞,不妨跳过大学,学院等小程序,而重点关注小学、中学、幼儿园等,这些小程序的出洞率还是…...

vulhub:nginx解析漏洞CVE-2013-4547
此漏洞为文件名逻辑漏洞,该漏洞在上传图片时,修改其16进制编码可使其绕过策略,导致解析为 php。当Nginx 得到一个用户请求时,首先对 url 进行解析,进行正则匹配,如果匹配到以.php后缀结尾的文件名ÿ…...
备战秋招:2024游戏开发入行与跳槽面试详解
注意:以下为本次分享概要,视频版内容更全面深入,详见文末 1.游戏开发领域秋招准备与面试技巧 本次分享由优梦创客机构的创始人雷蒙德主讲,专注于2024年秋招期间游戏开发领域的入行与跳槽面试准备。本次分享重点在于提供面试技巧…...

红外热成像手持终端:从建筑检测到野外搜救的全方位应用
红外热成像手持终端,凭借其独特的红外探测与夜视功能,广泛应用于多个关键领域。无论是军事侦察、消防救援中的夜间作业,还是电力巡检、野生动物观察等多样场景,其精准的红外热成像技术均能提供至关重要的实时数据,助力…...

day07 项目启动以及git
spring框架 spring 负责整合各种框架,把new对象的部分交给spring去做,对象new不出来,项目就启动不起来,这样可以有效保证所需要的对象都在容器中存在,后续的部分都可以顺利执行控制反转:业务对象创建依赖资…...

学会网络安全:开启广阔职业与责任之旅
在数字化时代,网络安全已成为社会经济发展的重要基石。随着互联网的普及和技术的飞速发展,网络安全威胁日益复杂多变,对国家安全、社会稳定以及个人隐私构成了严峻挑战。因此,掌握网络安全技能不仅意味着拥有了一项高价值的职业技…...
UE5 镜头
只狼镜头 Spring Arm 中 开启 Use Pawn Control Rotation:让镜头跟着鼠标移动BP_Character(Self) 中关闭 Use Controller Rotation Yaw:不要让人物和鼠标移动Character Movement 的 Rotation Setting 中 关闭 Use Controller Desired Rotationÿ…...
SpringBoot如何实现简单的跨域配置
在SpringBoot中实现简单的跨域配置,主要通过全局CORS配置来完成。这通常涉及到实现WebMvcConfigurer接口并覆盖addCorsMappings方法。以下是一个简单的示例,展示了如何在SpringBoot应用中配置CORS策略以允许跨域请求。 首先,需要创建一个配置…...
vue列表进入详情页实现上一篇下一篇功能
概述:需求就是需要可以看列表,然后点击列表的右侧详情看详情,通过详情来实现新增上一份,下一份按钮来实现直接看之后的详情。 网上的解决方法有很多 1.后台获取将全量的id,前台再去直接取下一个id方式。(…...
kalman的python实现
前面的kalman都是matlab的,这里在理解的基础上,尝试使用python实现,力求理解更多的内涵。 需要的包 import numpy as np import matplotlib.pyplot as plt 代码 KF algorith demo by Leo 2020.01.06 ZJG CAMPUS,ZJU import numpy as np…...

查找算法:线性查找,golang实现
目录 前言 线性查找 代码示例 1. 算法包 2. 线性查找代码 3. 模拟程序 4. 运行程序 循环次数 假如目标值正好在数组中的第一位 假如目标值正好在数组中的第五位 假如目标值正好在数组中的最后一位 假如目标值不在数组中 线性查找的思想 1. 顺序遍历 2. 比较 3.…...

【图像识别】十大数据集合集!
本文将为您介绍10个经典、热门的数据集,希望对您在选择适合的数据集时有所帮助。 1 DanishFungi2020 发布方: Google 发布时间: 2021 简介: 补充材料:丹麦真菌 2020 - 不仅仅是另一个图像识别数据集为了支持细粒度植…...

C++ | Leetcode C++题解之第312题戳气球
题目: 题解: class Solution { public:int maxCoins(vector<int>& nums) {int n nums.size();vector<vector<int>> rec(n 2, vector<int>(n 2));vector<int> val(n 2);val[0] val[n 1] 1;for (int i 1; i &l…...

SSM学习11:springboot基础
教学视频 黑马程序员SpringBoot3Vue3全套视频教程,springbootvue企业级全栈开发从基础、实战到面试一套通关 springboot基础 搭建项目 修改配置文件 修改application.yml(后缀名不对,可以改成这个),配置数据库 spr…...

铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
省略号和可变参数模板
本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...