我正在尝试通过 TCP 从 python 脚本发送数据并在 logstash 中接收相同的数据。 但是没有发生数据交换。
logstash.conf
input {
tcp {
port => 5959
codec => json
}
}
filter{
}
output {
stdout {codec => rubydebug}
}
python :
import json
import socket
import sys
HOST = "127.0.0.1"
PORT = 5959
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error, msg:
sys.stderr.write("[ERROR] %s\n" % msg[1])
sys.exit(1)
try:
sock.connect((HOST, PORT))
except socket.error, msg:
sys.stderr.write("[ERROR] %s\n" % msg[1])
sys.exit(2)
msg = {'@message': 'python test message', '@tags': ['python', 'test']}
sock.sendall(json.dumps(msg))
sock.send('\n')
sock.close()
sys.exit(0)
执行这两个脚本后,我既没有收到任何错误,也没有在 logstash 中收到任何数据,所以有人可以帮助解决可能导致问题的问题。
最佳答案
我只是在 sock.sendall(json.dumps(msg))
之后添加了 sock.send('\n')
并且它起作用了。 logstash-codec-json 似乎有一个悬而未决的问题 1 :
The logstash 'json' plugin still requires a newline '\n' to terminate json logs being sent over a TCP input.2
引用:
关于python - 从 python 发送到 logstash 的 TCP 数据失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50147017/