5 种在 Docker 中监控 Java 应用程序的方法

 

监视Docker容器中的Java应用程序最有用的方法有哪些?

在容器中运行应用程序是一种越来越流行的维护大型分布式堆栈的方式,该堆栈会根据需求进行更改。 Java VM的传统使其成为基于容器的基础架构的理想语言。 由于有许多活动的零部件,监视容器中的Java应用程序需要计划和选择正确的工具来监视对您重要的方面。

监视堆栈有五个组成部分值得考虑。 我将简要介绍前两个,并向您指出包含它们的有用资源的方向,然后,我将重点详细介绍后三个。

目录

  1. 使日志有用
  2. 性能监控
  3. 错误追踪
  4. 容器指标
    • Docker统计
    • 烤盘
    • 数据狗
    • SignalFX
    • 波前
  5. 编排
    • 普罗米修斯
    • Kubernetes仪表板
    • Mesos指标
  6. 最后的想法

1.使日志有用

当然,Java会生成它自己的应用程序日志,但是通常您需要其他工具来使它们更具可读性和可用性。 有诸如Splunk和Elastic stack之类的知名企业,或者有Sumo Logic,Graylog,Loggly,PaperTrail,Logentries和Stackify之类的较小(但功能同样强大)的工具。

要考虑的主要因素是您使用或考虑的日志管理工具与Docker集成的程度如何。 对于大多数人而言,与Docker集成已成为安装中的又一个基本步骤,不会产生太多麻烦。

仍然存在一个缺点,就是日志仅与您选择包含在其中的信息一样好,这是其他工具可以填补任何空白的地方。

2.绩效监控

应用程序性能监视(APM)工具有助于识别代码或基础结构中的性能瓶颈,从而帮助您了解需要改进的地方。 这是一个繁忙的空间,其中包含AppDynamics,Dynatrace和New Relic等知名工具以及一些开源选项 。

与日志管理工具一样,从Docker角度考虑的主要问题是它们的集成效果如何。 Docker容器已经足够成熟,可以成为APM安装过程中的一步。

3.错误追踪

应用程序会产生错误,但是由于当今复杂的交织和分布式代码库,通常很难直接查明源代码。 错误跟踪工具旨在通过监视生产中的应用程序来帮助您解决此问题。

完全专注于基于JVM的应用程序的一个突出的工具是OverOps ,这是一种高度优化的本机代理,可以在不增加网络或存储开销的情况下,将CPU开销最多增加1%。 对于精益和性能至关重要的基于容器的JVM应用程序而言,它是完美的选择。

您可以查看实时异常和记录的错误或警告,并过滤特定的错误,例如与JVM,数据库或网络相关的错误。

5 种在 Docker 中监控 Java 应用程序的方法_第1张图片

过滤到与JVM相关的错误

5 种在 Docker 中监控 Java 应用程序的方法_第2张图片

识别触发错误的确切变量状态

找到错误后,您需要更多详细信息,您可以单击该错误以查找更多信息,包括触发该错误的代码行以及整个调用堆栈出错时的确切变量状态。

OverOps有一个专门针对容器的发行版 ,您可以通过在Debian / Ubuntu,CentOS / RedHat和Alpine Linux发行版的Dockerfile中添加少量行来访问和使用这些容器 。

容器通常用于不断变化的应用程序环境中,并定期引入新代码,OverOps可帮助您快速识别新错误并深入分析原因。 如果跨容器集群运行应用程序,则设置过程是相同的,OverOps将检测到同一应用程序以汇总来自所有实例的错误。

4.容器指标

容器本质上是小的独立设备,因此类似的指标(例如CPU和内存使用情况)对于跟踪高级应用程序问题仍然很重要。 我将在这里主要介绍基于Docker的容器,但会提及该工具是否支持其他选项。

Docker统计

我将从Docker自己的API开始,因为许多其他可用工具和功能都基于Docker提供的数据并从其他来源添加信息。 一个简单的docker stats命令将为您提供有关容器及其CPU,内存和I / O使用情况的概述。 其他API端点将提供有关任务,日志,事件等的详细信息。

5 种在 Docker 中监控 Java 应用程序的方法_第3张图片

Docker统计

烤盘

我在Docker聚会上遇到了Portainer项目。 这是一个易于实现的开源Docker管理工具,它可以在容器本身中运行,并且位于应用程序中每个容器的两个无害链接的后面。 它提供了可视化的统计数据和日志详细信息,可能足以满足您的目的,并且该项目的简单性和低成本是吸引人的因素。

5 种在 Docker 中监控 Java 应用程序的方法_第4张图片

瓷器统计

数据狗

