본문 바로가기

데이터/Apache Spark

[Apache Spark] 실습을 위한 로그 파일 생성

Apache Spark는 대규모 데이터 처리를 위한 오픈 소스 클러스터 컴퓨팅 프레임워크로, 대규모 데이터셋을 효과적으로 처리할 수 있습니다. 이를 실습하기 위해 사용할 로그 파일을 생성하는 파이썬 코드를 작성해 보도록 하겠습니다.

 

실습에 사용할 로그 파일 결과물

112.85.179.101,2023-11-28 21:33:50,PUT,/auth,403,90
68.26.205.170,2023-11-28 21:37:11,DELETE,/auth,404,8
152.244.89.140,2023-11-28 21:34:32,PATCH,/customer,200,27
162.125.162.55,2023-11-28 21:34:48,POST,/products,200,64
239.158.199.177,2023-11-28 21:37:33,POST,/items,201,100
178.246.186.149,2023-11-28 21:38:05,POST,/event,503,52
140.13.89.166,2023-11-28 21:35:17,POST,/products,200,88
231.230.67.20,2023-11-28 21:35:34,DELETE,/auth,401,40
137.81.224.217,2023-11-28 21:38:09,PUT,/items,200,8
194.172.236.63,2023-11-28 21:35:11,DELETE,/event,400,19

 

웹 애플리케이션에서 발생한 일련의 이벤트를 기록한 로그 파일을 생성합니다. 각 로그 엔트리는 특정 시간대에 발생한 HTTP 요청에 대한 정보를 포함하고 있습니다.

 

`{ip address},{timestamp},{HTTP method},{endpoint},{HTTP response code},{latency}` 형태로 구성됩니다. 예를 들어,  첫 번째 라인은 IP 주소가 112.85.179.101인 클라이언트가 2023-11-28 21:33:50에 /auth 엔드포인트에 PUT 메소드로 요청했으나 403 Forbidden 응답 코드를 받았으며, 처리에는 90ms가 걸렸다는 것을 의미합니다.

 

코드 작성

import random
from datetime import datetime, timedelta

if __name__ == "__main__":
    # 주어진 파라미터로 로그 라인을 생성합니다. IP 주소, 타임스탬프, HTTP 메소드, 엔드포인트, HTTP 응답코드, 레이턴시 값을 포함합니다.
    def generate_log(ip, timestamp, method, endpoint, response, latency):
        return f"{ip},{timestamp},{method},{endpoint},{response},{latency}\n"

    # 랜덤한 IP 주소를 생성합니다.
    def generate_random_ip():
        return ".".join(str(random.randint(1, 255)) for _ in range(4))

    # 현재 시간에서 랜덤한 초 만큼 뺀 새로운 타임스탬프를 생성합니다.
    def generate_random_timestamp():
        current_time = datetime.now()
        random_seconds = random.randint(0, 300)
        new_timestamp = current_time - timedelta(seconds=random_seconds)
        return new_timestamp.strftime("%Y-%m-%d %H:%M:%S")

    # HTTP 메소드 중 하나를 무작위로 선택합니다.
    def generate_random_method():
        methods = ["GET", "POST", "PUT", "PATCH", "DELETE"]
        return random.choice(methods)

    # 엔드포인트 중 하나를 무작위로 선택합니다.
    def generate_random_endpoint():
        endpoints = ["/users", "/items", "/products", "/auth", "/event", "/customer"]
        return random.choice(endpoints)

    # HTTP 응답코드 중 하나를 무작위로 선택합니다.
    def generate_random_response():
        responses = [200, 201, 400, 401, 403, 404, 500, 503]
        return random.choice(responses)

    # 1에서 100 사이의 랜덤한 레이턴시 값을 생성합니다.
    def generate_random_latency():
        return random.randint(1, 100)

    log_file_path = "./input_data/log_file.txt"
    num_logs = 2000

    # `log_file_path`에 지정된 경로에 로그 파일을 생성합니다.
    # `num_logs`에 지정된 횟수만큼 반복하면서 랜덤한 로그 라인을 생성하고 파일에 기록합니다.
    with open(log_file_path, "w") as log_file:
        for _ in range(num_logs):
            ip = generate_random_ip()
            timestamp = generate_random_timestamp()
            method = generate_random_method()
            endpoint = generate_random_endpoint()
            response = generate_random_response()
            latency = generate_random_latency()

            log_line = generate_log(ip, timestamp, method, endpoint, response, latency)
            log_file.write(log_line)

 

이렇게 생성된 로그 파일은 Apache Spark와 같은 데이터 처리 도구에서 활용하여 로그 데이터를 분석하거나 시뮬레이션할 때 사용될 수 있습니다.