Using Access Logs
This page describes how to convert your existing access logs into a format that Spherical Defense can ingest and learn from.
Common Log Format (Apache)
127.0.0.1 user-identifier frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326import argparse
import json
import re
parser = argparse.ArgumentParser(description="Convert Apache logs to JSON")
parser.add_argument("-s", "--source", type=str, required=True)
parser.add_argument("-t", "--target", type=str, required=True)
regex = re.compile(
'([^ ]*) ([^ ]*) ([^ ]*) \[([^]]*)\] "([^"]*)" ([^ ]*) ([^ ]*)'
)
def parse_line(line):
m = regex.match(line)
if not m:
return "{}"
host, ignore, user, date, request, status, size = m.groups()
method_items = list(map(lambda x: x.replace("\"", ""), request.split(" ")))
if len(method_items) == 2:
method_items.append("-")
_dict = {"host":host, "user":user, "timestamp":date, "method":method_items[0], "path":method_items[1], "protocol": method_items[2], "code":status, "size":size}
return json.dumps(_dict)
def translate_file(source, target):
with open(source, 'r') as _in, open(target, 'w+') as _out:
for line in _in:
_out.write(parse_line(line))
_out.write("\n")
if __name__ == '__main__':
args = parser.parse_args()
translate_file(args.source, args.target)
print("Converted {} to {}".format(args.source, args.target))
Combined Log Format (NGINX)
IIS Log Format
W3C Extended Log Format
Last updated