Docker 监控- Prometheus VS Cloud Insight

标签: docker | 发表时间:2015-12-02 10:39 | 作者:OneAPM蓝海讯通
出处:http://segmentfault.com/blogs

如今,越来越多的公司开始使用 Docker 了,2 / 3 的公司在尝试了 Docker 后最终使用了它。为了能够更精确的分配每个容器能使用的资源,我们想要实时获取容器运行时使用资源的情况,怎样对 Docker 上的应用进行监控呢?Docker 的结构会不会加大监控难度?

可是在没有专业运维团队来监控 Docker 的情况下,并且还想加快 Docker 监控的日程,怎么办呢?

我们通过调查了解到几种不错的 Docker 监控方法,其中 Prometheus 和 Cloud Insight 让人很感兴趣。

Prometheis

先来说说一套开源的 Docker 监控方案: Prometheus;而此篇文字的原文地址: Monitor Docker Containers with Prometheus

Prometheus 由 SoundCloud 发明,适合于监控基于容器的基础架构。Prometheus 特点是高维度数据模型,时间序列是通过一个度量值名字和一套键值对识别。灵活的查询语言允许查询和绘制数据。它采用了先进的度量标准类型像汇总(summaries),从指定时间跨度的总数构建比率或者是在任何异常的时候报警并且没有任何依赖,中断期间使它成为一个可靠的系统进行调试。

Prometheus 支持维度数据,你可以拥有全局和简单的指标名像 container_memory_usage_bytes ,使用多个维度来标识你服务的指定实例。

我已经创建了一个简单的 container-exporter 来收集 Docker 容器的指标以及输出给 Prometheus 来消费。这个输出器使用容器的名字,id 和 镜像作为维度。额外的 per-exporter 维度可以在 prometheus.conf 中设置。

如果你使用指标名字直接作为一个查询表达式,它将返回有这个使用这个指标名字作为标签的所有时间序列。

container_memory_usage_bytes{env="prod",id="23f731ee29ae12fef1ef6726e2fce60e5e37342ee9e35cb47e3c7a24422f9e88",instance="http://1.2.3.4:9088/metrics",job="container-exporter",name="haproxy-exporter-int",image="prom/haproxy-exporter:latest"} 11468800.000000

container_memory_usage_bytes{env="prod",id="57690ddfd3bb954d59b2d9dcd7379b308fbe999bce057951aa3d45211c0b5f8c",instance="http://1.2.3.5:9088/metrics",job="container-exporter",name="haproxy-exporter",image="prom/haproxy-exporter:latest"} 16809984.000000

container_memory_usage_bytes{env="prod",id="907ac267ebb3299af08a276e4ea6fd7bf3cb26632889d9394900adc832a302b4",instance="http://1.2.3.2:9088/metrics",job="container-exporter",name="node-exporter",image="prom/container-exporter:latest"}
`
...
...
`
如果你运行了许多容器,这个看起来像这样:

Docker 监控- Prometheus VS Cloud Insight

为了帮助你使得这数据更有意义,你可以过滤(filter) and/or 聚合(aggregate) 这些指标。

使用 Prometheus 的查询语言,你可以对你想的任何维度的数据切片和切块。如果你对一个给定名字的所有容器感兴趣,你可以使用一个表达式像 container_memory_usage_bytes{name="consul-server"},这个将仅仅显示 name == "consul-server" 的时间序列。

像多维度的数据模型,来实现数据聚合、分组、过滤,不单单是 Prometheus。OpenTSDB 和 InfluxDB 这些时间序列数据库和系统监控工具的结合,让系统监控这件事情变得更加的多元。

接下来,我们为大家介绍国内一家同样提供该功能的监控方案: Cloud Insight。有关其数据聚合的功能可以阅读: 数据聚合 & 分组:新一代系统监控的核心功能

现在我们来对比 Prometheus 和 Cloud Insight 在数据聚合、分组(切片)上的展现效果和功能。

数据聚合

根据不同的 Container Name 或 Image Name 对内存使用量或 Memeory Cache 进行聚合。

Docker 监控- Prometheus VS Cloud Insight

数据分组(切片)

