Docker学习总结(24)——在Docker中监视Java应用程序的5种方法

来源:互联网 发布:kk视频录制软件 编辑:程序博客网 时间:2024/06/05 04:58

说明:根据国外https://www.javacodegeeks.com/2017/07/docker-monitoring-5-methods-monitoring-java-applications-docker.html一文翻译而来

在Docker容器中监视Java应用程序的一些最有用的方法是什么?

在容器中运行应用程序是一种越来越受欢迎的维护大型分布式堆栈的方式,根据需求而变化。 Java VM的遗产使其成为基于容器的基础架构的理想语言。通过许多移动部件和组件,在容器中监视Java应用程序需要规划和选择正确的工具来监视与您相关的方面。
值得考虑的监视堆栈有五个组件。我将简要介绍前两个,并指出您所涉及的有用资源的方向,然后我将详细介绍最后三个。
目录
  1. 生成有用的日志
  2. 性能监控
  3. 错误追踪
  4. 容器测量指标

    • Docker统计
    • Portainer
    • Datadog
    • SignalFX
    • Wavefront
  5. Orchestration

    • Prometheus
    • Kubernetes Dashboard
    • Mesos测量

结束语

1.生成有用的日志
当然,Java生成自己的应用程序日志,但是通常需要额外的工具来使它们更易于阅读和使用。有大型,成熟的玩家,如Splunk和弹性堆栈,或者相对较小(但不逊色的)工具,如Sumo Logic,Graylog,Loggly,PaperTrail,Logentries和Stackify。
要考虑的主要因素是您正在使用或考虑与Docker集成的日志管理工具的良好程度。大多数情况下,与Docker的集成正在成为安装过程中另一个基本步骤,没有太多的跳跃跳跃。
剩下的一个缺点是,日志只有您选择包含在其中的信息一样好,而其他工具可以填补任何差距的地方。
2.绩效监测
应用程序性能监控(APM)工具有助于识别代码或基础架构中的性能瓶颈,帮助您了解需要改进的内容。这是一个繁忙的空间,拥有诸如AppDynamics,Dynatrace和New Relic等众所周知的工具,以及少量的开源选项。
与日志管理工具一样,从Docker角度考虑的主要问题是它们的集成工作有多好。 Docker容器已经成熟到足以成为APM安装过程的一步。
3.错误跟踪
应用程序会产生错误,但是随着今天复杂的交织和分布式代码库,通常很难直接找到源代码。错误跟踪工具旨在通过监控生产中的应用程序来帮助您解决此问题。
OverOps是一种高度优化的本机代理,它将极大的网络或存储开销增加到CPU开销的1%。它是完美的基于容器的JVM应用程序,其中瘦身和性能是关键。

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


过滤JVM相关的错误


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

一旦你发现错误,你想要更多的细节,你可以点击它来了解更多,包括触发它的代码行和整个调用堆栈错误时的确切的变量状态。

OverOps具有专为容器设计的特定版本,您可以通过向Dockerfile添加少于几条线路来访问和使用,其版本为Debian / Ubuntu,CentOS / RedHat和Alpine Linux。
容器通常用于不断变化的应用程序环境中,定期引入新代码,OverOps可帮助您快速识别出新的错误,并深入了解原因。如果您正在跨容器集群运行应用程序,则安装过程相同,OverOps会检测到相同的应用程序来汇总所有实例的错误。
4.集装箱指标
容器本质上是小型,独立的机器,因此类似的指标(如CPU和内存使用量)对于跟踪高级应用程序问题仍然很重要。我将主要在这里覆盖基于Docker的容器,但是会提到一个工具是否支持其他选项。
4-1.Docker统计

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


Docker统计

4-2.Portainer
在Docker聚会上遇到了Portainer的项目。它是一个开放源码Docker管理工具,它可以在容器本身中运行,并且位于应用程序中每个容器上的两个无害链接之后。它提供了可视化的统计信息和日志细节,这些信息可能足以满足您的需要,而项目的简单性和低成本也是一个有吸引力的因素。


Portainer统计

