KST 한국 시간을 세계표준 UTC 및 ISO8601 형식으로 변환(Converter)
다양한 장비들의 로그를 통합하기 위하여 수집하다 보면 시간의 타임존 형태가 다양할 수 있는데 표준이 아닌 "2024-03-19 02:26:04" 형식의 시간이 수집되는 경우 KST 시간으로 인식하고, 이를 UTC 시간으로 변환하여 ISO8601 형태로 반환하는 코드를 작성했습니다. 변환된 결과는 "2024-03-18T17:26:04Z" 입니다.
from datetime import datetime, timedelta
import pytz
def convert_kst_to_utc(input_time_str):
# KST 시간대 설정
kst = pytz.timezone('Asia/Seoul')
# 입력 값 형식이 ISO8601 형식이 아니므로, 년-월-일 시:분:초 형태로 파싱
input_time = datetime.strptime(input_time_str, '%Y-%m-%d %H:%M:%S')
# 입력된 시간을 KST로 인식
kst_time = kst.localize(input_time)
# KST 시간을 UTC 시간으로 변경
utc_time = kst_time.astimezone(pytz.utc)
# ISO8601 형태로 출력
return utc_time.strftime('%Y-%m-%dT%H:%M:%SZ')
# 예제 입력
input_time_str = "2024-03-19 02:26:04"
converted_time = convert_kst_to_utc(input_time_str)
converted_time
이 과정에서 다음 단계를 거쳤어요.
- 입력된 시간을 '년-월-일 시:분:초' 형태로 파싱합니다.
- 파싱된 시간을 KST(한국 표준시)로 설정합니다.
- KST로 설정된 시간을 UTC(협정 세계시)로 변환합니다.
- 변환된 UTC 시간을 ISO8601 형태('YYYY-MM-DDTHH:MM:SSZ')로 포맷하여 반환합니다.
이 코드는 ISO8601 형식이 아닌 입력값에 대해 KST 시간으로 인식하고, 해당 시간을 UTC 시간으로 변경하여 ISO8601 형태로 반환합니다.
리눅스 서버의 syslog
에 기록되는 로그는 일반적으로 로컬 시간대(여기서는 KST, 한국 표준시간)를 기준으로 타임스탬프가 찍힙니다. 이 로그의 타임스탬프를 UTC 시간대로 변환하여 ISO8601 형식으로 출력하는 코드를 작성하고 설명하겠습니다.
먼저, 로그 파일을 읽고 각 줄의 타임스탬프를 파싱한 후 UTC 시간으로 변환하는 과정을 코드로 구현해보겠습니다. syslog
의 타임스탬프 형식은 일반적으로 "월 일 시:분:초" (예: Mar 19 15:25:05) 형태입니다. 이 형식은 년도 정보가 없기 때문에, 현재 년도를 자동으로 추가하는 로직이 필요합니다.
코드 구현
import re
from datetime import datetime
import pytz
def syslog_time_to_utc_iso8601(log_line):
# 현재 년도를 얻습니다. syslog에는 년도가 없기 때문에 추가해야 합니다.
current_year = datetime.now().year
# 로그에서 시간 문자열을 파싱하기 위한 정규 표현식
# 예: Mar 19 15:25:05 형태의 타임스탬프를 찾습니다.
time_pattern = re.compile(r'(\w{3})\s+(\d{1,2})\s+(\d{2}):(\d{2}):(\d{2})')
match = time_pattern.search(log_line)
if match:
# 정규 표현식으로부터 월, 일, 시간 정보를 추출합니다.
month, day, hour, minute, second = match.groups()
# 추출한 시간 정보와 현재 년도를 결합하여 datetime 객체를 생성합니다.
# 'Mar'과 같은 월 문자열을 숫자 월로 변환하기 위해 strptime을 사용합니다.
log_time = datetime.strptime(f'{current_year} {month} {day} {hour}:{minute}:{second}',
'%Y %b %d %H:%M:%S')
# KST 시간대 설정
kst = pytz.timezone('Asia/Seoul')
# 로그 시간을 KST로 설정
kst_log_time = kst.localize(log_time)
# KST 시간을 UTC로 변환
utc_log_time = kst_log_time.astimezone(pytz.utc)
# ISO8601 형태로 변환하여 반환
return utc_log_time.strftime('%Y-%m-%dT%H:%M:%SZ')
else:
# 타임스탬프를 찾을 수 없는 경우, 로그 라인을 그대로 반환합니다.
return "No timestamp found in log line"
# 예제 로그 라인
log_line = "Mar 19 15:25:05 my-server process[1234]: An example log message"
converted_time = syslog_time_to_utc_iso8601(log_line)
print(converted_time)
코드 설명
- 정규 표현식 파싱: 로그 라인에서 "월 일 시:분:초" 형태의 타임스탬프를 찾기 위해 정규 표현식을 사용합니다.
- 년도 추가:
syslog
타임스탬프에는 년도가 없으므로 현재 년도를 자동으로 추가합니다. - 시간대 변환: 추출한 타임스탬프를 KST (한국 표준시)로 설정한 후, 이를 UTC (협정 세계시)로 변환합니다.
- ISO8601 형식 출력: UTC로 변환된 시간을 ISO8601 형식('YYYY-MM-DDTHH:MM:SSZ')으로 포맷하여 반환합니다.
이 코드는 리눅스 서버의 syslog
에서 타임스탬프를 UTC로 변환하여 ISO8601 형식으로 출력하는 과정을 담당합니다. 주요 단계를 간략하게 정리하면 다음과 같습니다.
- 정규 표현식을 이용한 파싱: 로그의 타임스탬프 부분을 정규 표현식을 통해 찾고, 해당 부분에서 월, 일, 시간 정보를 추출합니다.
- 년도 추가 및 datetime 객체 생성:
syslog
의 타임스탬프에는 년도 정보가 빠져있으므로, 현재 시스템의 년도를 추가하여 완전한 날짜 정보를 만듭니다. 그 후, 이 정보로부터 datetime 객체를 생성합니다. - 시간대 변환: 생성된 datetime 객체를 먼저 한국 표준시간(KST)으로 설정한 후, 이를 UTC 시간대로 변환합니다. 이 과정은 pytz 라이브러리를 사용하여 수행됩니다.
- ISO8601 형식으로 포맷팅: 최종적으로 UTC 시간대로 변환된 시간을 ISO8601 형식으로 포맷팅하여 출력합니다.
이 과정을 통해 리눅스 서버의 syslog
로그 파일에 기록된 로컬 시간대의 타임스탬프를 정확하게 UTC 시간대로 변환하고, 이를 표준화된 형식으로 다룰 수 있게 됩니다. 이러한 변환은 로그 데이터를 다른 시스템이나 시간대에 걸쳐 있는 서버들 간에 비교하거나 통합할 때 유용하게 사용될 수 있습니다.
위 코드 예제는 단일 로그 라인에 대해 작동하는 예시를 보여줍니다. 실제 환경에서는 이 코드를 함수로 만들고, syslog
파일 전체를 순회하며 각 라인의 타임스탬프를 변환하는 방식으로 확장할 수 있습니다. 이렇게 하면 대량의 로그 데이터에 대해서도 효율적으로 시간대를 변환하고 관리할 수 있게 됩니다.
네트워크를 통해 syslog 메시지를 수집하고, 이를 처리하여 UTC 시간으로 변환하는 서버를 Python으로 구현하려면, 소켓 프로그래밍을 사용할 수 있습니다. 다음은 TCP 포트를 리슨하여 유입되는 로그 메시지를 변환하고 출력하는 간단한 예제 코드입니다.
- 이 코드는 실제 운영 환경에서 사용하기 전에 보안 및 성능 측면을 고려하여 추가적인 수정이 필요할 수 있습니다.
- 아래 예제는 기본적인 소켓 서버 구현으로, 복잡한 네트워크 환경이나 대량의 로그 처리를 고려하지 않았습니다.
- 포트 번호는 예제로
5140
을 사용합니다. 실제 설정 시에는 사용 가능한 포트 번호를 선택해야 합니다.
코드 구현
import socket
import re
from datetime import datetime
import pytz
def syslog_time_to_utc_iso8601(log_line):
current_year = datetime.now().year
time_pattern = re.compile(r'(\w{3})\s+(\d{1,2})\s+(\d{2}):(\d{2}):(\d{2})')
match = time_pattern.search(log_line)
if match:
month, day, hour, minute, second = match.groups()
log_time = datetime.strptime(f'{current_year} {month} {day} {hour}:{minute}:{second}',
'%Y %b %d %H:%M:%S')
kst = pytz.timezone('Asia/Seoul')
kst_log_time = kst.localize(log_time)
utc_log_time = kst_log_time.astimezone(pytz.utc)
return utc_log_time.strftime('%Y-%m-%dT%H:%M:%SZ')
else:
return "No timestamp found in log line"
def start_syslog_server(port=5140):
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as server_socket:
server_socket.bind(('', port))
server_socket.listen(5)
print(f"Listening on port {port} for syslog messages...")
while True:
client_socket, addr = server_socket.accept()
with client_socket:
print(f"Connected by {addr}")
while True:
log_data = client_socket.recv(1024)
if not log_data:
break
log_line = log_data.decode('utf-8')
converted_time = syslog_time_to_utc_iso8601(log_line)
print(f"Received log: {log_line.strip()}")
print(f"Converted UTC Time: {converted_time}")
# 서버 시작 (예: 5140 포트 리슨)
start_syslog_server(5140)
코드 설명
- 서버 설정:
socket
라이브러리를 사용하여 TCP 서버를 설정하고, 지정된 포트에서 클라이언트의 연결을 기다립니다. - 클라이언트 연결 처리: 클라이언트로부터 연결이 수립되면, 소켓을 통해 데이터(로그 메시지)를 수신합니다.
- 로그 처리: 수신된 로그 메시지의 타임스탬프를 KST에서 UTC로 변환하고, ISO8601 형식으로 출력합니다.
- 무한 루프: 서버는 연결을 계속해서 수락하고 로그 메시지를 처리하기 위해 무한 루프를 실행합니다.
이 서버는 TCP 연결을 통해 수신된 로그 메시지를 처리하므로, 클라이언트 측에서는 이 서버의 IP 주소와 포트 5140
을 사용하여 로그를 전송해야 합니다.
syslog 메시지를 받아서 시간을 UTC로 변환한 후, 이를 다른 syslog 서버로 전송하는 과정을 구현하기 위해, 우선 수신한 로그의 시간을 변경하는 기능과 함께 로그를 원격 syslog 서버로 전송하는 기능이 필요합니다. 이 과정을 구현하기 위해 Python에서는 socket
라이브러리를 사용할 수 있으며, 로그 전송을 위해 syslog 프로토콜을 따르는 간단한 UDP 클라이언트를 구현할 수 있습니다.
코드 개요
- TCP 소켓을 통해 로컬에서 syslog 메시지를 수신합니다.
- 수신된 로그 메시지에서 시간을 UTC로 변환합니다.
- 변환된 로그 메시지를 UDP 소켓을 통해 다른 syslog 서버로 전송합니다.
코드 구현
import socket
import re
from datetime import datetime
import pytz
def syslog_time_to_utc_iso8601(log_line):
current_year = datetime.now().year
time_pattern = re.compile(r'(\w{3})\s+(\d{1,2})\s+(\d{2}):(\d{2}):(\d{2})')
match = time_pattern.search(log_line)
if match:
month, day, hour, minute, second = match.groups()
log_time = datetime.strptime(f'{current_year} {month} {day} {hour}:{minute}:{second}',
'%Y %b %d %H:%M:%S')
kst = pytz.timezone('Asia/Seoul')
kst_log_time = kst.localize(log_time)
utc_log_time = kst_log_time.astimezone(pytz.utc)
return log_line.replace(match.group(0), utc_log_time.strftime('%b %d %H:%M:%S')), utc_log_time.strftime('%Y-%m-%dT%H:%M:%SZ')
else:
return log_line, "No timestamp found in log line"
def forward_log_to_syslog_server(log_message, remote_server_ip, remote_server_port):
with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as udp_socket:
udp_socket.sendto(log_message.encode('utf-8'), (remote_server_ip, remote_server_port))
def start_syslog_server(port=5140, remote_server_ip='127.0.0.1', remote_server_port=514):
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as server_socket:
server_socket.bind(('', port))
server_socket.listen(5)
print(f"Listening on port {port} for syslog messages...")
while True:
client_socket, addr = server_socket.accept()
with client_socket:
print(f"Connected by {addr}")
while True:
log_data = client_socket.recv(1024)
if not log_data:
break
log_line = log_data.decode('utf-8')
modified_log_line, converted_time = syslog_time_to_utc_iso8601(log_line)
print(f"Received log: {log_line.strip()}")
print(f"Converted UTC Time: {converted_time}")
forward_log_to_syslog_server(modified_log_line, remote_server_ip, remote_server_port)
# 서버 시작
# 예를 들어, 로컬에서 5140 포트를 리슨하고, 변환된 로그를 127.0.0.1:514 (다른 syslog 서버)로 전송
start_syslog_server(5140, '127.0.0.1', 514)
코드 설명
- syslog_time_to_utc_iso8601 함수: 로그 라인에서 시간을 찾아 KST에서 UTC로 변환하고, 로그 내의 시간 표시를 수정한 로그 라인을 반환합니다.
- forward_log_to_syslog_server 함수: 수정된 로그 메시지를 UDP를 통해 원격 syslog 서버로 전송합니다.
- start_syslog_server 함수: 지정된 포트에서 TCP 연결을 통해 로그를 수신하고, 각 로그의 시간을 UTC로 변환한 뒤, 설정된 원격 syslog 서버로 로그를 전송합니다.
이 예제에서는 로컬에서 TCP 연결을 통해 수신된 로그 메시지를 처리하고, UDP를 통해 다른 syslog 서버로 전송합니다. 이 과정은 실시간으로 로그 메시지를 중계하고 시간대를 변환하는 데 사용할 수 있습니다.
- 로컬 syslog 서버 설정: 로컬에서 TCP 연결을 통해 로그 메시지를 수신하기 위해
start_syslog_server
함수를 사용합니다. 이 함수는 지정된 포트(예: 5140)에서 리슨하고, 연결된 클라이언트로부터 로그 데이터를 받습니다. - 로그 데이터 처리: 수신된 로그 데이터는
syslog_time_to_utc_iso8601
함수를 통해 처리됩니다. 이 함수는 로그 내의 타임스탬프를 찾아 KST 시간대에서 UTC 시간대로 변환하고, 변환된 시간을 기반으로 로그 라인을 수정합니다. - 원격 syslog 서버로 로그 전송: 수정된 로그 라인은
forward_log_to_syslog_server
함수를 통해 원격 syslog 서버로 전송됩니다. 이 함수는 UDP 소켓을 사용하여 로그 메시지를 원격 서버의 지정된 포트로 전송합니다.
사용 예제
이 코드를 실행하기 전에, 로컬 시스템에서 TCP 포트 5140에서 리슨할 준비를 하고, 로그를 전송할 원격 syslog 서버의 IP 주소와 포트 번호를 올바르게 설정해야 합니다. 예를 들어, 원격 syslog 서버의 IP 주소가 192.168.1.100
이고 포트 번호가 514
라면, start_syslog_server(5140, '192.168.1.100', 514)
을 호출하여 로그 전송을 시작할 수 있습니다.
실제 환경 적용 시 고려 사항
- 보안: 실제 환경에서는 로그 데이터의 보안과 무결성을 보장하기 위한 추가적인 메커니즘을 고려해야 합니다. 예를 들어, SSL/TLS를 통한 암호화 연결이 필요할 수 있습니다.
- 성능과 안정성: 대량의 로그 데이터를 처리하고 전송할 경우, 코드의 성능과 안정성을 향상시키기 위한 최적화가 필요합니다. 멀티스레딩 또는 비동기 입출력을 고려할 수 있습니다.
- 오류 처리: 네트워크 오류나 원격 서버의 다운타임과 같은 예외 상황에 대한 처리 로직을 추가하는 것이 좋습니다.
이 코드는 기본적인 syslog 메시지의 중계와 시간대 변환 기능을 제공합니다. 실제 운영 환경에 적용하기 전에, 상세한 요구 사항과 환경에 맞게 조정하고 테스트하는 것이 중요합니다.
NXLog는 다양한 플랫폼과 애플리케이션에서 로그 데이터를 수집하고 처리하여, 보안 정보 및 이벤트 관리(SIEM) 시스템이나 다른 로그 분석 도구로 전송할 수 있는 유연하고 강력한 로그 관리 도구입니다. NXLog를 활용하여 로그 데이터를 SIEM 시스템으로 전송하는 과정은 다음과 같은 기본 단계로 구성됩니다.
1. NXLog 설치 및 설정
- NXLog 설치: 우선, 사용 중인 운영 체제에 맞는 NXLog 패키지를 NXLog 공식 웹사이트에서 다운로드하여 설치합니다. Windows, Linux, macOS 등 다양한 플랫폼을 지원합니다.
- NXLog 설정 파일 수정: 설치 후, NXLog의 주요 설정은
nxlog.conf
파일을 통해 이루어집니다. 이 파일은 일반적으로/etc/nxlog/nxlog.conf
에 위치하거나 Windows의 경우C:\Program Files\nxlog\conf\nxlog.conf
에 위치합니다. 이 파일을 편집하여 입력(Input), 처리(Process), 출력(Output) 모듈을 설정합니다.
2. 로그 소스 설정
NXLog는 파일 로그, 시스템 이벤트 로그, 네트워크 소스 등 다양한 로그 소스로부터 데이터를 수집할 수 있습니다. 이를 위해 nxlog.conf
파일 내에서 Input
섹션을 구성합니다.
Windows 시스템 이벤트 로그를 수집하는 경우
<Input eventlog>
Module im_msvistalog
# 필요한 경우 추가 설정
</Input>
Linux에서 syslog 메시지를 수집하는 경우
<Input in_syslog>
Module im_syslog
Listen 514
</Input>
3. 로그 처리 및 변환
NXLog는 수집된 로그 데이터에 대해 다양한 처리와 변환을 수행할 수 있습니다. 이는 nxlog.conf
의 Route
및 Process
섹션을 통해 구성됩니다. 필터링, 포맷 변경, 필드 추가/삭제 등 다양한 작업을 설정할 수 있습니다.
<Processor modify_event>
Module pm_transformer
# 로그 변환 규칙 설정
</Processor>
4. 로그 전송
수집 및 처리된 로그를 SIEM 시스템으로 전송하기 위해 Output
섹션을 구성합니다. 다양한 프로토콜을 지원하므로, SIEM 시스템이 요구하는 포맷과 프로토콜에 맞게 설정합니다.
TCP를 통해 로그를 전송하는 경우
<Output out_siem>
Module om_tcp
Host siem.example.com
Port 514
# 필요한 경우 추가 설정
</Output>
5. NXLog 재시작 및 로그 모니터링
설정 변경 후, NXLog 서비스를 재시작하여 새 설정을 적용합니다. Linux에서는 sudo systemctl restart nxlog
를, Windows에서는 서비스 관리자를 통해 재시작할 수 있습니다. 이후, NXLog 로그 파일을 모니터링하여 로그 수집 및 전송이 정상적으로 이루어지는지 확인합니다.
이러한 과정을 통해 NXLog를 활용하여 다양한 소스로부터 로그를 수집, 처리, 변환하여 SIEM 시스템으로 효율적으로 전송할 수 있습니다. NXLog의 유연성과 확장성 덕분에 보안 분석가와 시스템 관리자는 보다 정교한 로그 관리 및 분석 전략을 수립할 수 있습니다. 각각의 단계별로 추가적인 설정 옵션과 고급 기능을 활용할 수 있으며, 이를 통해 조직의 특정 요구사항에 맞춘 로그 관리 솔루션을 구축할 수 있습니다.
고급 설정 및 활용 팁
- 데이터 보강: NXLog를 사용하여 로그 데이터에 추가 정보를 보강할 수 있습니다. 예를 들어, IP 주소로부터 지리적 위치 정보를 추출하거나, 사용자 ID를 통해 사용자 이름을 조회하여 로그 데이터에 추가할 수 있습니다.
- 조건부 처리: 특정 조건에 따라 로그 데이터를 다르게 처리하거나 분류할 수 있습니다. 예를 들어, 오류 로그와 정보 로그를 다른 SIEM 시스템으로 분리하여 전송하거나, 특정 키워드가 포함된 로그만을 필터링하여 분석에 사용할 수 있습니다.
- 성능 최적화: 대량의 로그 데이터를 처리할 경우, NXLog의 성능 최적화 설정을 통해 처리량을 개선할 수 있습니다. 멀티스레딩, 버퍼링, 비동기 입출력 등의 옵션을 적절히 조정하여 로그 처리 성능을 최적화할 수 있습니다.
- 암호화된 전송: 로그 데이터의 보안을 강화하기 위해, NXLog는 SSL/TLS를 통한 암호화된 로그 데이터 전송을 지원합니다. 이를 통해 네트워크를 통한 로그 전송 과정에서 데이터의 기밀성과 무결성을 보장할 수 있습니다.
- 유연한 로그 포맷 지원: NXLog는 다양한 로그 포맷을 지원하며, 사용자 정의 포맷으로 로그를 변환하여 전송할 수 있습니다. 이를 통해 SIEM 시스템이나 로그 분석 도구의 요구사항에 맞게 로그 데이터를 조정할 수 있습니다.
NXLog는 강력하고 유연한 로그 관리 도구로서, 복잡한 로그 수집 및 처리 요구사항을 충족시킬 수 있습니다. 적절한 설정과 활용을 통해, 로그 데이터의 가치를 극대화하고, 조직의 보안 및 운영 효율성을 개선할 수 있습니다. 로그 관리 전략의 일환으로 NXLog를 도입한다면, 보다 체계적이고 효과적인 로그 분석 및 모니터링 환경을 구축할 수 있을 것입니다.
Logstash를 사용하여 로그 데이터를 수집하고 처리할 때, 유입되는 시간값을 KST(한국 표준시)로 판단하고 이를 UTC(협정 세계시)로 변환하여 표준 시간으로 처리하는 것은 일반적인 요구 사항 중 하나입니다. Logstash의 필터 플러그인을 사용하여 이를 수행할 수 있습니다.
방법 설명
- date 필터 사용: Logstash의
date
필터 플러그인을 사용하여 로그 데이터 내의 시간 스탬프를 파싱하고, 원하는 시간대로 변환할 수 있습니다.date
필터는 로그의 시간 스탬프를 파싱하여 Logstash의@timestamp
필드로 저장합니다. - timezone 설정:
date
필터에서timezone
옵션을 사용하여 원본 로그 데이터의 시간대를 지정할 수 있습니다. KST를 사용하는 경우,timezone
옵션을"Asia/Seoul"
로 설정합니다. - UTC로 변환: Logstash는 내부적으로
@timestamp
필드를 UTC로 저장합니다. 따라서, 원본 로그의 시간대를 올바르게 설정하면 Logstash가 자동으로 UTC 시간으로 변환하여 처리합니다.
코드 예제
다음은 로그 데이터에서 시간 스탬프를 KST로 파싱하고 UTC로 변환하여 @timestamp
필드에 저장하는 Logstash 설정 파일의 일부입니다.
filter {
date {
match => [ "log_timestamp", "ISO8601" ] # log_timestamp 필드에 대응하는 실제 로그의 날짜 형식을 지정하세요.
timezone => "Asia/Seoul" # 원본 로그 데이터의 시간대를 KST로 지정
target => "@timestamp" # 파싱된 날짜/시간 값을 저장할 대상 필드
}
}
코드 설명
- match 옵션: 이 옵션은 로그에서 시간 스탬프를 파싱하기 위한 패턴을 정의합니다.
"log_timestamp"
는 로그 데이터 내의 시간 스탬프가 포함된 필드 이름이고,"ISO8601"
은 해당 필드의 날짜 형식입니다. 실제 로그 형식에 따라"MMM d HH:mm:ss"
,"yyyy-MM-dd HH:mm:ss"
등 다양한 형식을 지정할 수 있습니다. - timezone 옵션: 원본 로그의 시간대를 지정합니다.
"Asia/Seoul"
은 KST를 의미합니다. 이 설정으로 Logstash는 로그 데이터의 시간 스탬프가 KST임을 인식하고, 내부적으로 UTC로 변환합니다. - target 옵션: 파싱된 시간 값을 저장할 필드를 지정합니다. 기본적으로
@timestamp
필드에 저장되며, 이 필드는 Logstash 및 Elasticsearch에서 시간 기반 쿼리와 연산에 중요하게 사용됩니다.
이 방법을 통해, Logstash를 사용하여 로그 데이터를 수집할 때 유입되는 시간값을 KST로 인식하고 자동으로 UTC로 변환하여 표준 시간으로 처리할 수 있습니다. 이는 로그 데이터의 시간 관련 정보를 일관되게 관리하고 분석하는 데 도움이 됩니다.