容器监控工具(2)Prometheus + cAdvisor + grafana

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 上一篇介绍了Google开发的容器监控工具cAdvisor,但是其提供的操作界面较为简陋,且不支持监控多Host,实用性有待提高。因此,本篇会介绍一个流行的生产级监控工具,不,准确说来应该是一个监控方案,它就是Prometheus!Prometheus提供了一整套的包括监控数据搜集、存储、处理、可视化和告警的完整解决方案。

本篇已加入《.NET Core on K8S学习实践系列文章索引》,可以点击查看更多容器化技术相关系列文章。上一篇介绍了Google开发的容器监控工具cAdvisor,但是其提供的操作界面较为简陋,且不支持监控多Host,实用性有待提高。因此,本篇会介绍一个流行的生产级监控工具,不,准确说来应该是一个监控方案,它就是Prometheus!

实验环境:阿里云ECS主机(两台),CentOS 7.4

一、Prometheus简介

1.1 关于Prometheus

  Prometheus是由SoundCloud开发的开源监控系统的开源版本。2016年,由Google发起的云原生基金会CNCF (Cloud Native Computing Foundation) 将其纳入为其第二大开源项目(第一大开源项目是Kubernetes)。Prometheus提供了一整套的包括监控数据搜集存储处理可视化和告警完整解决方案

  Prometheus官网地址:https://prometheus.io/

  Prometheus GitHub:https://github.com/prometheus/prometheus/

1.2 Prometheus架构

  Prometheus在其官方github上贴出的其架构图如下:  

   为了更容易理解这个架构,这里我们采用园友Cloud Man(他也是本文参考资料《每天5分钟玩转Docker》作者)总结的下图,它去掉了一些部分,只保留了最重要的组件,可以帮助我们避免注意力分散。

   从上图看来,我们着重需要关注以下几个核心组件:

  (1)Prometheus Server:负责从Exporter中拉取和存储监控数据,并提供一套查询语言(PromQL)供用户使用。

  (2)Exporter:负责收集目标对象(如Host或Container)的性能数据,并通过HTTP接口供Prometheus Server获取。

  (3)可视化组件 Grafana:获取Prometheus Server提供的监控数据并通过Web UI的方式完美展现数据。

  (4)AlertManager:负责根据告警规则和预定义的告警方式发出例如Email、Webhook之类的告警。

1.3 Prometheus数据模型

  Prometheus 中存储的数据为时间序列,是由 metric 的名字和一系列的标签(键值对)唯一标识的,不同的标签则代表不同的时间序列。

  • metric 名字:该名字应该具有语义,一般用于表示 metric 的功能,例如:http_requeststotal, 表示 http 请求的总数。其中,metric 名字由 ASCII 字符,数字,下划线,以及冒号组成,且必须满足正则表达式 [a-zA-Z:][a-zA-Z0-9_:]*。
  • 标签:使同一个时间序列有了不同维度的识别。例如 http_requeststotal{method="Get"} 表示所有 http 请求中的 Get 请求。当 method="post" 时,则为新的一个 metric。标签中的键由 ASCII 字符,数字,以及下划线组成,且必须满足正则表达式 [a-zA-Z:][a-zA-Z0-9_:]*。
  • 样本:实际的时间序列,每个序列包括一个 float64 的值和一个毫秒级的时间戳。

  时间序列格式:


{
  =, ...}

  示例:


api_http_requests_total{method="POST", handler="/messages"}

  之前有分享过另一个时序数据库InfluxDB,它也是一个不错的时序数据库,经常用来作为监控数据的存储。OK,关于Prometheus的简介就到这儿,下面那我们开始动手将Prometheus初步用起来。

二、Prometheus实践

2.1 实验环境说明

  此次实验会搭建一个基于Prometheus的监控系统,用于监控两台阿里云ECS主机,监控目标为Host和容器两个层次。

主机

IP

运行组件

阿里云ECS1

47.102.140.100

Prometheus Server、Grafana、Exporter(Node Exporter & cAdvisor)

阿里云ECS2

47.102.140.101

Exporter(Node Exporter & cAdvisor)




Note:Prometheus支持多种Exporter,这里我们使用Node Exporter 和 cAdvisor。其中,Node Exporter用于收集Host相关数据,cAdvisor用于收集容器相关数据。Node Exporter 和 cAdvisor 会运行在所有实验主机上。

2.2 运行Node Exporter

  在两台主机上执行以下命令运行Node Exporter:

docker run -d -p 9100:9100 \
-v "/proc:/host/proc" \
-v "/sys:/host/sys" \
-v "/:/rootfs" \
prom/node-exporter \
--path.procfs /host/proc \
--path.sysfs /host/sys \
--collector.filesystem.ignored-mount-points "^/(sys|proc|dev|host|etc)($|/)"

  执行成功后,会创建一个Node Exporter的容器实例,访问两台主机的地址

