Log Parser
Apache/Nginx/syslog/JSON 로그 파싱/필터/검색 도구
Log Parser 소개
로그 파서는 원시 로그 텍스트를 받아 형식을 자동으로 감지하고, 각 줄을 구조화된 필드로 파싱하여 검색 및 필터링이 가능한 표로 표시하는 브라우저 기반 도구입니다. 지원하는 형식은 세 가지입니다. JSON 구조화 로그(각 줄이 timestamp, level, message, msg, severity, ts, @timestamp 등의 필드를 가진 JSON 객체인 경우), Apache/Nginx 컴바인드 로그 형식(IP, 타임스탬프, 요청, 상태 코드, 바이트), 그리고 ISO 8601 또는 일반적인 날짜/시간 문자열로 시작하고 로그 레벨 키워드와 메시지가 이어지는 일반 형식입니다. 어떤 패턴에도 일치하지 않는 줄도 INFO 레벨 항목으로 표시되어 데이터가 누락되지 않습니다.
DevOps 엔지니어, 백엔드 개발자, SRE(사이트 신뢰성 엔지니어)는 이 도구를 사용해 grep, awk, jq 같은 명령줄 도구를 설치하지 않고도 로그 출력을 빠르게 분류합니다. Docker 컨테이너, ECS 태스크, 서버리스 함수, 웹 서버 액세스 로그의 로그를 붙여넣으면 즉시 ERROR와 WARN 줄만 볼 수 있고, 특정 사용자 ID, IP 주소, 예외 메시지를 검색할 수 있습니다. 로컬 도구 설치가 불가능한 고객 지원 세션이나 브라우저 전용 환경에서 특히 유용합니다.
내부적으로는 React의 useMemo 훅을 사용해 키 입력마다 파서가 실행되므로 결과가 즉시 업데이트됩니다. 형식 감지는 첫 번째 비어있지 않은 줄을 확인합니다. "{"로 시작하면 각 줄에 JSON.parse를 시도하고, Apache 정규식 패턴과 일치하면 해당 파서를 사용하며, 그 외에는 일반 날짜/시간 정규식으로 폴백합니다. 감지된 로그 레벨은 파싱된 항목에서 동적으로 추출되어 필터 버튼으로 표시됩니다. 모든 파싱은 브라우저에서만 실행되며 로그 데이터는 서버로 전송되지 않습니다.
주요 기능
- JSON, Apache/Nginx 컴바인드, 일반 타임스탬프 로그 형식 자동 감지
- timestamp, time, ts, @timestamp, level, severity, loglevel, message, msg, text 등 JSON 필드 자동 파싱
- Apache/Nginx 로그에서 HTTP 상태 코드로 레벨 도출: 5xx=ERROR, 4xx=WARN, 2xx=INFO
- 실제 로그 데이터에 존재하는 레벨에서 동적으로 생성되는 레벨 필터 버튼
- 메시지와 타임스탬프 열을 동시에 검색하는 전체 텍스트 검색
- ERROR 빨강, WARN 노랑, INFO 파랑, DEBUG 회색으로 구분되는 레벨 배지 색상 코딩
- 감지된 로그 형식 이름과 필터링된/전체 줄 수를 실시간 표시
- 100% 클라이언트 사이드 처리 — 로그 데이터가 브라우저 밖으로 전송되지 않음
자주 묻는 질문
어떤 로그 형식을 지원하나요?
세 가지 형식을 지원합니다: (1) 각 줄이 유효한 JSON 객체인 JSON 구조화 로그; (2) IP 주소, 날짜/시간, 따옴표로 묶인 요청, 상태 코드, 바이트 필드가 있는 Apache/Nginx 컴바인드 로그 형식; (3) ISO 8601 또는 유사한 날짜/시간 문자열로 시작하고 ERROR, WARN, WARNING, INFO, DEBUG, TRACE 로그 레벨 키워드가 이어지는 일반 형식. 인식할 수 없는 줄은 INFO 항목으로 표시됩니다.
JSON 구조화 로그를 어떻게 파싱하나요?
JSON 로그 줄(JSON 배열이 아닌 한 줄에 하나의 JSON 객체)을 텍스트 영역에 붙여넣으세요. 파서가 자동으로 JSON 형식을 감지하고 표준 타임스탬프 필드 이름(timestamp, time, ts, @timestamp)에서 타임스탬프를, level, severity, loglevel 필드에서 로그 레벨을, message, msg, text 필드에서 메시지를 추출합니다. 파싱에 실패한 JSON은 원시 INFO 줄로 표시됩니다.
ERROR 항목만 표시하도록 필터링할 수 있나요?
네. 파서가 로그를 처리하면 데이터에서 발견된 각 로그 레벨(ALL, ERROR, WARN, INFO, DEBUG 등)에 대한 필터 버튼이 자동으로 나타납니다. 원하는 레벨 버튼을 클릭하면 해당 레벨의 항목만 표시됩니다. ALL을 클릭하면 전체 뷰로 돌아옵니다. 레벨 필터와 키워드 검색을 함께 사용할 수도 있습니다.
검색 상자는 어떻게 작동하나요?
검색 상자는 각 로그 항목의 메시지 내용과 타임스탬프 문자열 모두에서 필터링합니다. 검색은 대소문자를 구분하지 않습니다. 예를 들어 "NullPointerException"을 검색하면 해당 텍스트가 포함된 모든 항목이 표시됩니다. "2024-01-15" 같은 날짜 문자열을 검색하면 해당 날짜의 항목이 표시됩니다. 활성 레벨 필터가 있을 경우 검색 필터도 함께 적용됩니다.
Apache/Nginx 로그 줄은 어떻게 처리되나요?
Apache/Nginx 컴바인드 로그 형식의 경우, 파서는 클라이언트 IP, 요청 날짜/시간, 따옴표로 묶인 요청 문자열(메서드 + 경로 + 프로토콜), HTTP 상태 코드, 응답 크기(바이트)를 추출합니다. 로그 레벨은 상태 코드에서 도출됩니다: 500~599는 ERROR, 400~499는 WARN, 나머지는 INFO가 됩니다. 메시지 열에는 IP, 요청, 상태 코드, 바이트 수가 표시됩니다.
알려진 형식과 일치하지 않는 로그 줄은 어떻게 처리되나요?
어떤 정규식 패턴에도 일치하지 않는 줄도 빈 타임스탬프와 원시 줄을 메시지로 하는 INFO 레벨 항목으로 표시됩니다. 이를 통해 형식이 특이하거나 혼합 형식이 포함된 경우에도 로그 데이터가 누락되지 않습니다.
로그 데이터가 서버로 전송되나요?
아니요. 모든 파싱, 필터링, 검색은 JavaScript를 사용해 전적으로 웹 브라우저 내에서 이루어집니다. 붙여넣은 로그 텍스트는 기기를 떠나지 않습니다. 민감한 프로덕션 로그, 내부 애플리케이션 로그, 고객 데이터가 포함된 로그에도 안전하게 사용할 수 있습니다.
매우 큰 로그 파일에도 사용할 수 있나요?
이 도구는 텍스트 영역에 로그 텍스트를 붙여넣는 방식으로 설계되어 수백~수천 줄에 잘 작동합니다. 수만 줄 이상의 매우 큰 파일의 경우, useMemo를 통해 변경 시마다 전체 텍스트를 파싱하므로 브라우저 성능이 저하될 수 있습니다. 매우 큰 파일에는 jq, grep, awk 같은 명령줄 도구나 Splunk, Datadog, Grafana Loki 같은 전용 로그 관리 플랫폼을 사용하는 것이 좋습니다.