`jq`로 GitLab 로그 파싱
jq 명령줄 도구를 사용하여 JSON 형식의 GitLab 로그를 파싱하고 분석하는 방법을 설명합니다.
가능한 경우 Kibana 및 Splunk와 같은 로그 집계 및 검색 도구를 사용하는 것이 좋습니다. 그러나 사용할 수 없는 경우에도 jq 를 사용하여 JSON 형식의 GitLab 로그 를 빠르게 파싱할 수 있습니다. Note 특히 오류 이벤트 요약 및 기본 사용 통계를 위해 GitLab 지원 팀은 특화된 fast-stats 도구 를 제공합니다. 이 도구는 일반적으로 jq 보다 훨씬 빠르게 더 큰 로그를 처리하고 더 많은 통계 정보를 출력합니다. JQ란? # 매뉴얼 에 명시된 바와 같이 jq 는 명령줄 JSON 프로세서입니다. 다음 예시에는 GitLab 로그 파일 파싱을 위한 사용 사례가 포함되어 있습니다. 로그 파싱 # 아래 나열된 예시는 각각의 Linux 패키지 설치 경로 및 기본 파일명으로 해당 로그 파일을 참조합니다. 각 전체 경로는 GitLab 로그 섹션 에서 찾을 수 있습니다. 압축된 로그 # 로그 파일이 교체 되면 Unix 타임스탬프 형식으로 이름이 변경되고 gzip 으로 압축됩니다. 결과 파일 이름은 @40000000624492fa18da6f34.s 처럼 보입니다. 이 파일들은 최근 로그 파일들과 다르게 처리해야 합니다: 파일의 압축을 해제하려면 gunzip -S .s @40000000624492fa18da6f34.s 를 사용하여 파일명을 압축된 로그 파일의 이름으로 바꿉니다. 파일을 직접 읽거나 파이프하려면 zcat 또는 zless 를 사용합니다. 파일 내용을 검색하려면 zgrep 을 사용합니다. 일반 명령 # 색상화된 jq 출력을 less 로 파이프 # jq . -C | less -R 용어 검색 및 일치하는 모든 줄 예쁘게 출력 # grep | jq . JSON의 잘못된 줄 건너뛰기 # jq -cR 'fromjson?' file.json | jq 기본적으로 jq 는 유효한 JSON이 아닌 줄을 만나면 오류가 발생합니다. 이는 모든 잘못된 줄을 건너뛰고 나머지를 파싱합니다. JSON 로그의 시간 범위 출력 # cat log.json | (head -1; tail -1) | jq '.time' 파일이 교체되고 압축된 경우 zcat 을 사용합니다: zcat @400000006026b71d1a7af804.s | (head -1; tail -1) | jq '.time' zcat some_json.log.25.gz | (head -1; tail -1) | jq '.time' 여러 JSON 로그에서 상관 관계 ID에 대한 활동을 시간 순서로 가져오기 # grep -hR <correlationID> | jq -c -R 'fromjson?' | jq -C -s 'sort_by(.time)' | less -R gitlab-rails/production_json.log 및 gitlab-rails/api_json.log 파싱 # 5XX 상태 코드가 있는 모든 요청 찾기 # jq 'select(.status >= 500)' 가장 느린 요청 상위 10개 # jq -s 'sort_by(-.duration_s) | limit(10; .[])
