수백만 줄의 로그에서 최소한의 기간을 최단 시간으로 얻습니다.
도전
시스템을 운용하고 있으면 수백만 행을 넘는 방대한 로그 중에서 몇 줄의 로그를 추출하고 싶은 경우가 있다.
그것도 할 수 있다면 시간도 걸리지 않고, 서버에 부하도 걸리지 않고 실시하고 싶다.
검증
Vagrant에서 가상 머신 CentOS 6.4를 시작하여 검증.
실현하는 어프로치는 몇개나 있지만, 이번에는 크게 2개를 조사한다.
· sed 명령으로 행 수를 지정하여 추출
・head로 한번 뽑아, 거기로부터 tail
어느 쪽이 단시간에 목적을 달성할 수 있는지 검증했다.
검증 대상의 파일은 500만행 있는 로그 파일로 해,
머리쪽(1만행~1만1000행째)
안쪽(250만 행째~250만 1000행째)
아래쪽(499만행~499만1000행)
의 3 패턴으로 검증했다.
머리쪽(1만행~1만1000행째)
추출 조건
10,000건에서 11,000건의 1000건을 빼낸다.
sed 명령으로 추출
time sed -n 10000,10999p nginx_access.log > sed-output
real 5m1.768s
user 0m0.330s
sys 0m40.347s
sed 명령으로는 약 5분 강했다.
head->tail로 추출
time head -n 10999 nginx_access.log | tail -n 1000 > headtail-output
real 0m1.097s
user 0m0.000s
sys 0m0.084s
약 1초 만에 추출이 가능했다.
차이 확인
물론 sed로 꺼내도, head->tail로 꺼내도 내용은 같다.
diff headtail-output sed-output
(何も表示されない。差分なし)
안쪽(250만 행째~250만 1000행째)
추출 조건
2,500,000건에서 2,501,000건의 1000건을 빼낸다.
sed 명령으로 추출
time sed -n 2500000,2500999p nginx_access.log > sed-output
real 4m38.208s
user 0m0.439s
sys 0m41.766s
약 4분 40초가 걸렸다.
head->tail로 추출
time head -n 2500999 nginx_access.log | tail -n 1000 > headtail-output
real 4m26.298s
user 0m0.684s
sys 0m32.164s
약 4분 반이 걸렸다.
약간 head->tail이 빠르지만, 그 차이는 10초 정도.
vagrant를 사용하여 자신의 머신에 가상 서버에서의 검증이므로, 거의 오차일지도 모른다.
차이 확인
물론 sed로 꺼내도, head->tail로 꺼내도 내용은 같다.
diff headtail-output sed-output
(何も表示されない。差分なし)
아래쪽(499만행~499만1000행)
추출 조건
4,990,000건에서 4,991,000건의 1000건을 빼낸다.
sed 명령으로 추출
time sed -n 4990000,4990999p nginx_access.log > sed-output
real 5m1.196s
user 0m0.431s
sys 0m42.043s
약 5분 강했다.
head->tail로 추출
time head -n 4990999 nginx_access.log | tail -n 1000 > headtail-output
real 10m57.515s
user 0m1.098s
sys 0m25.951s
아래쪽이라고 head->tail은 11분 걸렸다.
sed 명령으로 안정의 5분으로 취득.
반대로 tail->head이면 곧바로 취득이 가능했다.
차이 확인
물론 sed로 꺼내도, head->tail로 꺼내도 내용은 같다.
diff headtail-output sed-output
(何も表示されない。差分なし)
결론
간단하게 sed 명령으로 취득하기 쉽지만,
파일 위쪽의 정보를 얻고 싶다면 head->tail이 가장 빠릅니다.
(역으로 아래쪽의 정보를 취득하고 싶은 경우는 tail->head)
sed 커맨드에 의한 정보 취득은 빠르지는 않지만, 추출 장소(위, 중, 하)에 의한 영향은 받지 않는다.
Reference
이 문제에 관하여(수백만 줄의 로그에서 최소한의 기간을 최단 시간으로 얻습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/S-T/items/91d4fa022740dddde072
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Vagrant에서 가상 머신 CentOS 6.4를 시작하여 검증.
실현하는 어프로치는 몇개나 있지만, 이번에는 크게 2개를 조사한다.
· sed 명령으로 행 수를 지정하여 추출
・head로 한번 뽑아, 거기로부터 tail
어느 쪽이 단시간에 목적을 달성할 수 있는지 검증했다.
검증 대상의 파일은 500만행 있는 로그 파일로 해,
머리쪽(1만행~1만1000행째)
안쪽(250만 행째~250만 1000행째)
아래쪽(499만행~499만1000행)
의 3 패턴으로 검증했다.
머리쪽(1만행~1만1000행째)
추출 조건
10,000건에서 11,000건의 1000건을 빼낸다.
sed 명령으로 추출
time sed -n 10000,10999p nginx_access.log > sed-output
real 5m1.768s
user 0m0.330s
sys 0m40.347s
sed 명령으로는 약 5분 강했다.
head->tail로 추출
time head -n 10999 nginx_access.log | tail -n 1000 > headtail-output
real 0m1.097s
user 0m0.000s
sys 0m0.084s
약 1초 만에 추출이 가능했다.
차이 확인
물론 sed로 꺼내도, head->tail로 꺼내도 내용은 같다.
diff headtail-output sed-output
(何も表示されない。差分なし)
안쪽(250만 행째~250만 1000행째)
추출 조건
2,500,000건에서 2,501,000건의 1000건을 빼낸다.
sed 명령으로 추출
time sed -n 2500000,2500999p nginx_access.log > sed-output
real 4m38.208s
user 0m0.439s
sys 0m41.766s
약 4분 40초가 걸렸다.
head->tail로 추출
time head -n 2500999 nginx_access.log | tail -n 1000 > headtail-output
real 4m26.298s
user 0m0.684s
sys 0m32.164s
약 4분 반이 걸렸다.
약간 head->tail이 빠르지만, 그 차이는 10초 정도.
vagrant를 사용하여 자신의 머신에 가상 서버에서의 검증이므로, 거의 오차일지도 모른다.
차이 확인
물론 sed로 꺼내도, head->tail로 꺼내도 내용은 같다.
diff headtail-output sed-output
(何も表示されない。差分なし)
아래쪽(499만행~499만1000행)
추출 조건
4,990,000건에서 4,991,000건의 1000건을 빼낸다.
sed 명령으로 추출
time sed -n 4990000,4990999p nginx_access.log > sed-output
real 5m1.196s
user 0m0.431s
sys 0m42.043s
약 5분 강했다.
head->tail로 추출
time head -n 4990999 nginx_access.log | tail -n 1000 > headtail-output
real 10m57.515s
user 0m1.098s
sys 0m25.951s
아래쪽이라고 head->tail은 11분 걸렸다.
sed 명령으로 안정의 5분으로 취득.
반대로 tail->head이면 곧바로 취득이 가능했다.
차이 확인
물론 sed로 꺼내도, head->tail로 꺼내도 내용은 같다.
diff headtail-output sed-output
(何も表示されない。差分なし)
결론
간단하게 sed 명령으로 취득하기 쉽지만,
파일 위쪽의 정보를 얻고 싶다면 head->tail이 가장 빠릅니다.
(역으로 아래쪽의 정보를 취득하고 싶은 경우는 tail->head)
sed 커맨드에 의한 정보 취득은 빠르지는 않지만, 추출 장소(위, 중, 하)에 의한 영향은 받지 않는다.
Reference
이 문제에 관하여(수백만 줄의 로그에서 최소한의 기간을 최단 시간으로 얻습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/S-T/items/91d4fa022740dddde072
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(수백만 줄의 로그에서 최소한의 기간을 최단 시간으로 얻습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/S-T/items/91d4fa022740dddde072텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)