You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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的json codec是按行解析的,每条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端口的入站允许规则。
  • 改用stdout输出排除Elasticsearch问题
    暂时把Elasticsearch输出换成stdout,观察Logstash控制台有没有数据输出,以此排除是Elasticsearch端的配置问题:

output{ 
  stdout { codec => rubydebug } 
}

按上面的步骤一步步排查,应该能快速找到问题所在。

内容的提问来源于stack exchange,提问作者Clannadqs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:24:26