decodehttp
이더넷 프레임에서 HTTP 요청/응답 쌍을 디코딩하여 메서드, 호스트, 경로, 상태 코드, 전송 바이트 등을 추출합니다.
명령어 속성
| 항목 | 설명 |
|---|---|
| 명령어 유형 | 가공 쿼리 |
| 필요 권한 | 없음 |
| 라이선스 사용량 | 해당 없음 |
| 병렬 실행 | 미지원 |
| 분산 실행 | 수집 노드에서 실행 (mapper) |
문법
decodehttp
입력 필드
| 필드 | 타입 | 필수 여부 | 설명 |
|---|---|---|---|
payload | 바이너리 | 필수 | 이더넷 프레임 데이터. 바이너리 타입이 아닌 경우 입력 레코드를 그대로 출력합니다. |
출력 필드
| 필드 | 타입 | 설명 |
|---|---|---|
src_ip | IP 주소 | 클라이언트 IP 주소 |
src_port | 32비트 정수 | 클라이언트 포트 번호 |
dst_ip | IP 주소 | 서버 IP 주소 |
dst_port | 32비트 정수 | 서버 포트 번호 |
method | 문자열 | HTTP 메서드. GET, POST, HEAD, OPTIONS, PUT, DELETE, TRACE, CONNECT |
host | 문자열 | HTTP 요청의 Host 헤더 값 |
path | 문자열 | HTTP 요청 경로 |
status | 문자열 | HTTP 응답 상태 코드 (예: 200, 404, 500) |
sent | 64비트 정수 | 클라이언트가 전송한 콘텐츠 크기 (바이트) |
rcvd | 64비트 정수 | 서버가 전송한 콘텐츠 크기 (바이트) |
req_time1 | 64비트 정수 | HTTP 요청 시작 시각 (에포크 밀리초) |
req_time2 | 64비트 정수 | HTTP 요청 종료 시각 (에포크 밀리초) |
res_time1 | 64비트 정수 | HTTP 응답 시작 시각 (에포크 밀리초) |
res_time2 | 64비트 정수 | HTTP 응답 종료 시각 (에포크 밀리초) |
오류 코드
파싱 오류
해당 사항 없음
런타임 오류
해당 사항 없음
설명
decodehttp 명령어는 입력 레코드의 payload 필드에서 이더넷 프레임을 읽어 TCP 기반 HTTP 프로토콜의 요청/응답 쌍을 디코딩합니다. payload 필드가 바이너리 타입이 아닌 경우 입력 레코드를 그대로 다음 명령어로 전달합니다.
HTTP 요청과 응답이 한 쌍으로 완성되면 하나의 출력 레코드를 생성합니다. 요청에서 메서드, 호스트, 경로, 전송 바이트를 추출하고, 응답에서 상태 코드, 수신 바이트를 추출합니다. 각 요청과 응답의 시작/종료 시각을 밀리초 단위로 기록하므로 응답 시간 분석에 활용할 수 있습니다.
TCP 세션은 1초 단위로 갱신되며, 시간이 변경되면 이전 세션 상태를 초기화합니다.
사용 예
-
PCAP 파일에서 HTTP 트래픽 디코딩
pcapfile /opt/logpresso/http-capture.pcap | decodehttpPCAP 파일에서 읽은 이더넷 프레임의 HTTP 요청/응답 쌍을 디코딩합니다.
-
HTTP 메서드별 요청 수 집계
pcapfile /opt/logpresso/http-capture.pcap | decodehttp | stats count by methodHTTP 요청을 메서드별로 집계합니다.
-
응답 시간이 긴 요청 조회
pcapfile /opt/logpresso/http-capture.pcap | decodehttp | eval response_time = res_time2 - req_time1 | sort -response_time | limit 10HTTP 응답 완료까지 소요 시간이 가장 긴 상위 10건을 조회합니다.
-
특정 상태 코드 필터링
pcapfile /opt/logpresso/http-capture.pcap | decodehttp | search status == "500" | fields src_ip, host, path, statusHTTP 500 응답을 반환한 요청을 필터링합니다.
호환성
decodehttp 명령어는 소나 4.0 이전 버전부터 제공되었습니다.