用 Prometheus 和 Grafana 实现容器化应用程序的可视化监控

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 当您学会了本教学的所有内容,您最终将会得到属于自己的 Prometheus 和 Grafana 的 Dockerfiles 文件,它们会让您的监控部署实现自动化,就像你对应用程序镜像和容器所做的一样。

screenshot

出品丨Docker公司(ID:docker-cn)
编译丨小东
每周一、三、五晚6点10分 与您不见不散!


近日,我在 Pluralsight 网络课程中更新了一节《如何使用 Docker 监控容器化应用程序运行状况》的教学视频!本视频涵盖了在 Linux 和 Windows 上运行 Docker 容器时监控应用程序所需的全部内容,它将教会您监控容器的整个理论和实践以及使用行业标准工具 Prometheus 和 Grafana。

在 Docker 中监控应用程序的最主要好处是,开发人员可以在本地运行监控应用栈,并获得运营团队在生产中使用的完全相同的指标。

演示应用程序是在 Linux 容器上运行 Java,在 Windows 容器上运行 .NET Framework。我使用独立的 Docker 引擎(适用于 Mac 和 Windows 的 Docker Desktop,以及 Ubuntu 和Windows Server 上的 Docker Engine)以及运行 Linux 和 Windows 节点的混合 Docker swarm。所以,每个人都可以各取所需。


为容器化应用程序构建监控

应用程序在数百个 Docker 容器中运行时,与其在几十台服务器中运行相比,其监控是不同的。您不希望使用 Nagios 或 SCOM 等“经典”监视工具,因为它们不适用于现阶段高周转率以及动态管理的环境。

因此,与在服务器上运行时将数据推送到中央监控服务器的代理不同,您可以从容器和 Docker 服务器公开指标,并运行一个监控组件来轮询这些指标并存储结果:

screenshot

指标服务器是 Prometheus,它将数据存储在自己的时间序列数据库中。然后,为了可视化您的应用程序运行状况,您可以在 Grafana 中构建一个仪表板,该仪表板可以实时显示 Prometheus 的关键指标,并且可以根据需要显示。

Prometheus 和 Grafana 是成熟的开源项目,拥有庞大的用户群,并且为在 Docker 中运行提供了良好的支持。它们都是 CNCF Landscape 的特色,Prometheus 是 CNCF 的授权项目。

它们都是您需要学习的新技术,但是它们的入门都非常简单。接下来,我将带您了解这些内容 —— 包括在 Linux 和 Windows 上的 Docker 容器中运行 Prometheus 和 Grafana。

在轻量级的 Docker 容器中运行监控组件意味着您可以在每个环境中运行相同的指标仪表板,从容器中提取指标的体系结构意味着您可以在不同级别的解决方案上获得一致的视图。接下来,我将介绍:

  • 应用程序指标 —— 您记录的自定义指标,这些指标在仪表板中很有用,例如登录用户数等。
  • 运行时指标 —— 操作系统或运行时主机已收集的数据,如 We b服务器处理的每秒请求数或内存使用量等。
  • Docker 指标 —— 来自容器平台的指标,包括在每个状态下运行的容器、节点可用性和运行状况检查。

用 Prometheus 收集指标

Prometheus 是一个轮询服务器,它向提供服务指标的 REST API 发出 HTTP 请求(您也可以将数据推送到 Prometheus,但这是一种不太常见的模式)。

您可以直接在服务器上运行 Prometheus,但最好是在 Docker 中运行它 —— 这将使 Prometheus 的设置更加便携,并且 Prometheus 可以使用 Docker内置的 DNS 服务器来更容易的发现轮询目标。

Prometheus 是指标服务器的绝佳选择,因为它具有大多数语言的客户端库,Docker 引擎本身可以公开 Prometheus 格式的指标。

我将向您展示如何在 Prometheus 中为容器和 Docker 引擎配置服务发现,无论是在独立模式还是在集群模式下。

在群集模式下,Docker 支持使用 DNS 查询进行容器发现,这些查询为您提供了服务中所有容器的 IP 地址。


向 Prometheus 公开运行时指标

托管应用程序的运行时可能已经在收集指标了,您可以在不更改代码的情况下从容器中公开它们。

我将向您展示如何在 Docke r镜像中将指标导出器与应用程序一起打包,这是一个为 Prometheus 提供 “/metrics”API 的实用程序:

screenshot

