카테고리 없음
OpenTSDB TCP Command
ㅈ현
2022. 11. 22. 16:13
OpenTSDB에 TCP로 명령을 보내는도중 발생한 문제다.
1. telnet 으로 TCP Command 전송
telnet 을 통해 TSDB 서버에 다이렉트로 TCP Command를 날렸다.
put {Metric} {timestamp} {value} {tags}
결과는 당연히 값이 잘 들어간다.
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으로 보낸 패킷에는 개행문자가 포함되어 있지 않았다.
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 쿼리 패킷을 보낼때 개행문자를 반드시 넣어라!