Apache Beam 第三方 Java 扩展

这些是可能对特定应用程序有用的第三方 Java 库。

解析 HTTPD/NGINX 访问日志。

摘要

Apache HTTPD Web 服务器创建包含有关对 Web 服务器发出的请求的宝贵信息的日志文件。这些日志文件的格式是 Apache HTTPD 服务器中的配置选项,因此将此解析为有用的数据元素通常非常困难。

为了以简单的方式解决此问题,创建了一个与 Apache Beam 结合使用的库,该库能够为 Apache HTTPD 和 NGINX 执行此操作。

基本思想是日志格式规范是用于创建行的模式。此解析器只需使用此模式和要提取的字段列表进行初始化。

项目页面

https://github.com/nielsbasjes/logparser

许可证

Apache 许可证 2.0

下载

<dependency>
  <groupId>nl.basjes.parse.httpdlog</groupId>
  <artifactId>httpdlog-parser</artifactId>
  <version>5.0</version>
</dependency>

代码示例

假设 WebEvent 类具有设置器 setIP、setQueryImg 和 setQueryStringValues

PCollection<WebEvent> filledWebEvents = input
  .apply("Extract Elements from logline",
    ParDo.of(new DoFn<String, WebEvent>() {
      private Parser<WebEvent> parser;

      @Setup
      public void setup() throws NoSuchMethodException {
        parser = new HttpdLoglineParser<>(WebEvent.class,
            "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{Cookie}i\"");
        parser.addParseTarget("setIP",                  "IP:connection.client.host");
        parser.addParseTarget("setQueryImg",            "STRING:request.firstline.uri.query.img");
        parser.addParseTarget("setQueryStringValues",   "STRING:request.firstline.uri.query.*");
      }

      @ProcessElement
      public void processElement(ProcessContext c) throws InvalidDissectorException, MissingDissectorsException, DissectionFailure {
        c.output(parser.parse(c.element()));
      }
    })
  );

分析 Useragent 字符串

摘要

解析和分析 useragent 字符串,并提取尽可能多的相关属性。

项目页面

https://github.com/nielsbasjes/yauaa

许可证

Apache 许可证 2.0

下载

<dependency>
  <groupId>nl.basjes.parse.useragent</groupId>
  <artifactId>yauaa-beam</artifactId>
  <version>4.2</version>
</dependency>

代码示例

PCollection<WebEvent> filledWebEvents = input
    .apply("Extract Elements from Useragent",
      ParDo.of(new UserAgentAnalysisDoFn<WebEvent>() {
        @Override
        public String getUserAgentString(WebEvent record) {
          return record.useragent;
        }

        @YauaaField("DeviceClass")
        public void setDC(WebEvent record, String value) {
          record.deviceClass = value;
        }

        @YauaaField("AgentNameVersion")
        public void setANV(WebEvent record, String value) {
          record.agentNameVersion = value;
        }
    }));