로그 분석에 대한 첫 단계 (Pandas에 로그 데이터를 성형하고 넣는 방법)
경위
현재 저는 SEO 조명 도구를 개발하는 주식회사 EXIDEA에서 인턴생으로서 앱의 로그 분석에 종사하고 있습니다. 그래서 많은 로그 데이터를 jupyternotebook에서 Pandas의 데이터 프레임에 넣어 왔습니다.
그러나 그 중에서 그 기법에 대해 간단하게 쓰여진 기사가 없다는 것을 깨달았습니다.
아무리 분석하고 싶어도 로그 데이터를 pandas에 넣지 않으면 아무것도 시작되지 않습니다.
그래서 이번에는 원시 로그 데이터를 사용하여 실제로 설명해 보겠습니다.
그럼 빨리 봅시다!!
방법 (2 단계)
· 명령으로 원하는 정보를 텍스트 파일로 결합
· pd.read_csv ()로 텍스트 파일을 데이터 프레임에 저장합니다.
이번에 사용하는 로그 데이터
샘플로 Nginx 액세스 로그를 사용합니다.
172.17.x.xxx - - [23/Jun/2020:06:25:18 +0900] "GET /xxxxx.js HTTP/1.1" 200 5032 "http://example.net/" "Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) GSA/112.0.316532311 Mobile/15E148 Safari/604.1" "203.0.113.195"
172.17.x.xx - - [23/Jun/2020:06:25:18 +0900] "GET /xxxxx.js HTTP/1.1" 304 0 "http://example.net/" "Mozilla/5.0 (iPhone; CPU iPhone OS 12_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 YJApp-IOS jp.co.yahoo.ipn.appli/4.16.14" "203.0.113.195"
172.17.x.xxx - - [23/Jun/2020:06:25:18 +0900] "GET /xxxxx.js HTTP/1.1" 304 0 "http://example.net/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36" "203.0.113.195"
1단계
명령으로 원하는 정보를 텍스트 파일로 결합
이 작업에서는 주로 sed, awk 명령을 사용합니다.
흐름으로서는
1. sed 명령을 사용하여 로그 데이터를 전처리합니다.
2.awk 명령으로 원하는 필드 추출
sed 명령 처리
test.txtWhiskyWhiskyWhisky
基本的な文法
$ sed 's/置換元/置換後/g'
ex)
$sed 's/Whisky/Beer/g' test.txt
>>>BeerBeerBeer
이제 불필요한 문자를 공백 문자로 바꾸거나 로그 데이터를 정형합니다.
이번이라면 [], ""는 Pandas에서 데이터 프레임에 넣을 때 방해가 되므로 미리 처리해 둡니다.
awk 명령 처리
test.txtapple orange grape banana
基本的な文法
$ awk '{print 欲しいフィールド}'
ex)#1列目と3列目が欲しい
$ awk '{print $1,$3}' test.txt
>>> apple grape
이번에는 IP 주소, 시간, 요청, 경로, 상태 코드, referer를 원하기 때문에
1,4,6,7,11열을 추출합니다.
실제 이번 명령
명령의 처리를 정리한 것이 다음의 코드입니다.
cat access.log | sed 's/\[//g' -e 's/\]//g' -e 's/"//g' | awk '{print $1,$4,$6,$7,$11}' > test.txt
흐름
· 먼저 cat 명령으로 access.log를 엽니다.
(각 명령을 한 번에 실행하려면 |로 연결하십시오.)
· 그런 다음 sed 명령으로 [] 및 ""를 제외합니다.
(sed 명령은 -e로 쓰면 연속적으로 바꿀 수 있습니다)
· 다음으로 awk 명령으로 원하는 필드를 추출합니다.
· 마지막은 이러한 변형을 한 access.log를 test.txt로 변환
명령 실행 결과
172.17.x.xxx 23/Jun/2020:06:25:18 GET /xxxxx.js 200 http://example.net/
172.17.x.xx 23/Jun/2020:06:25:18 GET /xxxxx.js 304 http://example.net/
172.17.x.xxx 23/Jun/2020:06:25:18 GET /xxxxx.js 304 http://example.net/
2단계
pd.read_csv()로 텍스트 파일을 데이터 프레임에 저장
지금까지의 처리로, 로그 데이터가 원하는 정보만이 들어간 텍스트 파일이 되었습니다.
여기에서 한 번에 끝납니다.
import pandas as pd
columns=["IP","Datetime","method","URI","status","referer"]
df = pd.read_csv('test.txt',delimiter=' ',names=columns) #区切り文字は空白
그 결과가 여기입니다.
그 후, 한층 더 전처리를 해 가는 것으로, 시계열 분석 등을 실시할 수 있습니다.
마지막으로
이번에 이 기사에서 소개한 방법은, 나 개인이 제일 하기 쉬웠던 방법입니다. 그래서, 만약 더 간단한 방법이 있으면, 코멘트란 쪽에서 가르쳐 주실 수 있으면 다행입니다.
Reference
이 문제에 관하여(로그 분석에 대한 첫 단계 (Pandas에 로그 데이터를 성형하고 넣는 방법)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/higuchidaisuke/items/d4b49d0513715da4a381
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
· 명령으로 원하는 정보를 텍스트 파일로 결합
· pd.read_csv ()로 텍스트 파일을 데이터 프레임에 저장합니다.
이번에 사용하는 로그 데이터
샘플로 Nginx 액세스 로그를 사용합니다.
172.17.x.xxx - - [23/Jun/2020:06:25:18 +0900] "GET /xxxxx.js HTTP/1.1" 200 5032 "http://example.net/" "Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) GSA/112.0.316532311 Mobile/15E148 Safari/604.1" "203.0.113.195"
172.17.x.xx - - [23/Jun/2020:06:25:18 +0900] "GET /xxxxx.js HTTP/1.1" 304 0 "http://example.net/" "Mozilla/5.0 (iPhone; CPU iPhone OS 12_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 YJApp-IOS jp.co.yahoo.ipn.appli/4.16.14" "203.0.113.195"
172.17.x.xxx - - [23/Jun/2020:06:25:18 +0900] "GET /xxxxx.js HTTP/1.1" 304 0 "http://example.net/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36" "203.0.113.195"
1단계
명령으로 원하는 정보를 텍스트 파일로 결합
이 작업에서는 주로 sed, awk 명령을 사용합니다.
흐름으로서는
1. sed 명령을 사용하여 로그 데이터를 전처리합니다.
2.awk 명령으로 원하는 필드 추출
sed 명령 처리
test.txtWhiskyWhiskyWhisky
基本的な文法
$ sed 's/置換元/置換後/g'
ex)
$sed 's/Whisky/Beer/g' test.txt
>>>BeerBeerBeer
이제 불필요한 문자를 공백 문자로 바꾸거나 로그 데이터를 정형합니다.
이번이라면 [], ""는 Pandas에서 데이터 프레임에 넣을 때 방해가 되므로 미리 처리해 둡니다.
awk 명령 처리
test.txtapple orange grape banana
基本的な文法
$ awk '{print 欲しいフィールド}'
ex)#1列目と3列目が欲しい
$ awk '{print $1,$3}' test.txt
>>> apple grape
이번에는 IP 주소, 시간, 요청, 경로, 상태 코드, referer를 원하기 때문에
1,4,6,7,11열을 추출합니다.
실제 이번 명령
명령의 처리를 정리한 것이 다음의 코드입니다.
cat access.log | sed 's/\[//g' -e 's/\]//g' -e 's/"//g' | awk '{print $1,$4,$6,$7,$11}' > test.txt
흐름
· 먼저 cat 명령으로 access.log를 엽니다.
(각 명령을 한 번에 실행하려면 |로 연결하십시오.)
· 그런 다음 sed 명령으로 [] 및 ""를 제외합니다.
(sed 명령은 -e로 쓰면 연속적으로 바꿀 수 있습니다)
· 다음으로 awk 명령으로 원하는 필드를 추출합니다.
· 마지막은 이러한 변형을 한 access.log를 test.txt로 변환
명령 실행 결과
172.17.x.xxx 23/Jun/2020:06:25:18 GET /xxxxx.js 200 http://example.net/
172.17.x.xx 23/Jun/2020:06:25:18 GET /xxxxx.js 304 http://example.net/
172.17.x.xxx 23/Jun/2020:06:25:18 GET /xxxxx.js 304 http://example.net/
2단계
pd.read_csv()로 텍스트 파일을 데이터 프레임에 저장
지금까지의 처리로, 로그 데이터가 원하는 정보만이 들어간 텍스트 파일이 되었습니다.
여기에서 한 번에 끝납니다.
import pandas as pd
columns=["IP","Datetime","method","URI","status","referer"]
df = pd.read_csv('test.txt',delimiter=' ',names=columns) #区切り文字は空白
그 결과가 여기입니다.
그 후, 한층 더 전처리를 해 가는 것으로, 시계열 분석 등을 실시할 수 있습니다.
마지막으로
이번에 이 기사에서 소개한 방법은, 나 개인이 제일 하기 쉬웠던 방법입니다. 그래서, 만약 더 간단한 방법이 있으면, 코멘트란 쪽에서 가르쳐 주실 수 있으면 다행입니다.
Reference
이 문제에 관하여(로그 분석에 대한 첫 단계 (Pandas에 로그 데이터를 성형하고 넣는 방법)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/higuchidaisuke/items/d4b49d0513715da4a381
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
172.17.x.xxx - - [23/Jun/2020:06:25:18 +0900] "GET /xxxxx.js HTTP/1.1" 200 5032 "http://example.net/" "Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) GSA/112.0.316532311 Mobile/15E148 Safari/604.1" "203.0.113.195"
172.17.x.xx - - [23/Jun/2020:06:25:18 +0900] "GET /xxxxx.js HTTP/1.1" 304 0 "http://example.net/" "Mozilla/5.0 (iPhone; CPU iPhone OS 12_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 YJApp-IOS jp.co.yahoo.ipn.appli/4.16.14" "203.0.113.195"
172.17.x.xxx - - [23/Jun/2020:06:25:18 +0900] "GET /xxxxx.js HTTP/1.1" 304 0 "http://example.net/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36" "203.0.113.195"
명령으로 원하는 정보를 텍스트 파일로 결합
이 작업에서는 주로 sed, awk 명령을 사용합니다.
흐름으로서는
1. sed 명령을 사용하여 로그 데이터를 전처리합니다.
2.awk 명령으로 원하는 필드 추출
sed 명령 처리
test.txt
WhiskyWhiskyWhisky
基本的な文法
$ sed 's/置換元/置換後/g'
ex)
$sed 's/Whisky/Beer/g' test.txt
>>>BeerBeerBeer
이제 불필요한 문자를 공백 문자로 바꾸거나 로그 데이터를 정형합니다.
이번이라면 [], ""는 Pandas에서 데이터 프레임에 넣을 때 방해가 되므로 미리 처리해 둡니다.
awk 명령 처리
test.txt
apple orange grape banana
基本的な文法
$ awk '{print 欲しいフィールド}'
ex)#1列目と3列目が欲しい
$ awk '{print $1,$3}' test.txt
>>> apple grape
이번에는 IP 주소, 시간, 요청, 경로, 상태 코드, referer를 원하기 때문에
1,4,6,7,11열을 추출합니다.
실제 이번 명령
명령의 처리를 정리한 것이 다음의 코드입니다.
cat access.log | sed 's/\[//g' -e 's/\]//g' -e 's/"//g' | awk '{print $1,$4,$6,$7,$11}' > test.txt
흐름
· 먼저 cat 명령으로 access.log를 엽니다.
(각 명령을 한 번에 실행하려면 |로 연결하십시오.)
· 그런 다음 sed 명령으로 [] 및 ""를 제외합니다.
(sed 명령은 -e로 쓰면 연속적으로 바꿀 수 있습니다)
· 다음으로 awk 명령으로 원하는 필드를 추출합니다.
· 마지막은 이러한 변형을 한 access.log를 test.txt로 변환
명령 실행 결과
172.17.x.xxx 23/Jun/2020:06:25:18 GET /xxxxx.js 200 http://example.net/
172.17.x.xx 23/Jun/2020:06:25:18 GET /xxxxx.js 304 http://example.net/
172.17.x.xxx 23/Jun/2020:06:25:18 GET /xxxxx.js 304 http://example.net/
2단계
pd.read_csv()로 텍스트 파일을 데이터 프레임에 저장
지금까지의 처리로, 로그 데이터가 원하는 정보만이 들어간 텍스트 파일이 되었습니다.
여기에서 한 번에 끝납니다.
import pandas as pd
columns=["IP","Datetime","method","URI","status","referer"]
df = pd.read_csv('test.txt',delimiter=' ',names=columns) #区切り文字は空白
그 결과가 여기입니다.
그 후, 한층 더 전처리를 해 가는 것으로, 시계열 분석 등을 실시할 수 있습니다.
마지막으로
이번에 이 기사에서 소개한 방법은, 나 개인이 제일 하기 쉬웠던 방법입니다. 그래서, 만약 더 간단한 방법이 있으면, 코멘트란 쪽에서 가르쳐 주실 수 있으면 다행입니다.
Reference
이 문제에 관하여(로그 분석에 대한 첫 단계 (Pandas에 로그 데이터를 성형하고 넣는 방법)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/higuchidaisuke/items/d4b49d0513715da4a381
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import pandas as pd
columns=["IP","Datetime","method","URI","status","referer"]
df = pd.read_csv('test.txt',delimiter=' ',names=columns) #区切り文字は空白
이번에 이 기사에서 소개한 방법은, 나 개인이 제일 하기 쉬웠던 방법입니다. 그래서, 만약 더 간단한 방법이 있으면, 코멘트란 쪽에서 가르쳐 주실 수 있으면 다행입니다.
Reference
이 문제에 관하여(로그 분석에 대한 첫 단계 (Pandas에 로그 데이터를 성형하고 넣는 방법)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/higuchidaisuke/items/d4b49d0513715da4a381텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)