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와 같은 데이터 처리 도구에서 활용하여 로그 데이터를 분석하거나 시뮬레이션할 때 사용될 수 있습니다.
'데이터 > Apache Spark' 카테고리의 다른 글
[Apache Spark] RDD란 무엇인가? (0) | 2023.11.26 |
---|---|
[Apache Spark] 로컬 환경에 설치 및 간단 예제 (2) | 2023.11.26 |
[Apache Spark] Transformation과 Action (1) | 2023.11.25 |
[Apache Spark] Apache Spark의 메커니즘 (0) | 2023.11.23 |
[Apache Spark] Apache Spark의 아키텍처 (0) | 2023.11.23 |