根据不同的 Container Name 或 Image Name 对内存使用量或 Memeory Cache进行分组(切片)。

Docker 监控- Prometheus VS Cloud Insight

Cloud Insight

Cloud Insight 支持多种操作系统、云主机、数据库和中间件的监控,原理是在平台服务仪表盘和自定义仪表盘中,采集并处理 Metric,对数据进行聚合与分组等计算,提供曲线图、柱状图等多样化的展现形式。优点是监控的指标很全,简单易用,也可以期待一下。

Cloud Insight 监控 Docker 试验

我们用 AcmeAir 作为试验的应用,AcmeAir 是一款由原 IBM 新技术架构部资深工程师 Andrew Spyker,利用 Netflix 开源的 Netflix OSS 打造的开源电子商务应用。

首先,我们要打开 Cloud Insight 监控,还好 Cloud Insight 安装简单,一条命令即可。接着,我们新建一个用于此次监控的仪表盘,依次将想要获取的指标统统添加进去。

我们添加了以下指标:

  • docker.cpu.user

  • docker.cpu.sysytem

  • docker.containers.running

  • jvm.heap_memory

  • jvm.non_heap_memory

  • jvm.gc.cms.count

  • jvm.heap_memory_max

  • jvm.gc.parnew.time

应用 Acme 部署在四台 servers 上,我们开启四台 servers, 然后用 JMeter 给应用加压。

Docker 监控- Prometheus VS Cloud Insight

随着时间 JMeter 不断给应用加压,当 users 人数达到188时,我们再来看一下仪表盘的视图。

Docker 监控- Prometheus VS Cloud Insight

从图中可以看到,性能数据发生了变化,根据 JMeter 里的数据,此时 CPU 占用超过了50%,错误率也有所提升;对比来看,根据 Cloud Insight 里的曲线显示,蓝色的线所代表的 Container CPU 占用率已经超过50%,逐渐接近75%,系统剩余的 CPU 资源逐渐下降,该 Container 的系统 CPU 资源消耗也突然增大。我们可以通过这些定位到 CPU 占用率过高的 Container ,及时而主动地去了解性能瓶颈,从而优化性能,合理分配资源。 Cloud Insight 所抓取的性能指标算是较为全面,部署和展现方式都是相当简单易懂的。

总结

Docker 兼容相比其他的数据库、系统、中间件监控,要复杂一些。由于需要表征不同 Container 的性能消耗,来了解不同应用的运行情况,所以数据的聚合、切片(分组)和过滤,在 Docker 监控中成为了必备功能。

所以我们推荐使用了时间序列数据库,或者类似设计逻辑的监控方案,如:Prometheus 和 Cloud Insight。

而 Docker 单方面的监控,可能不太满足一些大型公司的需求,如果一个工具在监控 Docker 同时能够监控其他组件,那就更好了。

国外出现了 Graphite、Grafana 和 Host Graphite,能够让用户将不同数据来源都集中在同一个地方进行展现;而国内 Cloud Insight 似乎也是这样的思路。

相关 [docker 监控 prometheus] 推荐:

Docker 监控- Prometheus VS Cloud Insight

- - SegmentFault 最新的文章
如今,越来越多的公司开始使用 Docker 了,2 / 3 的公司在尝试了 Docker 后最终使用了它. 为了能够更精确的分配每个容器能使用的资源,我们想要实时获取容器运行时使用资源的情况,怎样对 Docker 上的应用进行监控呢. Docker 的结构会不会加大监控难度. 可是在没有专业运维团队来监控 Docker 的情况下,并且还想加快 Docker 监控的日程,怎么办呢.

Prometheus 和 Grafana 监控系统指南

- - 互联网技术和架构
Prometheus 是源于 Google Borgmon 的一个开源监控系统,用 Golang 开发. Prometheus 基本原理是通过 HTTP 协议周期性抓取被监控组件的状态,这样做的好处是任意组件只要提供 HTTP 接口就可以接入监控系统,不需要任何 SDK 或者其他的集成过程. 这样做非常适合虚拟化环境比如 VM 或者 Docker.

使用Prometheus、Thanos监控Kubernetes集群

