Подготовка на регистрационни файлове на Apache за машинно обучение

Регистрационните файлове на Apache често идват в стандартен формат, известен като Combined Log Format. Той включва IP адрес на клиента, дата, метод на заявка, код на състоянието, потребителски агент и друга информация. За да използваме тези данни с алгоритми за машинно обучение, трябва да ги трансформираме в числова форма.

Ето един прост скрипт на Python, използващ библиотеките pandas и apachelog за анализиране на регистрационни файлове на Apache:

Стъпка 1: Импортирайте необходимите библиотеки

import pandas as pd
import apachelog

Стъпка 2: Дефиниране на регистрационен формат

# This is the format of the Apache combined logs
format = r'%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"'
p = apachelog.parser(format)

Стъпка 3: Анализирайте регистрационния файл

def parse_log(file):
    data = []
    for line in open(file):
        try:
            data.append(p.parse(line))
        except:
            pass
    return pd.DataFrame(data, columns=['ip', 'client', 'user', 'datetime', 'request', 'status', 'size', 'referer', 'user_agent'])

df = parse_log('access.log')

Сега можете да добавите стъпка за извличане на функции, за да преобразувате тези категориални характеристики в числови, например, като използвате еднократно кодиране или конвертирате IP адреси в числени стойности.

Подготовка на регистрационни файлове на Nginx за машинно обучение

Процесът е подобен на този, който следвахме за регистрационните файлове на Apache. Регистрационните файлове на Nginx обикновено идват в много подобен формат на комбинирания лог формат на Apache.

Стъпка 1: Импортирайте необходимите библиотеки

import pandas as pd
import pynginxlog

Стъпка 2: Дефиниране на регистрационен формат

# This is the standard Nginx log format
format = r'$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"'
p = pynginxlog.NginxParser(format)

Стъпка 3: Анализирайте регистрационния файл

def parse_log(file):
    data = []
    for line in open(file):
        try:
            data.append(p.parse(line))
        except:
            pass
    return pd.DataFrame(data, columns=['ip', 'client', 'user', 'datetime', 'request', 'status', 'size', 'referer', 'user_agent'])

df = parse_log('access.log')

Отново ще трябва да преобразувате тези категориални характеристики в числови, преди да ги подадете в модела за машинно обучение.