这是在 Docker 中向现有应用程序添加监控的一种简单且低风险的方法,无需更改应用程序(只需在 Dockerfile 中打包一个第三方的导出器)。举个例子:

  • Tomcat 在 Linux 容器中运行 JSP 网站,其导出器为您提供来自 JVM 和 Tomcat Web 服务器的详细指标。
  • IIS 在Windows容器中运行 ASP .NET 网站,其导出器为您提供 Windows 性能计数器的指标,包括 .NET 和 IIS 的指标。

这个级别的监控可以告诉您容器的工作情况,这是查看某个地方是否存在瓶颈或某个容器是否有问题的好地方。


向 Prometheus 公开应用程序指标

如果要从容器中提取自定义指标,则需要编写一些代码。但是,它很简单。

我使用适用于 Java 的官方 Prometheus 客户端库,以及用于 .NET 的社区 Prometheus 客户端库,将自定义指标添加到我的 Web 应用程序中。我记录了基本内容,例如登录会话数、添加到购物篮中的商品数量以及下订单数量。

客户端库为 Prometheus 提供 REST API。我将介绍一些托管端点的选项 —— 我更喜欢为应用程序和运行时指标设置单独的端点,这样您就可以在不同的计划上轮询它们。

应用程序指标可以告诉您容器内部发生了什么,因此您可以使用它们为业务用户提供实时的 KPI 数据,或为 IT 用户提供技术统计信息。


向 Prometheus 公开 Docker 指标

Docker 还可以用 Prometheus 的格式导出指标(这是一个实验性质的功能,但我将告诉你如何启用它,以及运行“实验性质”意味着什么)。

您可以从 Docker 引擎中获得一组统计信息,其中包括容器和运行状况检查信息,以及服务器详细信息和使用情况。所有版本的 Docker 都是如此,因此您可以在仪表板中显示 Docker 平台的统计信息。开发人员在 Docker Desktop 中看到的详细信息与运营团队在 Docker Enterprise 上的生产环境中所看到的详细信息保持一致。

在群集模式下运行时,管理器节点会产生第二组统计信息,它将告诉您有关群集中节点的详细信息,以及有关群集性能的底层信息(包括 etcd 和 Raft)。

这是您希望在应用程序仪表板中看到的最终详细信息。在概述中看到这些细节非常好,因为它可以很容易地在不同的数据集之间进行关联,并发现问题的根本原因。

如果应用程序指标中登录用户的数量突然下降,并且运行时指标中提供的 HTTP 请求数量也下降了,那么您可以检查 Docke 指标 —— 可能您的运行状况检查都失败了,这意味着发布失败了,或者可能有一半的节点已经脱机。在一个地方查看所有这些数据可以为您提供全面的见解。


使用 Grafana 构建仪表板

最后,我要向您展示的是如何在 Grafana 中构建仪表板,使用 PromQL 查询将所有关键应用程序、运行时和 Docker 指标集中到同一个仪表板中:

screenshot

Grafana 本身非常简单易用,我在视频中介绍了数据源、仪表板和面板。我还向您展示了如何使用您自己的配置打包 Grafana,这样您就可以构建一个自定义的 Docker镜像了,该镜像具有:

  • 配置了您 Prometheus 的数据源;
  • 部署了您应用程序的仪表板;
  • 创建的只读用户;
  • 为该只读用户设置您应用程序仪表板的主页;

当您学会了本教学的所有内容,您最终将会得到属于自己的 Prometheus 和 Grafana 的 Dockerfiles 文件,它们会让您的监控部署实现自动化,就像你对应用程序镜像和容器所做的一样。

如果您对本教学视频有兴趣,可以浏览 https://www.pluralsight.com/courses/monitoring-containerized-app-health-docker?clickid=VLcUt13wQTwjyIp2Xo3wuRwPUkg1QZ2jGS2Rwg0&irgwc=1&mpid=1197078&utm_source=impactradius&utm_medium=digital_affiliate&utm_campaign=1197078&aid=7010a000001xAKZAA2 了解更多详情。