- - DockOne.io
当你阅读这篇文章的时候,我相信你一定已经说服了你的经理,或者是公司CTO,选择容器和Kubernetes作为微服务治理平台,去转型升级你们公司的软件产品. 你非常非常的happy,一切都貌似按照计划进行,你创建了你的第一个Kubernetes集群(三大主流云服务提供商,微软云Azure,亚马逊云AWS和谷歌云GCP都提供了非常方便的方式部署Kubernetes平台),你开发了你的第一个容器化应用,然后把它部署到了你的Kubernetes集群上.

Docker 监控实战

- - SegmentFault 最新的文章
如今,越来越多的公司开始使用 Docker 了,现在来给大家看几组数据:. 2 / 3 的公司在尝试了 Docker 后最终使用了它. 也就是说 Docker 的转化率达到了 67%,而转化市场也控制在 60 天内. 越大型的公司越早开始使用 Docker. 研究发现主机数量越多的公司,越早开始使用 Docker.

Prometheus 与 Grafana:监控报警系统中的银弹

- - IT瘾-dev
监控报警是服务稳定的基础,是性能优化的重要依据,是可以未雨绸缪的重大利器. 现代系统赋予了监控报警重要地位,近年来随着微服务设计理念不断成熟与广泛使用,做为系统方案的设计者,监控的选择和使用将是搭建系统不可或缺的一个环节. Prometheus和Grafana像一组黄金搭档一样出现在了历史的洪流中,就像当年PHP和MYSQL一样.

Kubernetes组件问题排查思路 – 十点运维吧-Linux|Kubernetes|Docker|Prometheus|Python|Golang|云原生|SRE

- -
Kubernetes的基础组件就像一栋房子的地基,它们的重要性不言而喻. 作为Kubernetes集群的维护者,经常会遇到组件的问题,那平时是怎么去定位解决的呢. 这里简要分析一下我的排查思路. 通过集群的状态,找到故障的节点或者组件. 使用pprof分析组件的具体性能. Kubernetes的基础组件不多,而且部署也非常简单,所以在定义范围的时候还是很容易的,比如我们在使用.

Spring Boot 2.x监控数据可视化(Actuator + Prometheus + Grafana手把手)

- - 周立的博客 - 关注Spring Cloud、Docker
本文基于Spring Boot 2.1.4,理论支持Spring Boot 2.x所有版本. 众所周知,Spring Boot有个子项目Spring Boot Actuator,它为应用提供了强大的监控能力. 从Spring Boot 2.0开始,Actuator将底层改为Micrometer,提供了更强、更灵活的监控能力.

爱奇艺号基于Prometheus的微服务应用监控实践

- - DockOne.io
微服务架构是目前各大互联网公司普遍采用的软件架构方式. 在微服务架构中,系统被拆分为多个小的、相互独立的服务,这些服务运行在自己的进程中,可以独立的开发和部署. 在业务快速变化时,微服务单一职责、自治的特点,使系统的边界更加清晰,提升了系统的可维护性;同时,简化了系统部署的复杂度,可以针对某个微服务单独升级和发布;在业务增长时,也可以方便的进行独立扩展.

关于docker容器的监控

- - CSDN博客推荐文章
1 docker inspect [容器ID | 镜像ID]. 查看容器创建时间、容器的IP、映射的端口、挂载的目录等信息. 此命令同样也能用来查看镜像的详细信息. 2 docker stats 容器ID. 用来查看容器的资源使用情况,如:CPU、内存、网络、I/O. 另外,在docker的配置文件中添加如下的参数之后,可以采用curl来调用stats API接口.

【实战】五个Docker监控工具的对比

- - ITeye资讯频道
【编者的话】这篇文章作者是Usman,他是服务器和基础架构工程师,有非常丰富的分布式构建经验. 该篇文章主要分析评估了五种Docker监控工具,包括免费的和不免费的:Docker Stats、CAdvisor、Scout、Data Dog以及Sensu. 不过作者还是推荐使用Data Dog. 另外还有两个工具:Prometheus与Sysdig Cloud会在下一篇做介绍分析,敬请期待.