Logstash TCP输入插件无法接收Python发送的JSON监控数据
排查Logstash TCP输入插件无法接收Python JSON数据的问题
给你几个针对性的排查方向,按顺序尝试应该能定位到问题:
- 检查TCP监听的地址范围
默认情况下Logstash的TCP输入插件只监听127.0.0.1(本地回环地址),如果你的Python程序在其他机器运行,或者用非回环地址发送数据,就会出现连接不上的情况。修改input配置,添加host => "0.0.0.0"来监听所有可用网卡:
input{ tcp{ port => 55556 host => "0.0.0.0" codec => json } }
- 确保JSON数据按行发送
Logstash的jsoncodec是按行解析的,每条JSON数据必须单独占一行,末尾要加换行符。如果你的Python发送代码没加换行,Logstash会一直等待完整的行,导致看似没有收到数据。举个Python发送的正确示例:
import json import socket client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect(("你的Logstash机器IP", 55556)) # 构造监控数据 monitor_data = {"cpu_usage": 45.2, "memory_usage": 67.8, "timestamp": "2024-05-20T12:34:56"} # 必须添加换行符\n,否则Logstash无法解析 client.sendall((json.dumps(monitor_data) + "\n").encode("utf-8")) client.close()
开启Logstash调试日志定位根源
你提到详细调试没内容,可能是日志级别没开对。启动Logstash时加上--log.level debug,或者修改Logstash的log4j2.properties配置文件把日志级别设为debug,然后重点看日志里的这两类信息:- 如果有
Accepted connection from ...的记录,说明连接成功,问题出在数据解析环节; - 如果连连接记录都没有,说明网络层面(端口占用、防火墙、地址配置)存在问题。
- 如果有
排查端口占用与防火墙限制
先确认55556端口是否被其他程序占用:- Linux/macOS:执行
netstat -tulpn | grep 55556 - Windows:执行
netstat -ano | findstr :55556
同时检查防火墙是否阻止了该端口的入站连接,比如Linux可以临时关闭防火墙测试:sudo systemctl stop firewalld,Windows则需要在防火墙规则里添加55556端口的入站允许规则。
- Linux/macOS:执行
改用stdout输出排除Elasticsearch问题
暂时把Elasticsearch输出换成stdout,观察Logstash控制台有没有数据输出,以此排除是Elasticsearch端的配置问题:
output{ stdout { codec => rubydebug } }
按上面的步骤一步步排查,应该能快速找到问题所在。
内容的提问来源于stack exchange,提问作者Clannadqs
相关产品推荐
相关产品推荐