http://[ECS1/2-HostIP]:9100/metrics

你可以看到如下图所示的信息:

   如果能看到上图,说明你的Node Exporter可以为Prometheus提供该Host的监控数据了。

2.3 运行cAdvisor

  这部分我们在上一篇《容器监控(2)cAdvisor》中已经介绍过了,这里我们继续在这两台主机中执行以下命令安装运行cAdvisor(如果已经运行了,就不必再执行了):

docker run \
  --volume=/:/rootfs:ro \
  --volume=/var/run:/var/run:rw \
  --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 \
  google/cadvisor:latest

  同样,我们也可以通过访问

http://[ECS1/2-HostIP]:8080/metrics

来查看cAdvisor提供的监控数据,如下图所示:

   如果能看到上图,说明你的cAdvisor可以为Prometheus提供该Host的监控数据了。

2.4 运行Prometheus Server

  这里我们在主机A(表中的ECS1)上执行以下命令来运行Prometheus Server:

docker run -d -p 9090:9090 \
  -v /edc/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
  --name prometheus \
  prom/prometheus

  此外,这里的prometheus.yml 是Prometheus Server的配置文件,需要事先编辑好并放到指定目录下(这里是/edc/prometheus/目录下)让docker可以读取到,内容如下:

global:
  scrape_interval: 15s
  evaluation_interval: 15s
  external_labels:
    monitor: 'edc-lab-monitor'

alerting:
  alertmanagers:
  - static_configs:
    - targets:
      # - alertmanager:9093

rule_files:
  # - "first.rules"
  # - "second.rules"

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['47.102.140.100:9090']

  - job_name: 'host'
    static_configs:
      - targets: ['47.102.140.100:9100','47.102.140.101:9100']

  - job_name: 'container'
    static_configs:
      - targets: ['47.102.140.100:8080','47.102.140.101:8080']

  这里需要注意的配置是scrape_configs中的static_configs,里面定义了Prometheus会从哪些Exporter中抓取监控数据,这里指定了两台云主机的Node Exporter与cAdvisor。

  执行成功后,Prometheus容器已经创建好了,访问这台ECS1的地址:http://[ECS1 Host IP]:9090/metrics,如下图所示:

   然后,我们直接访问http://[ECS1-HostIP]:9090,会进入Prometheus主页:

   单击菜单Status => Targets,会看到所有监控的目标Exporters:

   可以看到所有监控目标的状态都是Up,表示Prometheus Server可以正常获取监控数据。

2.5 运行Grafana

  这里我们继续在主机A(ECS1)上执行以下命令运行Grafana:

docker run -d -i -p 3000:3000 \
-e "GF_SERVER_ROOT_URL=http://grafana.server.name" \
-e "GF_SECURITY_ADMIN_PASSWORD=secret" \
grafana/grafana

  -e "GF_SECURITY_ADMIN_PASSWORD=secret" 则指定了Admin用户的密码为secret,这里你也可以随你的意愿改为你可以记得住的。

  执行成功后,我们可以通过访问:http://[ECS1-HostIP]:3000 看到以下Grafana的登录界面

  下面几个步骤用于初始化配置Grafana让其可以展示监控数据仪表盘Dashboard:

  Step1.登陆之后进入主页,选择引导页,从"add data source"开始,第一步选择时序数据库,这里选择Prometheus

  Step2.配置Prometheus Server地址及Name,完成后点击“Save&Test”:

  Step3.回到引导主页,选择Add Dashboard按钮,进入Dashboard页,选择Import Dashboard,进入下图:

   这里选择的Dashboard,你可以在grafana的dashboard官网的搜索你喜欢的关于Docker监控主题的各种Dashboard样式。这里我们要做的就是将其ID(这里我选择的一个Docker监控的dashboard ID是193,其余的我不记得了)复制到图中的文本框中(当然,你也可以下载json并粘贴进去)。

  Step4.Grafana识别之后,就会显示其详情让你确认。在确认页选择Prometheus的数据源,这里选择我们刚刚添加的数据源,然后点击Import即可完成导入。

   完成以上导入Dashboard步骤之后,这里我的Dashboard列表有了三个Dashboard:

  这里我们主要关注第一个(Docker-Monitor)和第三个(Host-Monitor),先来看第一个Dashboard,它主要是为我们展示Docker层次的监控面板:

   从上图可以看到两台Host中的所有容器监控数据一览无遗。

   第三个面板(Host-Monitor)的展示面板如下图所示:

   在上图中,我们选择的分组是Host,它主要是收集来自Node-Exporter中反馈的基于Host的监控数据,可以实时展示Host的关键指标。不过,它每次只能显示单台Host的数据,我们可以通过切换Host IP下拉列表查看不同Host的性能数据。

  此外,我们一般会将其投屏到工作区的电视上,所以我们可以点击下面这个按钮以投屏模式显示在电视上,供整个团队及时查看。

