GrepBoardLog

로그 파일을 아무 데나 끌어다 놓으세요

파일 여러 개, 폴더째, .gz 압축도 됩니다. Ctrl+V 로 글을 붙여 넣어도 됩니다.

브라우저 안에서 도는 로그 분석기

접근 로그, 오류 로그, HAProxy 로그를 이 페이지에 끌어다 놓거나 몇 줄 붙여 넣으십시오. 상태 코드, 오류가 몰린 곳, 상위 클라이언트와 경로, 지연 분위수, 분 단위 시간축, 그리고 「먼저 볼 것」 목록이 나옵니다.

해석과 집계는 브라우저 안에서, Rust 로 만들어 WebAssembly 로 옮긴 코어가 Web Worker 에서 합니다. 이 페이지는 어디로도 데이터를 보낼 수 없게 막혀 있고, 그 사실은 2분이면 직접 확인할 수 있습니다.

업로드 0 — 브라우저가 강제합니다

「안전한」 온라인 도구는 대부분 업로드하지 않겠다고 약속합니다. 이 페이지는 업로드를 할 수 없습니다. 다음 응답 헤더와 함께 제공되기 때문입니다.

Content-Security-Policy: default-src 'none'; connect-src 'none'; …

connect-src 'none' 은 이 페이지가 하는 fetch · XHR · WebSocket · EventSource · sendBeacon 을 어떤 호스트로든(우리 서버 포함) 브라우저가 거부하게 합니다. default-src 'none' 은 따로 허용하지 않은 것을 모두 닫고, 이미지는 페이지 자신이나 data: · blob: 에서만 받으므로 다른 호스트로 보내는 이미지 비콘도 막힙니다. log.grepboard.com 에는 통계 스크립트도 광고 스크립트도 없습니다.

개발자 도구로 확인하는 법

  1. 개발자 도구(F12)를 열고 네트워크 탭으로 갑니다. 「로그 보존」을 켭니다.
  2. 페이지를 새로 고칩니다. HTML, CSS 하나, 화면 스크립트, 분석 코어를 실은 Worker, 글꼴, 파비콘이 보이며 모두 log.grepboard.com 에서 옵니다.
  3. 문서 요청을 눌러 응답 헤더를 봅니다. content-security-policy 줄이 있습니다.
  4. 목록을 지우고 로그 파일을 놓습니다. 목록은 비어 있습니다. 분석은 요청을 만들지 않고, 페이지가 쓰는 글꼴은 로그를 열기 전에 이미 모두 받아 두었기 때문입니다.
  5. 더 확실히 하려면 제한 메뉴를 「오프라인」으로 바꾸고 다른 파일을 놓아 보십시오. 그대로 동작합니다.

지시어 전체와 CSP 가 막지 못하는 것은 개인정보 페이지에 정리했습니다.

읽을 수 있는 로그 형식

로그읽는 내용안내
nginx 접근 로그combined, 끝에 붙인 $request_time · $upstream_response_timenginx 로그
nginx 오류 로그시각, 수준, pid, 연결 번호, 메시지, client, upstreamnginx 로그
Apache 접근 로그common · combined, 끝에 %D(마이크로초) 또는 %T(초)Apache 로그
Apache 오류 로그2.4 형식: 시각, 모듈:수준, pid/tid, client, AH 코드, 메시지Apache 로그
HAProxy HTTP 로그option httplog: TR/Tw/Tc/Tr/Ta 타이머, 종료 상태, 연결 수, 큐HAProxy 로그
JSON 줄 · key=value한 줄에 객체 하나 또는 키=값 묶음 하나, 키가 곧 칸커스텀 로그

MySQL 슬로 쿼리 로그, sshd auth.log, syslog · 커널 로그, PostgreSQL 로그, AWS ALB · CloudFront 접근 로그도 보드에 나옵니다. 그 밖의 모양은 형식 탭에서 다룹니다(커스텀 로그 안내 참고).

쓰는 법

  1. 페이지 아무 곳에나 파일을 놓습니다. 여러 파일, 폴더째, .gz 압축 모두 됩니다. 휴대폰에서는 단추를 누르고, 텍스트는 Ctrl+V 로 붙여 넣습니다.
  2. 형식은 첫 줄들을 보고 맞힙니다. 틀렸으면 형식 메뉴에서 바꿉니다.
  3. 보드를 읽습니다. 시간축을 끌어 기간을 좁히고, $ grep 에 정규식을 넣거나 막대를 눌러 거릅니다. 모든 카드와 원문 줄이 같은 조건을 따릅니다.