相关实践学习
通过可观测可视化Grafana版进行数据可视化展示与分析
使用可观测可视化Grafana版进行数据可视化展示与分析。
相关文章
|
1月前
|
Prometheus 运维 监控
智能运维实战:Prometheus与Grafana的监控与告警体系
【10月更文挑战第26天】Prometheus与Grafana是智能运维中的强大组合,前者是开源的系统监控和警报工具,后者是数据可视化平台。Prometheus具备时间序列数据库、多维数据模型、PromQL查询语言等特性,而Grafana支持多数据源、丰富的可视化选项和告警功能。两者结合可实现实时监控、灵活告警和高度定制化的仪表板,广泛应用于服务器、应用和数据库的监控。
182 3
|
4月前
|
存储 Prometheus 监控
Prometheus 的可视化与仪表盘
【8月更文第29天】Prometheus 是一个开源的监控系统和时间序列数据库,它能够高效地收集和存储各种指标数据。然而,原始的数据如果没有恰当的可视化工具来呈现,很难从中快速获得有用的信息。Grafana 是一款广泛使用的开源可视化工具,它与 Prometheus 结合得非常好,能够帮助我们创建交互式监控仪表盘。本文将介绍如何使用 Grafana 与 Prometheus 结合,构建美观且实用的监控仪表盘。
88 0
|
14天前
|
数据采集 Prometheus 监控
监控堆外第三方监控工具Grafana
监控堆外第三方监控工具Grafana
23 5
|
2月前
|
运维 监控 数据可视化
Docker容器可视化管理工具 - WGCLOUD基础介绍
WGCLOUD是新一代运维监测平台,它可以监控Docker容器的各种性能数据,比如内存,cpu,Image,运行时间,运行状态,端口映射等信息
|
1月前
|
Prometheus 运维 监控
智能运维实战:Prometheus与Grafana的监控与告警体系
【10月更文挑战第27天】在智能运维中,Prometheus和Grafana的组合已成为监控和告警体系的事实标准。Prometheus负责数据收集和存储,支持灵活的查询语言PromQL;Grafana提供数据的可视化展示和告警功能。本文介绍如何配置Prometheus监控目标、Grafana数据源及告警规则,帮助运维团队实时监控系统状态,确保稳定性和可靠性。
153 0
|
3月前
|
Prometheus 监控 Cloud Native
docker安装prometheus+Granfan并监控容器
【9月更文挑战第14天】本文介绍了在Docker中安装Prometheus与Grafana并监控容器的步骤,包括创建配置文件、运行Prometheus与Grafana容器,以及在Grafana中配置数据源和创建监控仪表盘,展示了如何通过Prometheus抓取数据并利用Grafana展示容器的CPU使用率等关键指标。
113 1
|
4月前
|
Prometheus 运维 监控
Grafana 在 DevOps 中的应用
【8月更文第29天】Grafana 是一个开源的数据可视化平台,它可以连接到多种数据源,从简单的指标到复杂的查询,都能轻松创建出漂亮的图形化仪表板。在 DevOps 领域,Grafana 被广泛应用于性能监控、故障排查、服务可用性监控等方面。本文将详细介绍 Grafana 如何支持 DevOps 团队的工作,并提供一些具体的使用案例和代码示例。
43 1
|
4月前
|
Prometheus 监控 数据可视化
Grafana 插件生态系统:扩展你的监控能力
【8月更文第29天】Grafana 是一个流行的开源平台,用于创建和共享统计数据的仪表板和可视化。除了内置的支持,Grafana 还有一个强大的插件生态系统,允许用户通过安装插件来扩展其功能。本文将介绍一些 Grafana 社区提供的插件,并探讨它们如何增强仪表盘的功能性。
291 1
|
4月前
|
存储 Prometheus 监控
Grafana 与 Prometheus 集成:打造高效监控系统
【8月更文第29天】在现代软件开发和运维领域,监控系统已成为不可或缺的一部分。Prometheus 和 Grafana 作为两个非常流行且互补的开源工具,可以协同工作来构建强大的实时监控解决方案。Prometheus 负责收集和存储时间序列数据,而 Grafana 则提供直观的数据可视化功能。本文将详细介绍如何集成这两个工具,构建一个高效、灵活的监控系统。
474 1
|
4月前
|
Prometheus 监控 Cloud Native
Grafana 入门指南:快速上手监控仪表盘
【8月更文第29天】Grafana 是一款开源的数据可视化和监控工具,它允许用户轻松地创建美观的仪表盘和图表,以便更好地理解和监控数据。无论您是需要监控系统性能指标、应用程序日志还是业务关键指标,Grafana 都能提供灵活而强大的解决方案。本指南将带领您快速上手 Grafana,包括安装、配置以及创建第一个监控面板。
705 1