4-3.Datadog
Datadog专注于提供整个堆栈的详细指标。您可以将所有监控点安排到自定义仪表板中,以满足您的需要,并根据问题和严重程度触发相应的通知。当它标记一个潜在的问题时,Datadog内置了通信工具来进行注释,进行讨论,并突出显示发生的任何后续操作,以便将来希望避免这种情况。
对于您想要监视Datadog的应用程序的任何方面缺乏正式的集成,您可以使用他们的完全访问API来捕获事件并将它们馈送到相同的仪表板,警报和协作工具中。
对于在容器中运行的JVM应用程序,有几个组件反映了Datadog的细粒度方式。您可以为主机操作系统添加代理,然后添加Docker集成,监视单个容器的性能以及与运行的应用程序相关的容器性能。根据您的主机/ Docker设置,安装可能很复杂,因为Datadog想要监控主机以及容器引擎和应用程序层的性能,再次给您一个更全面的图像。
例如,下面的图片显示Docker在我的Mac上运行,其中层数据对Datadog很重要:


macOS和Docker在DataDog上运行

要监视容器及其内部发生的情况,可以通过将代理添加到Dockerfile中来运行每个容器内的代理。要监控应用程序,请使用Java / JMX集成来监控哪个方面对您很重要。
如果这些选项对您来说还不够,那么Datadog还可以通过statsD发送指标,并提供一个Java库来帮助您。
4-4.SignalFX
虽然可以将本文中提到的任何服务配置为与微服务器配合使用,但SignalFX使其成为其主要焦点。 SignalFX服务基于开源的collectd stats守护进程,它提供了一个既定的生态系统和社区,这意味着您可以添加collectd插件来收集默认SignalFX产品中不可用的数据。
对于Docker容器,SignalFX将使用统计API监视指标以报告CPU,内存和磁盘。仪表板将首先为您提供所有容器中的指标的聚合视图,并让您深入了解每个停靠点主机和容器,以查看性能问题所在。
我喜欢SignalFX的其中一个功能是安装代理发生在系统级别,因此更简单。例如,要在Ubuntu和Debian上安装Java插件(其他发行版是一个两步的过程),您需要做的就是安装SignalFx的主要collectd代理,并通过使用JMX技术将Java包含在其他代理中。您可以使用SignalFX的库在Java应用程序中添加自定义收集点。
4-5.Wavefront
Wavefront对本文中的其他选项采用不同的方法,而不是提供特定的日志解决方案,而是从其他日志记录服务(包括collectd,statsd和JMX)汇总时间序列数据。
对于Docker容器,Wavefront具有cAdvisor,一个作为容器运行的轻量级代理,并监视CPU,内存和磁盘访问等低级资源利用率。如果您正在使用集装箱服务,如ECS,Kubernetes,Mesos或Docker Swarm,则Wavefront提供打包集成选项,默认情况下可提供集群中的聚合度量。
5.编排
随着容器基础设施变得越来越复杂,您需要编排工具来构建应用程序并根据需求进行更改并进行管理,因为容器和机器遇到问题。在这个领域有很少的主要参与者,而且它们都是提供衡量指标监控的解决方案,因为它是必不可少的组成部分。

5-1.普罗米修斯
云计算基金会项目,普罗米修斯是一个系统和服务监控系统,可以触发警报,如果它遵循一个条件是真实的。这是一个受欢迎的开源工具,因此您需要花时间配置以满足您的需求。如果您使用Mesos或Kubernetes来管理和安排您的容器,那么Prometheus是一个很好的选择,对于许多这些工具的用户来说,这是一个首选的选择。
5-2.Kubernetes仪表板
覆盖Kubernetes集群监控的选项本身就是另一篇文章,但是值得一提的是使用默认的Kubernetes Dashboard选项,以防您用Kubernetes来管理容器。它提供了每个“pod”和日志和作业查看器的资源使用情况的概述。
5-3.Mesos指标
如果您正在使用Mesos来管理容器,那么它又有自己的内置选项来监视它运行的容器。它不像Kubernetes仪表板那样可视化,但提供了一系列端点,您需要实现自己或使用可视化数据的许多工具之一。
6.结束语
容器只是小型,独立的机器,并且在大多数情况下,提供与“正常”物理机器或虚拟机相同级别的监视。主要区别在于可能是您应用程序的一部分的容器数量及其短暂性质,容器不适用于长期运行的服务。组装监控堆栈时,请确保选择能够更改实例数量的解决方案,并且指标随时间提供您应用程序的一致概述。

阅读全文
0 0