analyzer bug when nginx does internal redirect

This commit is contained in:
Mengyi Zhou 2016-02-02 19:24:25 +08:00
parent 163cbf9e50
commit 5d0a5645d1
2 changed files with 37 additions and 0 deletions

View file

@ -22,6 +22,10 @@ public class AccessLogLineFormat implements LineFormat {
public AccessLogLineFormat(String format) {
setFormat(format);
registerPatternForKey("http_x_forwarded_for", "(-|(?:[0-9.]+(?:, [0-9.]+)*))");
registerPatternForKey("request_time", "(-|\\d+\\.\\d+)");
registerPatternForKey("upstream_response_time", "((?:-|\\d+\\.\\d+)(?: : (?:-|\\d+\\.\\d+))?)");
registerPatternForKey("upstream_addr", "((?:-|\\S+)(?: : (?:-|\\S+)?))");
registerPatternForKey("upstream_status", "((?:-|\\d{3})(?: : (?:-|\\d{3})?))");
}
@Override

View file

@ -72,6 +72,10 @@ public class LogParsingTest {
String log4 = "[02/Dec/2015:13:00:10 +0800] ws.schedule.ctripcorp.com vms09191 10.8.95.27 POST /UbtPushApi/UserActionReceiveHandler.ashx \"-\" 80 - 10.8.91.104 - HTTP/1.1 \"Java/THttpClient/HC\" \"-\" \"-\" ws.schedule.ctripcorp.com 200 24 0.007 0.007 10.8.168.238:80 200";
LineFormat lineFormat = new AccessLogLineFormat()
.setFormat(AccessLogFormat)
.registerPatternForKey("request_time", "(-|\\d+\\.\\d+)")
.registerPatternForKey("upstream_response_time", "((?:-|\\d+\\.\\d+)(?: : (?:-|\\d+\\.\\d+))?)")
.registerPatternForKey("upstream_addr", "((?:-|\\S+)(?: : (?:-|\\S+)?))")
.registerPatternForKey("upstream_status", "((?:-|\\d{3})(?: : (?:-|\\d{3})?))")
.registerPatternForKey("http_x_forwarded_for", "(-|(?:[0-9.]+(?:, [0-9.]+)*))")
.generate();
List<LineFormat> formats = new ArrayList<>();
@ -95,6 +99,35 @@ public class LogParsingTest {
}
}
@Test
public void testInternalRewriteParser() {
String log = "[02/Feb/2016:17:01:02 +0800] ws.connect.qiche.ctripcorp.com vms14669 10.8.208.22 GET /502page \"-\" 80 - 10.8.78.102 - HTTP/1.1 \"-\" \"-\" \"-\" ws.connect.qiche.ctripcorp.com 502 6003 0.015 - : 0.006 10.8.91.168:80 : 10.8.16.4:80 - : 200";
System.out.println(log);
LineFormat lineFormat = new AccessLogLineFormat().setFormat(AccessLogFormat)
.registerPatternForKey("request_time", "(-|\\d+\\.\\d+)")
.registerPatternForKey("upstream_response_time", "((?:-|\\d+\\.\\d+)(?: : (?:-|\\d+\\.\\d+))?)")
.registerPatternForKey("upstream_addr", "((?:-|\\S+)(?: : (?:-|\\S+)?))")
.registerPatternForKey("upstream_status", "((?:-|\\d{3})(?: : (?:-|\\d{3})?))")
.generate();
List<LineFormat> formats = new ArrayList<>();
formats.add(lineFormat);
final LogParser parser = new AccessLogParser(formats);
Assert.assertTrue(parser.parse(log).size() > 0);
for (KeyValue keyValue : parser.parse(log)) {
switch (keyValue.getKey()) {
case "upstream_response_time":
Assert.assertEquals("- : 0.006", keyValue.getValue());
break;
case "upstream_addr":
Assert.assertEquals("10.8.91.168:80 : 10.8.16.4:80", keyValue.getValue());
break;
case "upstream_status":
Assert.assertEquals("- : 200", keyValue.getValue());
break;
}
}
}
@Test
public void testJsonSerializer() {
String log = "[17/Nov/2015:15:10:44 +0800] ws.you.ctripcorp.com vms09191 10.8.95.27 POST /gsapi/api/xml/GetRecmdProduct \"-\" 80 - 10.8.106.66 - HTTP/1.1 \"-\" \"-\" \"-\" ws.you.ctripcorp.com 200 521 0.042 0.039 10.8.168.228:80 200";