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;
}
}));