공유할 때는 마크다운 요약, 카드별 CSV, 보드 PNG 로 내보냅니다. 내보낸 것에는 집계 숫자만 있고 원문 줄은 없습니다.

숫자마다 같은 결과를 내는 셸 명령

카드마다 서버에서 같은 숫자를 내는 한 줄 명령이 붙어 있습니다. 보드를 검산하거나 다음에 그대로 쓰면 됩니다. nginx combined 로그 기준 몇 가지입니다.

  • 상태 코드 분포

    awk '{print $9}' access.log | sort | uniq -c | sort -rn
  • 5xx 를 내는 경로

    awk '$9 ~ /^5/ {print $7}' access.log | sort | uniq -c | sort -rn | head
  • 요청을 가장 많이 보낸 곳

    cut -d' ' -f1 access.log | sort | uniq -c | sort -rn | head
  • 분당 요청 수(급증 구간 찾기)

    cut -d[ -f2 access.log | cut -d: -f1-3 | uniq -c
  • HAProxy 종료 상태, 많은 순

    awk '{print $15}' haproxy.log | sort | uniq -c | sort -rn

셸 탭에서는 이런 파이프라인을 올려 둔 로그에 대해 브라우저 안에서 실행합니다. grep · awk · sort · uniq · wc · head · tail · cut · sed · tr 을 지원합니다.

자주 묻는 질문

로그가 업로드되나요?

아닙니다. 이 페이지는 Content-Security-Policy: connect-src 'none' 으로 제공되어, 페이지가 열린 뒤에 만들 수 있는 네트워크 요청을 브라우저가 모두 막습니다. 개발자 도구 네트워크 탭에서 파일을 분석해도 데이터를 싣는 요청이 하나도 생기지 않는 것으로 확인할 수 있습니다.

얼마나 큰 파일까지 되나요?

파일을 통째로 올리지 않고 Web Worker 로 흘려 읽으며, 원문 대신 작은 열 색인만 들고 있습니다. 수백만 줄 로그도 보통 노트북에서 됩니다. 메모리가 모자라면 요약 모드로 바뀌어 근사 상위 목록과 분위수는 남고, 원문 줄과 셸 탭은 쓸 수 없게 됩니다.

어떤 로그 형식을 읽나요?

nginx 접근 · 오류 로그, Apache 접근 로그(common · combined · %D · %T)와 2.4 오류 로그, HAProxy HTTP 로그, MySQL 슬로 쿼리 로그, sshd auth.log, syslog · 커널 로그, PostgreSQL 로그, AWS ALB · CloudFront 접근 로그, JSON 줄, key=value 로그입니다. 그 밖의 줄 단위 로그는 형식 탭에서 다룹니다.

내가 정의한 형식도 되나요?

됩니다. 형식 탭이 처음 보는 줄을 칸으로 나누고, 어느 칸이 시각 · 상태 · 경로 · 지연인지 표시하게 해 줍니다. 결과는 이 브라우저에 레시피로 저장되며, JSON 파일로 내보내 동료에게 줄 수 있습니다.

오프라인에서도 되나요?

페이지가 한 번 열린 뒤에는 됩니다. 그 뒤로는 네트워크가 필요 없으므로 선을 뽑거나 개발자 도구를 오프라인으로 두어도 계속 쓸 수 있습니다. 서비스 워커는 없습니다. 오프라인 기계에서 쓰려면 온라인일 때 페이지를 열고 탭을 그대로 두십시오.

무료인가요?

무료입니다. 가입도 한도도 없고, log.grepboard.com 에는 광고와 통계도 없습니다.

설치해야 하나요?

아닙니다. JavaScript 와 WebAssembly 가 되는 최신 브라우저면 됩니다. Chrome · Edge · Firefox · Safari 모두 됩니다.

왜 셸 명령을 보여 주나요?

장애 중에는 전체 로그가 있는 서버에서 같은 숫자를 다시 봐야 할 때가 많기 때문입니다. 명령은 숫자를 어떻게 셌는지도 그대로 보여 주므로, 믿거나 반박할 근거가 됩니다.

🔒 아무것도 브라우저 밖으로 나가지 않습니다.

로그는 이 브라우저 안, 내 컴퓨터에서만 해석하고 셉니다.