Datadog专注于提供整个堆栈的详细指标。 您可以将所有监视点安排到自定义的仪表板中,以满足您的需求,并根据问题和严重性触发适当的通知。 当发现潜在问题时,Datadog内置了交流工具来进行注释,讨论并突出显示所发生的任何后续活动,以便您将来可以避免。

对于您要监视的Datadog缺乏官方集成的应用程序的任何方面,您可以使用其完全访问权限的API捕获事件并将它们提供给相同的仪表板,警报和协作工具。

对于在容器中运行的JVM应用程序,有几个组件反映了Datadog起作用的详细方式。 您可以为您的主机操作系统添加一个代理,然后添加Docker集成 ,以监视各个容器的性能以及与它们正在运行的应用程序相关联的容器的性能。 根据您的主机/ Docker设置, 安装可能会很复杂,因为Datadog希望再次监视主机以及容器引擎和应用程序层的性能,从而为您提供更全面的信息。

例如,下图显示了在Mac上运行的Docker,其中的数据层对Datadog很重要:

5 种在 Docker 中监控 Java 应用程序的方法_第5张图片

在DataDog上运行的macOS和Docker

要监视容器及其内部的情况,您可以通过将其添加到Dockerfile中来运行每个容器内的代理。 要监视应用程序,请使用Java / JMX集成来监视对您而言重要的任何方面。

如果这些选项不足以满足您的需求,那么Datadog还可以让您通过statsD发送指标,并且它们提供了Java库来帮助您实现此目的。

SignalFX

尽管可以配置本文中提到的任何服务以使其与微服务一起正常工作,但SignalFX使其成为其主要关注的一部分。 该SignalFX服务是基于开源的collectd统计守护程序,它提供了一个建立生态系统和社区,这意味着您可以添加collectd插件默认SignalFX产品不可收集数据。

对于Docker容器,SignalFX将使用stats API监视指标以报告CPU,内存和磁盘。 仪表板将首先为您提供所有容器的指标的汇总视图,并让您深入查看每个Docker主机和容器以查看性能问题所在。

我喜欢SignalFX的功能之一是安装代理在系统级别进行,因此更简单。 例如,要在Ubuntu和Debian上安装Java插件(其他发行版是一个两步过程),您所需要做的就是安装SignalFx的主要代理,它使用JMX技术与其他代理一起提供Java支持。 您可以使用SignalFX中的库在Java应用程序中添加自定义收集点。

波前

Wavefront对本文中的其他选项采用了不同的方法,而不是提供特定的日志记录解决方案,而是从其他日志记录服务(包括collectd,statsd和JMX)聚合时间序列数据。

对于Docker容器,Wavefront具有cAdvisor ,这是一个轻量级代理,可以作为容器运行,并监视低级资源利用率,例如CPU,内存和磁盘访问。 如果您使用的是容器服务,例如ECS,Kubernetes,Mesos或Docker Swarm,则Wavefront提供打包的集成选项,默认情况下,这些选项提供跨集群的聚合指标。

5.编排

随着容器基础架构变得越来越复杂,您将需要编排工具来构建应用程序并根据需求的变化进行管理,并在容器和机器遇到问题时保持一致性。 这个领域有几个主要参与者,并且所有参与者都提供了用于度量标准监视的解决方案,因为它是必不可少的组件。

普罗米修斯

Prometheus是Cloud Native Computing Foundation项目,是一个系统和服务监视系统,如果它观察到条件为真,则可以触发警报。 这是一种流行的开源工具,因此您将需要花费一些时间来配置它以满足您的需求。 如果您使用Mesos或Kubernetes来管理和调度容器,那么Prometheus是一个不错的选择,并且是这些工具的许多用户的首选。

Kubernetes仪表板

涉及监视Kubernetes集群的选项本身是另一篇文章,但是值得一提的是默认的Kubernetes Dashboard选项,以防万一仍然使用Kubernetes管理容器。 它概述了每个“ pod”的资源使用情况以及日志和作业查看器。

Mesos指标

如果您使用Mesos来管理容器,那么它又具有自己的内置选项来监视其运行的容器。 它不像Kubernetes仪表板那样直观,但是提供了一系列您需要实现自己或使用许多工具来可视化数据的端点 。

最后的想法

容器只是小型的独立设备,并且在大多数情况下提供与“常规”物理机或虚拟机相同的监视级别。 主要区别在于可能是应用程序一部分的容器数量及其短暂特性,这些容器不是为长期运行的服务而设计的。 组装监视堆栈时,请确保选择的解决方案使实例数的更改变得容易,并且度量标准可以随时间推移对应用程序提供一致的概述。

翻译自: https://www.javacodegeeks.com/2017/07/docker-monitoring-5-methods-monitoring-java-applications-docker.html

你可能感兴趣的:(5 种在 Docker 中监控 Java 应用程序的方法)