빅데이터 플랫폼을 개발/운영하다보면 일상적으로 겪는 상황이 있다.
관제를 위해 데이터(로그)를 보내준다는데 데이터가 안 들어오는 상황은 빈번하다.
신규 서버가 구축되고 나면 서버에서 발생하는 로그를 빅데이터 플랫폼으로 전송한다. 그리고 항상 전송 설정했으니 데이터 확인해달라고 한다.
만약 데이터가 유입이 없으면, 서로 본인 탓이 아니라고 하니 누군가는 검증해야하는데 높은 확률로 짬이 낮은 빅데이터 플랫폼 담당자가 확인하게 된다.
그 때 써 먹을 수 있는 팁이 바로 tcpdump 이다.
tcpdump는 서버에서 들어오거나 나가는 패킷(데이터 조각)을 캡쳐하여 그 내용을 읽을 수 있다.
즉, 패킷 내용이 없다는 건 내 탓이 아닌 너네 탓이고, 패킷 내용이 있는데 플랫폼에서 데이터 조회가 안되면 내 탓이다. 만약 내 탓이면 모든 경우의 수를 생각하여 원인 분석을 해야하니 골치 아파진다.
Windows에서 tcpdump와 유사한 기능을 하는 게 있겠지만, 난 모르니 Linux에서만 언급하겠다.
인터넷이 되는 환경이라면 Linux 종류에 따라 명령어가 다르겠지만
Rocky Linux, CentOS의 경우, 각각
dnf -y install tcpdump -> Rocky Linux
yum -y install tcpdump -> CentOS Linux
이렇게 설치하면 된다. 인터넷이 되는 환경인데 저 명령어가 먹히지 않는다면 확인해야할 것이 있다.
첫번째, OS 설정의 미러사이트를 변경하는 것(나중에 생각나면 업로드 함)
두번째, OS 업데이트/업그레이드
어떤 에러 메시지 인 지 구글링하면 다 해답이 나오는데, 별 다른 에러메시지가 없다면 두번째일 가능성이 높다.
인터넷이 안되는 환경
방법이 없다. 노가다 해야한다.
첫번째, tcpdump를 설치하려는 서버와 동일한 리눅스 버전의 minimal 버전으로 가상환경을 구성한다(가상환경은 꼭 인터넷이 되는 PC나 노트북에서 구성할 것).
두번째, 가상환경에서 최초로 설치된 패키지 리스트를 저장한다.(이것도 나중에 생각나면 블로그 글로 게시하겠다)
세번째, 가상환경에서 tcpdump를 위의 명령어를 통해 설치한 다음, 설치된 패키지 리스트를 저장하여 최초의 패키지 리스트와 비교한다.
네번째, 추가되거나 바뀐 패키지를 찾아 구글에서 다운받는다
다섯번째, 다운 받은 패키지를 인터넷이 안되는 그 서버에 반입하여 설치한다.
su
tcpdump -w test_251217.pcap -i team0 host 000.000.000.000 &
↑ 위의 명령어를 하나씩 끊어서 설명하면 다음과 같다.
su : root로 전환, 패킷은 root 권한을 통해서만 확인이 되는 것 같더라
tcpdump : tcpdump 명령어를 실행
-w : tcpdump로 수집한 패킷을 파일로 저장하겠다.
test_251217.pcap : 패킷이 저장될 파일의 이름을 정했다.
-i : 패킷 정보를 수집할 네트워크 인터페이스를 지정하겠다.
team0 : 내가 수집할 네트워크 인터페이스 이름 → 이건 ifconfig 명령어와 서버의 IP주소를 통해 알 수 있다.
host : 어떤 IP와의 패킷 정보를 저장할 것인 지 지정하겠다.
000.000.000.000 : 내가 확인할 IP 주소(나의 서버와 데이터를 주고 받을 서버의 IP)
& : 이 명령어를 백그라운드로 실행하면서, 나는 다른 작업을 할 것이다.
tcpdump -r test_251217.pcap
이렇게 하면 패킷 파일을 읽을 수 있다.
이건 나중에 설치하는 과정을 글로 작성하겠다.
무튼 여기까지 확인했으면 데이터가 유입되는 지 안되는 지 확인이 가능하니 원인을 찾는 과정이 훨씬 수월해졌다.
플랫폼 운영자에게 tcpdump는 퇴근을 보장해주는 선물이다.