브라우저 안에서 도는 로그 분석기
접근 로그, 오류 로그, 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 에는 통계 스크립트도 광고 스크립트도 없습니다.
개발자 도구로 확인하는 법
- 개발자 도구(F12)를 열고 네트워크 탭으로 갑니다. 「로그 보존」을 켭니다.
- 페이지를 새로 고칩니다. HTML, CSS 하나, 화면 스크립트, 분석 코어를 실은 Worker, 글꼴, 파비콘이 보이며 모두 log.grepboard.com 에서 옵니다.
- 문서 요청을 눌러 응답 헤더를 봅니다.
content-security-policy줄이 있습니다. - 목록을 지우고 로그 파일을 놓습니다. 목록은 비어 있습니다. 분석은 요청을 만들지 않고, 페이지가 쓰는 글꼴은 로그를 열기 전에 이미 모두 받아 두었기 때문입니다.
- 더 확실히 하려면 제한 메뉴를 「오프라인」으로 바꾸고 다른 파일을 놓아 보십시오. 그대로 동작합니다.
지시어 전체와 CSP 가 막지 못하는 것은 개인정보 페이지에 정리했습니다.
읽을 수 있는 로그 형식
| 로그 | 읽는 내용 | 안내 |
|---|---|---|
| nginx 접근 로그 | combined, 끝에 붙인 $request_time · $upstream_response_time | nginx 로그 |
| nginx 오류 로그 | 시각, 수준, pid, 연결 번호, 메시지, client, upstream | nginx 로그 |
| 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 접근 로그도 보드에 나옵니다. 그 밖의 모양은 형식 탭에서 다룹니다(커스텀 로그 안내 참고).
쓰는 법
- 페이지 아무 곳에나 파일을 놓습니다. 여러 파일, 폴더째,
.gz압축 모두 됩니다. 휴대폰에서는 단추를 누르고, 텍스트는 Ctrl+V 로 붙여 넣습니다. - 형식은 첫 줄들을 보고 맞힙니다. 틀렸으면 형식 메뉴에서 바꿉니다.
- 보드를 읽습니다. 시간축을 끌어 기간을 좁히고,
$ grep에 정규식을 넣거나 막대를 눌러 거릅니다. 모든 카드와 원문 줄이 같은 조건을 따릅니다.
공유할 때는 마크다운 요약, 카드별 CSV, 보드 PNG 로 내보냅니다. 내보낸 것에는 집계 숫자만 있고 원문 줄은 없습니다.
숫자마다 같은 결과를 내는 셸 명령
카드마다 서버에서 같은 숫자를 내는 한 줄 명령이 붙어 있습니다. 보드를 검산하거나 다음에 그대로 쓰면 됩니다. nginx combined 로그 기준 몇 가지입니다.
상태 코드 분포
awk '{print $9}' access.log | sort | uniq -c | sort -rn5xx 를 내는 경로
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 -cHAProxy 종료 상태, 많은 순
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 모두 됩니다.
왜 셸 명령을 보여 주나요?
장애 중에는 전체 로그가 있는 서버에서 같은 숫자를 다시 봐야 할 때가 많기 때문입니다. 명령은 숫자를 어떻게 셌는지도 그대로 보여 주므로, 믿거나 반박할 근거가 됩니다.