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

简介: 当您学会了本教学的所有内容,您最终将会得到属于自己的 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 了解更多详情。

相关文章
|
12月前
|
Prometheus 监控 Cloud Native
Prometheus+Grafana(docker安装)
本文档详细介绍了如何使用Docker容器快速部署Prometheus监控系统和Grafana数据可视化平台。该方案适用于需要快速搭建监控环境的开发测试场景,具备部署简单、资源占用低、易于维护等特点。
|
人工智能 Prometheus 监控
容器化AI模型的监控与治理:确保模型持续稳定运行
在前几篇文章中,我们探讨了AI模型的容器化部署及构建容器化机器学习流水线。然而,将模型部署到生产环境只是第一步,更重要的是确保其持续稳定运行并保持性能。为此,必须关注容器化AI模型的监控与治理。 监控和治理至关重要,因为AI模型在生产环境中面临数据漂移、概念漂移、模型退化和安全风险等挑战。全面的监控涵盖模型性能、数据质量、解释性、安全性和版本管理等方面。使用Prometheus和Grafana可有效监控性能指标,而遵循模型治理最佳实践(如建立治理框架、定期评估、持续改进和加强安全)则能进一步提升模型的可信度和可靠性。总之,容器化AI模型的监控与治理是确保其长期稳定运行的关键。
|
Prometheus 监控 Cloud Native
Prometheus+Grafana监控Linux主机
通过本文的步骤,我们成功地在 Linux 主机上使用 Prometheus 和 Grafana 进行了监控配置。具体包括安装 Prometheus 和 Node Exporter,配置 Grafana 数据源,并导入预设的仪表盘来展示监控数据。通过这种方式,可以轻松实现对 Linux 主机的系统指标监控,帮助及时发现和处理潜在问题。
1377 7
|
8月前
|
Kubernetes Docker Python
Docker 与 Kubernetes 容器化部署核心技术及企业级应用实践全方案解析
本文详解Docker与Kubernetes容器化技术,涵盖概念原理、环境搭建、镜像构建、应用部署及监控扩展,助你掌握企业级容器化方案,提升应用开发与运维效率。
1168 108
|
9月前
|
存储 监控 测试技术
如何将现有的应用程序迁移到Docker容器中?
如何将现有的应用程序迁移到Docker容器中?
681 57
|
6月前
|
监控 Kubernetes 安全
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
蒋星熠Jaxonic,技术探索者,以代码为笔,在二进制星河中书写极客诗篇。专注Docker与容器化实践,分享从入门到企业级应用的深度经验,助力开发者乘风破浪,驶向云原生新世界。
723 51
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
|
6月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
745 6

推荐镜像

更多
下一篇
开通oss服务