相关文章推荐
逃课的滑板  ·  ubuntu ...·  9 月前    · 
坚强的大白菜  ·  Constructors in ...·  1 年前    · 

使用正则表达式分隔Apache日志文件

通用日志格式的Apache日志文件示例:

127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326

组合日志格式的Apache日志文件示例:

127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 " http://www.example.com/start.html " "Mozilla/4.08 [en] (Win98; I ;Nav)"

组合格式的日志文件比通用格式的日志文件多了两条请求头中包含的信息,其他部分完全一样,以组合格式的日志文件为例,日志中的每项代表的含义如下( 详细信息参见Apache文档 ):

  • 客户端的IP地址。
  • 由客户端identd进程判断的RFC1413身份(identity),输出中的符号"-"表示此处的信息无效。
  • HTTP认证系统得到的访问该网页的客户标识(userid),如果网页没有设置密码保护,则此项将是"-"。
  • 服务器完成请求处理时的时间。
  • 客户的动作\请求的资源\使用的协议。
  • 服务器返回给客户端的状态码。
  • 返回给客户端的不包括响应头的字节数.如果没有信息返回,则此项应该是"-"。
  • "Referer"请求头。
  • "User-Agent"请求头。
  • 用来提取信息的正则表达式组成:

    ^ :匹配每一行的开头。 ([0-9.]+)\s :匹配IP地址。 ([\w.-]+)\s :匹配identity,由数字字母下划线或点分隔符组成。 ([\w.-]+)\s :匹配userid,由数字字母下划线或点分隔符组成。 (\[[^\[\]]+\])\s :匹配时间。 "((?:[^"]|\")+)"\s :匹配请求信息,双引号中可能出现转义的双引号\"。 (\d{3})\s :匹配状态码。 (\d+|-)\s :匹配响应字节数或-。 "((?:[^"]|\")+)"\s :匹配"Referer"请求头,双引号中可能出现转义的双引号\"。 "((?:[^"]|\")+)" :匹配"User-Agent"请求头,双引号中可能出现转义的双引号\"。 $ :匹配行尾。

    最终的表达式如下:

    ^([0-9.]+)\s([\w.-]+)\s([\w.-]+)\s(\[[^\[\]]+\])\s"((?:[^"]|\")+)"\s(\d{3})\s(\d+|-)\s"((?:[^"]|\")+)"\s"((?:[^"]|\")+)"$

    C#示例:

    在C#中使用 1 static void Main( string [] args)
    2 {
    3 string pattern = " ^([0-9.]+)\\s([\\w.-]+)\\s([\\w.-]+)\\s(\\[[^\\[\\]]+\\])\\s\ " (( ? :[ ^ \ " ]|\\\ " ) + )\ " \\s(\\d{3})\\s(\\d+|-)\\s\ " (( ? :[ ^ \ " ]|\\\ " ) + )\ " \\s\ " (( ? :[ ^ \ " ]|\\\ " ) + )\ " $ " ;
    4 string input = " 127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] \ " GET / apache_pb.gif HTTP / 1.0 \ " 200 2326 \ " http: // www.example.com/start.html\" \"Mozilla/4.08 [en] (Win98; I ;Nav)\"";
    5 System.Text.RegularExpressions.GroupCollection groups = System.Text.RegularExpressions.Regex.Match(input, pattern).Groups;
    6 for ( int i = 0 ; i < groups.Count; i ++ )
    7 {
    8 Console.WriteLine(groups[i].Value);
    9 }
    10 } Hadoop生态系统中的监控与管理工具:Apache Ambari和Apache Oozie的功能解析
    Hadoop生态系统中的监控与管理工具:Apache Ambari和Apache Oozie的功能解析
    Apache Kafka元素解析
    Apache Kafka 是什么?干什么用的?本文试图从基本元素等微观角度去剖析Apache Kafka的原理机制。作为一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域,由 LinkedIn 开发,基于Scala 编写,Apache Kafka以可水平扩展和高吞吐率而被广泛使应用于各行各业,是大型分布式系统不可缺少的中间件产品。
    Apache JMeter 是一款开源的性能测试工具,可以用于测试 Web 应用程序、FTP 服务器、数据库等各种类型的服务器。本文将以 JMeter 5.5 为例介绍 JMeter 的使用方法。 Apache Kafka-Spring Kafka生产消费@KafkaListener源码解析
    Apache Kafka-Spring Kafka生产消费@KafkaListener源码解析
    《Apache RocketMQ 源码解析》电子版地址
    本书围绕Apache RocketMQ 源码进行多方面分析,包含RocketMQ ACL、RocketMQ 消息轨迹、RocketMQ 多副本之Leader 选主等,带你深入了解Apache RocketMQ。
    超硬核解析!Apache Hudi灵活的Payload机制
    Apache Hudi 的Payload是一种可扩展的数据处理机制,通过不同的Payload我们可以实现复杂场景的定制化数据写入方式,大大增加了数据处理的灵活性。Hudi Payload在写入和读取Hudi表时对数据进行去重、过滤、合并等操作的工具类,通过使用参数 "hoodie.datasource.write.payload.class"指定我们需要使用的Payload class。