`
samwang
  • 浏览: 45101 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

利用antlr来制作ng的日志分析器

 
阅读更多
线上的项目需要实时监控日志来分析用户行为和系统健康情况,我们可以通过分析系统日志来知道系统的实时运行情况,然而系统的日志又非常多,有
tomcat日志、ng日志、mysql日志、lvs日志等等非常多的日志信息,如何在这么多的日志信息中捕获出我们需要的日志是一件有价值的事情。
    下面我来介绍一下如何利用antlr来分析出ng日志中timeout的日志信息,
     ng中的timeout日志格式: 
      2013/07/24 16:02:52 [error] 3389#0: *31309 connect() failed (111: Connection refused) while connecting to upstream, client: 172.18.30.52, server: tj.playsnail.com, request: "GET /gather/data.do?data=0-3-4-4-1:211182,2:12,3:12001&_=1374652788858 HTTP/1.1", upstream: "http://10.103.20.6:9088/gather/data.do?data=0-3-4-4-1:211182,2:12,3:12001&_=1374652788858", host: "tj.playsnail.com", referrer: "http://www.playsnail.com/platform/game/frame?gameId=12&serverId=12001"
      
      在解析日志,我们需要抽取哪些接口报了异常,在什么时候报的异常是我们比较感兴趣的数据,所以定义日期和时间的语法定义,
  日志中的日期和时间的格式:2013/07/24 16:02:52 ,那么在antlr中可以这样来定义:  
      INT : [0-9]+ ;
      date: INT '/' INT '/' INT ;
      time: INT ':' INT ':' INT ;
 
  下面再定义timeout时 url的语法规则,分析ng日志,发现接口的url规则:都以 upstream开头,后面是以双引号开始和结束,如下是ng的超时接口片段:
   
upstream: "http://10.103.20.6:9088/gather/data.do?data=0-3-4-4-1:211182,2:12,3:12001&_=1374652788858" 
  那么可以定义如下的语法规则:  
 url : 'upstream:' '"' 'http://' ~'"'*  '"';
     
  对于整个timeout的异常信息的语法定义如下:
     date time '[error]' INT '#' INT ':' '*' INT 'upstream timed out' (CHAR | url | ~'\n' )* NL* EOF?;
 
  于是整个的语法文件就如下:
      
          grammar Timeout;

file: (expectedRows | .)*;
INT : [0-9]+ ;
date: INT '/' INT '/' INT ;
time: INT ':' INT ':' INT ;
//STRING: ~'\n'*;
NL : '\n' ;
WS : ' ' -> skip ; 
//WS : [\n\t\r] -> skip ; 
ID: [a-zA-Z_$] [a-zA-Z_$0-9]* ;
CHAR : '('|')'|','|'?'|'.'|'='|'"'|'-'|'&'|':'|'%'|'['|']'|'@'|'{'|'}'|'\\"';
url : 'upstream:' '"' 'http://' ~'"'*  '"';
expectedRows: date time '[error]' INT '#' INT ':' '*' INT 'upstream timed out' (CHAR | url | ~'\n' )* NL* EOF?
   
    在antlr提供的visitor接口中我们可以动态的获取每个超时日志的信息中的日期、时间和超时接口等信息,然后我们利用mysql或者nosql这样的工具来把这些数据入库做
数据筛选查询,这就满足了我们对哪些应用在什么时间段发生了超时,一天中哪个时间段发生超时访问,再结合实时的监控数据,比如:系统各个方面的资源消耗,cpu ,
memory, jvm gc 时长,网络吞吐量等数据一起分析,就能够达到我们实时的多角度分析系统的目的。
分享到:
评论

相关推荐

    利用Antlr实现的命令行解析器(增强)

    Antlr,全称ANother Tool for Language Recognition,是一个强大的解析工具,用于生成词法分析器(Lexer)、语法分析器(Parser)以及抽象语法树(AST,Abstract Syntax Tree)。本项目利用Antlr实现了一个命令行...

    利用Antlr实现的命令行解析器

    在本文中,我们将深入探讨如何利用Antlr来实现一个命令行解析器,以及涉及的相关文件及其作用。 首先,`FCmd.g` 是Antlr的语法文件,它定义了我们想要解析的语言的语法规则。在这个文件中,你会看到类似以下的语法...

    Antlr教程文法分析器

    Antlr 是一个强大的解析工具,用于生成解析器和词法分析器,支持多种语言,包括 Java、C#、Python 等。它可以帮助开发者构建复杂语法的解析器,用于处理特定的语言或数据格式。在Antlr中,主要涉及到两个核心类:...

    编译原理课程设计有关antlr的词法分析和语法分析

    《编译原理》课程设计报告主要涉及ANTLR这一强大的分析器生成工具,其在词法分析和语法分析方面具有重要作用。ANTLR能够帮助开发者理解和实现编译器的关键组成部分,包括词法分析器(Lexer)、解析器(Parser)和树...

    利用ANTLR编写的函数绘图语言解释器源码

    其中.g为ANTLR源文件,可生成语法分析器和语法树的.java文件,然后进行必要的修改(添加成员变量)。提供的.java文件已经修改好。直接放在项目里,选择主类Frame,编译运行即可。在窗口里输入测试文件的路径,即可绘...

    antlr java语法分析程序

    ANTLR生成Java、C#、Python、JavaScript等多种语言的解析器和词法分析器,使得开发者能够轻松地处理各种输入语法。 在Java领域,ANTLR被用来构建语法解析器,特别是对于那些需要解析自定义语法的项目。它可以解析...

    ANTLR语法解析器简介

    2. **生成解析器和词法分析器**:ANTLR根据用户定义的文法生成相应的词法分析器(lexer)和解析器(parser)。词法分析器负责将输入的字符流分解成一个个的记号(tokens),而解析器则根据记号构建抽象语法树(AST)...

    开源项目-antlr-antlr4.zip

    ANTLR 4.6是这个系列的一个重要更新,引入了对Go语言的支持,这意味着开发人员现在可以使用ANTLR来生成Go语言的解析器和词法分析器。这一功能扩展使得ANTLR在Go生态系统中的应用变得更加广泛,为Go程序员提供了更...

    antlr-2.7.7.jar.zip

    ANTLR被广泛应用于各种编程语言的编译器和解释器的构建,它能生成Java、C#、Python、JavaScript等多种目标语言的解析器和词法分析器。这个"antlr-2.7.7.jar.zip"文件是ANTLR的一个特定版本——2.7.7的Java版本,包含...

    基于antlr3的json分析器实现json到java业务对象转化

    ANTLR是一个强大的解析工具,用于生成词法分析器、语法分析器和解析树遍历器,支持多种语言,包括Java。在本主题中,我们将深入探讨如何基于ANTLR3实现一个JSON分析器,将接收到的JSON数据转换为Java业务对象。 ...

    antlr4-master 源码

    - **解析器生成原理**:了解ANTLR4如何从语法规则生成词法分析器和语法分析器的内部实现。 - **语义分析和错误处理**:学习ANTLR4如何处理语法错误和提供有用的错误提示。 - **自定义AST构建**:学习如何利用ANTLR...

    ANTLR

    ANTLR可以生成Java、C#、Python、JavaScript等多种目标语言的解析器和词法分析器。 ANTLR的主要功能是通过读取用户定义的语法规则(通常以扩展名为.g4的文件格式)来生成解析器。这些语法规则定义了输入语言的结构...

    antlr-2.7.7.jar和antlr-2.7.6.jar

    ANTLR会根据这些规则生成相应的解析器和词法分析器源代码,然后将这些源代码编译成Java类,最后在项目中使用这些类来解析输入。 总之,ANTLR是构建解析器的强大工具,而antlr-2.7.7.jar和antlr-2.7.6.jar是ANTLR的...

    基于antlr的java解释器

    ANTLR的核心功能是生成解析器和词法分析器。词法分析器负责将输入的字符流分解成一系列的标记(tokens),而解析器则根据这些标记构建出抽象语法树(AST)。在构建Java解释器时,首先需要定义Java的语法规则,这通常...

    antlr 生成C++描述的分析程序

    ANTLR(Another Tool for Language Recognition)是一种强大的语法分析器生成工具,主要用于解析编程语言和其他形式的语言结构。ANTLR 支持多种输出语言,其中包括 Java 和 C++。尽管 ANTLR 默认生成的是 Java 代码...

    antlr入门 编译领域

    ANTLR支持多种编程语言,包括Java、C++、C#等,能够生成词法分析器(Lexer)、语法分析器(Parser)和树形遍历器(Tree Walker)。它通过定义特定的语言文法,自动生成相应的解析代码,极大地提高了开发效率。此外,ANTLR...

    antlr.jar.zip

    ANTLR能够生成Java、C#、Python、JavaScript等多种目标语言的解析器和词法分析器。 标题"antlr.jar.zip"表明这是一个关于ANTLR的Java库的压缩文件,已经打包为JAR(Java Archive)格式,并且进一步压缩为了ZIP文件...

    antlr做的计算器

    ANTLR会根据这个语法文件生成解析器(Parser)和词法分析器(Lexer),它们共同作用于输入的四则运算表达式,将其转化为抽象语法树(AST,Abstract Syntax Tree)。例如,表达式"2 * (3 + 4)"将被转化为一棵树形结构...

Global site tag (gtag.js) - Google Analytics