三、监控工具大比较

  这里我们仍然引用Cloud Man总结的一张表来看看:

   毫无疑问,Prometheus作为生产级的监控方案,对其他几个工具形成了压倒性的优势。而事实上,Prometheus + Grafana + cAdvisor这一套方案也是大家广泛采用的结构。

四、小结

  本文首先简单介绍了Prometheus及其架构,然后通过搭建基于Prometheus + cAdvisor + Grafana的监控系统,能够实现对于多台云主机的性能监控(包括Host和容器两个层次的数据)。当然,Prometheus还有很多的配置和好玩的地方例如Alert Manager可以及时发送告警通知等,笔者也只是初步把玩,还有很多东西不知道。后面我会分享引入K8S后,结合Prometheus + cAdvisor + Grafana实现K8S集群的监控,敬请期待。

参考资料

Cloud Man,《每天5分钟玩转Docker容器技术

无涯,《从零开始搭建Prometheus自动监控告警系统

三无程序员,《Prometheus

虎纠卫,《监控神器-普罗米修斯Prometheus

项思凯,《Prometheus介绍详解

rj-bai,《Prometheus+Grafana打造全方位监控系统

GeekerLou,《云原生监控系统Prometheus

Cloud Man,《一文搞懂各种容器监控方案

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
4月前
|
Prometheus 监控 Cloud Native
云原生监控实战:Prometheus+Grafana快速搭建指南
云原生监控实战:Prometheus+Grafana快速搭建指南
|
4月前
|
存储 Prometheus 监控
OSS监控体系搭建:Prometheus+Grafana实时监控流量、错误码、存储量(开源方案替代云监控自定义视图)
本方案基于Prometheus构建OSS监控系统,涵盖架构设计、指标采集、可视化、告警及性能优化,助力企业实现高可用、低成本的自建监控体系。
439 1
|
5月前
|
Prometheus 监控 Cloud Native
除了Prometheus,还有哪些工具可以监控Docker Swarm集群的资源使用情况?
除了Prometheus,还有哪些工具可以监控Docker Swarm集群的资源使用情况?
420 79
|
4月前
|
存储 监控 Cloud Native
云原生监控实战:Prometheus+Grafana打造RDS多维度预警体系
本方案构建了基于Prometheus与Thanos的云原生RDS监控体系,涵盖数据采集、存储、可视化与告警全流程。支持10万+QPS采集、90%存储压缩,具备<30秒告警延迟能力。通过自定义指标与智能预警策略,显著提升故障发现效率,实现分钟级响应。
333 5
|
4月前
|
Prometheus 监控 Cloud Native
|
3月前
|
Prometheus 监控 Cloud Native
Docker 部署 Prometheus 和 Grafana 监控 Spring Boot 服务
Docker 部署 Prometheus 和 Grafana 监控 Spring Boot 服务实现步骤
|
6月前
|
Prometheus 监控 Cloud Native
Prometheus+Grafana(docker安装)
本文档详细介绍了如何使用Docker容器快速部署Prometheus监控系统和Grafana数据可视化平台。该方案适用于需要快速搭建监控环境的开发测试场景,具备部署简单、资源占用低、易于维护等特点。
|
7月前
|
Prometheus Kubernetes 监控
Kubernetes监控:Prometheus与AlertManager结合,配置邮件告警。
完成这些步骤之后,您就拥有了一个可以用邮件通知你的Kubernetes监控解决方案了。当然,所有的这些配置都需要相互照应,还要对你的Kubernetes集群状况有深入的了解。希望这份指南能帮助你创建出适合自己场景的监控系统,让你在首次发现问题时就能做出响应。
339 22
|
10月前
|
存储 数据采集 Prometheus
Grafana Prometheus Altermanager 监控系统
Grafana、Prometheus 和 Alertmanager 是一套强大的开源监控系统组合。Prometheus 负责数据采集与存储,Alertmanager 处理告警通知,Grafana 提供可视化界面。本文简要介绍了这套系统的安装配置流程,包括各组件的下载、安装、服务配置及开机自启设置,并提供了访问地址和重启命令。适用于希望快速搭建高效监控平台的用户。
521 20
|
10月前
|
Prometheus 监控 Cloud Native
Prometheus+Grafana监控Linux主机
通过本文的步骤,我们成功地在 Linux 主机上使用 Prometheus 和 Grafana 进行了监控配置。具体包括安装 Prometheus 和 Node Exporter,配置 Grafana 数据源,并导入预设的仪表盘来展示监控数据。通过这种方式,可以轻松实现对 Linux 主机的系统指标监控,帮助及时发现和处理潜在问题。
814 7

推荐镜像

更多