热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Logstash的调试提示

作为Java开发人员,当首次向您展示如何在调试模式下运行JVM,将其附加并设置断点时,您真的感觉自己已经走上了开发人员的第一步。好吧&#x

作为Java开发人员,当首次向您展示如何在调试模式下运行JVM,将其附加并设置断点时,您真的感觉自己已经走上了开发人员的第一步。 好吧,至少我做到了。 现在,世界正在全面使用微服务,并且知道这种窍门意味着每天越来越少。

本周,我在与Logstash一起玩,看看如何将所有应用程序异常发送到Elasticsearch实例,以便将它们显示在Kibana仪表板上以进行分析。 当然,起初在Elasticsearch中什么也没看到。 这篇文章描述了最终使我工作的方法。

设置

组件如下:

  • 应用程序。 由于许多例外是必要的,因此我使用了Java Bullshifier 。 唯一的修改是连接一些代码以将异常记录在日志文件中。

    publicclassExceptionHandlerExecutorextendsThreadPoolExecutor{privatestaticfinalLoggerLOGGER&#61;LoggerFactory.getLogger(ExceptionHandlerExecutor.class);publicExceptionHandlerExecutor(intcorePoolSize,intmaximumPoolSize,longkeepAliveTime,TimeUnitunit,BlockingQueue<Runnable>workQueue){super(corePoolSize,maximumPoolSize,keepAliveTime,unit,workQueue);}&#64;OverrideprotectedvoidafterExecute(Runnabler,Throwablet){if(rinstanceofFutureTask){FutureTask<Exception>futureTask&#61;(FutureTask<Exception>)r;if(futureTask.isDone()){try{futureTask.get();}catch(InterruptedException|ExecutionExceptione){LOGGER.error("Uncaught error",e);}}}}
    }

  • Logstash
  • 弹性搜索
  • 基巴纳

顺序图

第一次颠簸

在启动Logstash之前&#xff0c;需要对其进行配置-尤其是其输入和输出。

没有针对异常堆栈跟踪的开箱即用输入。 这些是多行消息&#xff1a;因此&#xff0c;只有以时间戳开头的行才标记新消息的开始。 Logstash通过包含regex模式的特定codec实现了这一目标。

有些人在遇到问题时会认为“我知道&#xff0c;我会使用正则表达式”。 现在他们有两个问题。

—杰米·扎温斯基

有些人在正则表​​达式方面比其他人更好&#xff0c;但是没有人以他/她的母语学习它。 因此&#xff0c;有错误并不罕见。 在这种情况下&#xff0c;应使用许多可用的在线正则表达式验证器之一 。 他们只是无价的&#xff0c;以了解为什么某些模式不匹配。

相关的Logstash配置代码段变为&#xff1a;

input {file {path &#61;> "/tmp/logback.log"start_position &#61;> "beginning"codec &#61;> multiline {pattern &#61;> "^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}"negate &#61;> truewhat &#61;> "previous"}}
}

第二次颠簸

现在&#xff0c;数据找到了进入Elasticsearch的方式&#xff0c;但是消息不是预期的格式。 为了分析此问题的出处&#xff0c;可以在控制台上打印消息&#xff0c;而不是在Elasticsearch中建立索引。

以下代码段非常简单&#xff1a;

output {stdout { codec &#61;> rubydebug }
}

通过控制台上打印的消息&#xff0c;可以了解问题发生的位置。 在那种情况下&#xff0c;我可以调整input配置&#xff08;并添加被遗忘的negate ⇒ true位&#xff09;。

最后&#xff0c;我得到了预期的结果&#xff1a;

基巴纳

结论

随着日新月异的工具越来越多&#xff0c;现代开发人员的工具带也需要增加。 不幸的是&#xff0c;没有一个万能的解决方案&#xff1a;为了了解工具的每个细节&#xff0c;一个人需要使用和重复使用它&#xff0c;发挥创造力并在Google上搜索...很多。

翻译自: https://blog.frankel.ch/debugging-hints-for-logstash/




推荐阅读
  • 本文介绍了在 Java 编程中遇到的一个常见错误:对象无法转换为 long 类型,并提供了详细的解决方案。 ... [详细]
  • 零拷贝技术是提高I/O性能的重要手段,常用于Java NIO、Netty、Kafka等框架中。本文将详细解析零拷贝技术的原理及其应用。 ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • Java高并发与多线程(二):线程的实现方式详解
    本文将深入探讨Java中线程的三种主要实现方式,包括继承Thread类、实现Runnable接口和实现Callable接口,并分析它们之间的异同及其应用场景。 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • C#实现文件的压缩与解压
    2019独角兽企业重金招聘Python工程师标准一、准备工作1、下载ICSharpCode.SharpZipLib.dll文件2、项目中引用这个dll二、文件压缩与解压共用类 ... [详细]
  • JVM钩子函数的应用场景详解
    本文详细介绍了JVM钩子函数的多种应用场景,包括正常关闭、异常关闭和强制关闭。通过具体示例和代码演示,帮助读者更好地理解和应用这一机制。适合对Java编程和JVM有一定基础的开发者阅读。 ... [详细]
  • 本文详细介绍了Java反射机制的基本概念、获取Class对象的方法、反射的主要功能及其在实际开发中的应用。通过具体示例,帮助读者更好地理解和使用Java反射。 ... [详细]
  • JUC(三):深入解析AQS
    本文详细介绍了Java并发工具包中的核心类AQS(AbstractQueuedSynchronizer),包括其基本概念、数据结构、源码分析及核心方法的实现。 ... [详细]
  • Spring – Bean Life Cycle
    Spring – Bean Life Cycle ... [详细]
  • DAO(Data Access Object)模式是一种用于抽象和封装所有对数据库或其他持久化机制访问的方法,它通过提供一个统一的接口来隐藏底层数据访问的复杂性。 ... [详细]
  • 在 Java 中,`join()` 方法用于使当前线程暂停,直到指定的线程执行完毕后再继续执行。此外,`join(long millis)` 方法允许当前线程在指定的毫秒数后继续执行。 ... [详细]
  • Java设计模式详解:解释器模式的应用与实现
    本文详细介绍了Java设计模式中的解释器模式,包括其定义、应用场景、优缺点以及具体的实现示例。通过音乐解释器的例子,帮助读者更好地理解和应用这一模式。 ... [详细]
  • 兆芯X86 CPU架构的演进与现状(国产CPU系列)
    本文详细介绍了兆芯X86 CPU架构的发展历程,从公司成立背景到关键技术授权,再到具体芯片架构的演进,全面解析了兆芯在国产CPU领域的贡献与挑战。 ... [详细]
  • 本文是Java并发编程系列的开篇之作,将详细解析Java 1.5及以上版本中提供的并发工具。文章假设读者已经具备同步和易失性关键字的基本知识,重点介绍信号量机制的内部工作原理及其在实际开发中的应用。 ... [详细]
author-avatar
殷小苗_535
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有