我们正在用swag升级FutureStack注册,直到4月30日。条款和条件适用。 现在注册

如何在上下文中为运行在Kubernetes中的Java应用程序设置日志

7分钟阅读

对于软件开发人员、DevOps工程师和IT专业人员来说,日志数据是一个有价值的、通常不可替代的故障排除数据来源。今天的团队比以往任何时候都充斥着来自更多来源的更多日志数据。此外,随着日志数据量的增加,与收集、管理和分析这些数据相关的挑战也在增加。

New Relic的日志通过快速、可靠和高度可伸缩的日志管理简化了这种情况,同时也为开发人员和操作团队提供了对应用程序和基础设施性能数据(如事件和错误)的更深入的可见性。这减少了平均解决时间(MTTR),允许IT快速排除生产事故,并将日志数据与其他数据连接起来遥测数据,如指标,事件和痕迹。

New Relic使它简单地收集和可视化您的日志数据使用插件与一些最常见的开源日志工具集成,如Fluentd、Fluent Bit、Logstash和Amazon CloudWatch(以及其他工具)。

有了context中的新Relic日志,您可以将上下文数据带入测井经验,并将日志数据与其他遥测技术关联起来,从而揭示应用程序和基础设施中有意义的模式和趋势。

那么,什么是log呢?

上下文中的日志添加元数据,将日志数据与相关数据(如错误或跟踪信息)联系起来New Relic APM

通过将所有这些数据集中在一个解决方案中,您将更快地找到问题的根本原因——从所有日志缩小到识别和解决问题所需的确切日志行。

例如,您可以将日志消息与Java应用程序的相关错误跟踪或分布式跟踪关联起来。

在这篇博文中,我将解释如何在上下文中为运行在Kubernetes集群中的Java应用程序设置日志。我们将通过三个步骤实现这一点:

  1. 安装新的Relic Kubernetes集成
  2. 为New Relic配置Kubernetes日志记录
  3. 在Java应用程序的上下文中启用日志

步骤1:安装新的Relic Kubernetes集成

New Relic的Kubernetes整合提供关于集群性能的深入信息,以及关于节点、名称空间、部署、复制集、pods、集群和容器的数据和元数据的报告,这样您就可以轻松确定任何问题的来源、范围和影响。

在本例中,我的Kubernetes环境是独立的,但是我们还支持几个基于云的Kubernetes平台包括Amazon Elastic Kubernetes Service (EKS)、谷歌Kubernetes Engine (GKE)和Red Hat OpenShift。

那么,让我们开始吧:

  1. New Relic的使用kube-state-metrics-一个侦听Kubernetes API服务器并生成度量的简单服务,用于收集关于Kubernetes对象状态的信息。使用这个命令在集群中安装kube-state-metrics:
    curl -L -o kube-state-metrics-1.7.2.zip https://github.com/kubernetes/kube-state-metrics/archive/v1.7.2.zip && unzip kube-state-metrics-1.7.2.zip && kubectl apply -f kube-state-metrics-1.7.2/kubernetes
  2. 下载新的Relic Kubernetes集成配置文件:
    curl - o https://download.newrelic.com/infrastructure_agent/integrations/kubernetes/newrelic-infrastructure-k8s-latest.yaml
  3. env:部分的配置文件,添加您的New Relic许可证密钥以及用于识别Kubernetes集群的集群名。这两个值都是必需的。
    env:—name: NRIA_LICENSE_KEY值:—name: CLUSTER_NAME值:
  4. 加载daemon设置到你的集群:
    创建-f newrelic-infrastructure-k8s-latest.yaml
  5. one.newrelic.com,并选择Kubernetes cluster explorer启动器。这将带您进入Kubernetes集群浏览器。如果你以前没有使用过它,花几分钟去探索它,它是非常值得的。

新遗迹一号的Kubernetes集群探索者

提示:如果您遇到问题或无法看到集群,请查看Kubernetes集成文档

步骤2:捕获Kubernetes日志

现在,我们需要收集库伯内特的原木然后把它们送到新遗迹。这里,我们将使用FluentBit和一个新的Relic输出插件来实现这一点。下面是如何设置:

  1. 克隆或下载新遗迹kubernetes-logging从GitHub项目。
  2. new-relic-fluent-plugin.yml,编辑env:部分来替换占位符值< LICENSE_KEY >用你的新Relic许可证密钥。
    —名称:LICENSE_KEY值:
  3. 加载日志插件到你的Kubernetes环境:
    kubectl应用-f。
  4. one.newrelic.com,并选择日志启动器。过一会儿,您应该会看到Kubernetes日志条目开始出现。如果你已经从其他来源获得了可能会妨碍你的日志条目,再添加插件源:“kubernetes”到查询字段。这将只显示来自Kubernetes集群的条目。(祝贺您,您也刚刚获得了使用New Relic日志的宝贵经验。查询既简单又容易。无需等待结果,也无需学习专门的查询语言。)

New Relic Logs从您的集群收集日志数据

提示:如果您遇到了问题或无法查看日志,请查看完整的日志Kubernetes日志文档插件

步骤3:在Java应用程序的上下文中启用日志

为此,New Relic的检测需要注入一些元数据,将日志条目映射到应用程序活动。New Relic利用您现有的应用程序日志框架来实现这一点。虽然这一步涉及到配置更改,但您不必更改任何应用程序代码。

在本例中,我的Java应用程序使用Log4j 2。x扩展用于日志记录,但新遗留支持其他语言和日志框架

  1. 如果你还没有这样做,你的应用程序New Relic的Java APM agent v 5.6.0或更高,并使能分布式跟踪
  2. 在您的项目的上下文扩展中添加新的Relic日志。我的项目使用Gradle,所以我添加了编译节的依赖关系部分,如图所示:
    dependencies{编译("com. newrelics .logging:log4j2:1.0-rc2")}
  3. 编辑您的日志配置文件(我的称为日志配置文件log4j2.xml)并添加packages语句到< >配置标签。
    <配置xmlns = " http://logging.apache.org/log4j/2.0/config "包= " com.newrelic.logging.log4j2”>
  4. 仍然在日志配置XML文件中,添加一个< NewRelicLayout /比;标记到你的日志appender之一。在本例中,我们将使用控制台追加器,因为这是Kubernetes中聚合日志的默认方法:
      
  5. 设置log4j2.messageFactory属性来使用NewRelicMessageFactory。我通过向Java命令行添加一个自定义参数来做到这一点:
    -Dlog4j2.messageFactory = com.newrelic.logging.log4j2.NewRelicMessageFactory

    提示:为了帮助您理解在这些步骤中需要做什么,请查看我的示例构建。Gradlelog4j2.xml文件。

  6. 将应用程序重新部署到Kubernetes环境中。
  7. 等待几分钟,然后寻找日志条目有span.idtrace.id属性。例如,在查询字段中,添加有span.id

提示:如果你没有看到任何流量,运行应用程序。

如果您拥有具有这些属性的日志条目,那么您就能够从应用程序跟踪深入到日志中。


使用跨度。在New Relic中检查Java应用程序上下文中的日志的id

下面是当你从应用程序跟踪深入到日志时的样子:

想了解更多关于如何使用cluster explorer保持Kubernetes环境的信息吗?看看一个完整的介绍监测Kubernetes与新遗迹