타사 서비스의 HTTP 트래픽을 모니터링하는 방법



회사는 타사 서비스를 구입하여 jar 패키지 형태로 회사 시스템에 배포했습니다. 이 서비스는 중요한 데이터 링크에 있으며 동시성이 매우 높습니다. 서비스 http 요청은 500으로 나타나며 이는 우리가 받을 수 없는 것입니다.

소스 코드가 없더라도 공급자에게 자세한 정보를 제공하기 위해 HTTP 요청도 모니터링해야 합니다.

문제를 해결하기 위한 아이디어



내 첫 번째 생각은 모니터링에 Java 에이전트를 사용하는 것이었습니다. Java 에이전트는 Java Instrumentation API를 사용하여 JVM에서 실행 중인 애플리케이션을 가로채서 바이트코드를 수정할 수 있는 특별한 유형의 클래스입니다.

또 다른 솔루션은 네트워크 트래픽을 캡처하는 것입니다. 내 핵심 요구 사항은 상태 코드가 5xx인 요청을 모니터링하는 것이므로 트래픽 캡처가 더 적합합니다.

네트워크 트래픽 캡처



Tcpdump는 트래픽을 캡처할 수 있지만 읽기에 더 적합하려면 구문 분석이 필요합니다.

httpry는 HTTP 트래픽을 표시하고 로깅하도록 설계된 도구입니다.

좋아요!이것이 제가 찾던 도구입니다.

Centos에 httpry 설치




sudo yum install epel-release

sudo yum install httpry


상태 코드가 200이 아닌 필터 응답




sudo httpry -m post -f timestamp,source-ip,dest-ip,direction,status-code -o test.log 'tcp dst port 80 and tcp[((tcp[12:1] & 0xf0) >> 2)+8:4] != 0x20323030'


test.log의 출력은 다음과 같습니다.

2022-09-01 19:22:34     192.168.0.1  192.168.0.2 <       500
2022-09-01 19:22:34     192.168.0.1  192.168.0.2 <       500
2022-09-01 19:22:34     192.168.0.1  192.168.0.2 <       500
2022-09-01 19:22:34     192.168.0.1  192.168.0.2 <       403
2022-09-01 19:22:34     192.168.0.1  192.168.0.2 <       500
2022-09-01 19:22:34     192.168.0.1  192.168.0.2 <       403
2022-09-01 19:22:34     192.168.0.1  192.168.0.2 <       500
2022-09-01 19:22:34     192.168.0.1  192.168.0.2 <       500


Manager 대용량 데이터 출력 파일



모든 정보는 하나의 파일에 입력되며 이 파일은 매우 큽니다.

다른 도구가 필요합니다: logrotate.

파일을 날짜별로 정리하고 logrotate.conf 파일을 만듭니다.

/xxxx/xxxxx/http.log {
    notifempty
        copytruncate
        dateext
        dateformat .%Y%m%d
        olddir /xxx/backup
}


다음 명령은 프로세스를 디버깅할 수 있습니다.

logrotate -d xxx/lograte.conf


그런 다음 ctontab을 통해 시간 제한 작업을 추가하면 crontab이 구성에 따라 회전을 실행하고 http.log.20220815라는 파일을 얻게 됩니다.

추가 리소스



httpry
logrotate

좋은 웹페이지 즐겨찾기