카테고리 없음

OpenTSDB TCP Command

ㅈ현 2022. 11. 22. 16:13

OpenTSDB에 TCP로 명령을 보내는도중 발생한 문제다.

 

1. telnet 으로 TCP Command 전송

telnet 을 통해 TSDB 서버에 다이렉트로 TCP Command를 날렸다.

 

put {Metric} {timestamp} {value} {tags}

 

OpenTSDB TCP Command

결과는 당연히 값이 잘 들어간다.

 

2. Python에서 Socket 통신

python에서 같은 명령으로 값을 넣어보았다.

import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((hostname, port))
sock.send('put {Metric} {timestamp} {value} {tags}'.encode())
sock.close()

하지만 값이 들어가지 않았다.

이유를 살펴보기 위해 wireshark를 통해 패킷을 뜯어보았다.

 

 

3. wireshark 모니터링

wireshark를 통해 패킷을 직접 확인해 보았다.

telnet으로 보낸 패킷
python socket으로 보낸 패킷

패킷의 데이터를 확인해보니 telnet으로 보낸 패킷에는 개행문자가 포함되어있었고, python-socket으로 보낸 패킷에는 개행문자가 포함되어 있지 않았다.

 

4. 개행문자를 포함해서 전달.

문제를 알았으니 개행문자 ( \n 또는 \r\n ) 를 포함해서 전달해 보았다.

import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((hostname, port))
sock.send('put {Metric} {timestamp} {value} {tags}\n'.encode())
sock.close()

값이 아주 잘 들어가진다!

 

 

5. 결론

OpenTSDB로 TCP 쿼리 패킷을 보낼때 개행문자를 반드시 넣어라!