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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 当您学会了本教学的所有内容,您最终将会得到属于自己的 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版进行数据可视化展示与分析。
相关文章
|
2月前
|
Prometheus 监控 Cloud Native
自定义grafana_table(数据源Prometheus)
综上所述,自定义 Grafana 表格并将 Prometheus 作为数据源的关键是理解 PromQL 的查询机制、熟悉 Grafana 面板的配置选项,并利用 Grafana 强大的转换和自定义功能使数据展示更为直观和有洞见性。随着对这些工具更深入的了解,您将可以创建出更高级的监控仪表盘,以支持复杂的业务监控需求。
172 1
|
2月前
|
Prometheus 监控 Cloud Native
prometheus学习笔记之Grafana安装与配置
prometheus学习笔记之Grafana安装与配置
|
2月前
|
存储 Prometheus 监控
Grafana 与 Prometheus 集成:打造高效监控系统
【8月更文第29天】在现代软件开发和运维领域,监控系统已成为不可或缺的一部分。Prometheus 和 Grafana 作为两个非常流行且互补的开源工具,可以协同工作来构建强大的实时监控解决方案。Prometheus 负责收集和存储时间序列数据,而 Grafana 则提供直观的数据可视化功能。本文将详细介绍如何集成这两个工具,构建一个高效、灵活的监控系统。
279 1
|
2天前
|
存储 Docker 容器
docker中挂载数据卷到容器
【10月更文挑战第12天】
14 5
|
7天前
|
存储 运维 云计算
探索Docker容器化:从入门到实践
在这个快速发展的云计算时代,Docker容器化技术正在改变应用的开发、部署和管理方式。本文旨在为初学者提供一个关于Docker的全面入门指南,并通过实践案例展示Docker在实际开发中的应用。我们将一起了解Docker的核心概念、基本操作、网络和存储,以及如何构建和部署一个简单的Web应用。无论你是开发者还是运维人员,本文都会帮助你快速掌握Docker的核心技能。
|
3天前
|
存储 测试技术 开发者
docker中将数据卷挂载到容器
【10月更文挑战第11天】
13 3
|
4天前
|
缓存 运维 Docker
容器化运维:Docker Desktop 占用磁盘空间过大?教你轻松解决!
Windows Docker Desktop 使用过程中,因镜像、容器数据及构建缓存的累积,可能导致磁盘空间占用过高。通过删除无用镜像与容器、压缩磁盘以及清理构建缓存等方法,可有效释放空间。具体步骤包括关闭WSL、使用`diskpart`工具压缩虚拟磁盘、执行`docker buildx prune -f`清理缓存等。这些操作能显著减少磁盘占用,提升系统性能。
|
3天前
|
存储 应用服务中间件 云计算
深入解析:云计算中的容器化技术——Docker实战指南
【10月更文挑战第14天】深入解析:云计算中的容器化技术——Docker实战指南
14 1
|
8天前
|
运维 JavaScript 虚拟化
探索容器化技术:Docker的实践与应用
【10月更文挑战第9天】探索容器化技术:Docker的实践与应用
33 3
|
9天前
|
安全 Cloud Native Shell
云上攻防:云原生篇&Docker容器逃逸
本文介绍了Docker的基本概念及其对渗透测试的影响,重点讲解了容器逃逸的方法。Docker是一种轻量级的容器技术,与虚拟机相比,具有更高的便携性和资源利用率。然而,这也带来了安全风险,特别是容器逃逸问题。文章详细描述了三种常见的容器逃逸方法:不安全的配置、相关程序漏洞和内核漏洞,并提供了具体的检测和利用方法。此外,还介绍了几种特定的漏洞(如CVE-2019-5736和CVE-2020-15257)及其复现步骤,帮助读者更好地理解和应对这些安全威胁。
云上攻防:云原生篇&Docker容器逃逸