Logstash解析Python日志出现_jsonparsefailure错误如何解决
你出现_jsonparsefailure的核心原因是配置冲突:你在Logstash的UDP输入中指定了json codec,要求输入内容必须是标准JSON格式,但你手动配置了自定义的日志字符串格式,python-logstash发送到Logstash的内容是格式化后的纯文本,而非JSON,因此JSON解析失败。
方案1:无需写Grok,直接使用python-logstash原生能力(推荐)
这是成本最低的方案,操作如下:
- 删掉你的日志配置中自定义的
format字段,python-logstash的LogstashHandler默认会自动将日志级别、行号、方法名、自定义extra字段全部序列化为标准JSON结构发送。 - 你现有的logstash.conf的UDP输入JSON codec可以直接正常工作,所有字段包括
extra里的自定义参数都会被自动解析为Elasticsearch的独立字段,无需额外处理。
方案2:保留自定义日志格式,编写Grok规则解析
如果你必须保留当前的自定义日志格式,按以下步骤修改配置:
- 修改logstash.conf的UDP输入配置,移除JSON codec,使用默认的纯文本编码:
input { udp { port => 9010 } }
- 新增filter段,添加Grok匹配规则和extra字段解析逻辑:
filter { # 匹配你的自定义日志格式 grok { match => { "message" => "\[%{DATA:asctime}\] - %{LOGLEVEL:level} - %{DATA:logger_name} - %{DATA:function_name}:%{NUMBER:line_number:int} : %{DATA:content} %{GREEDYDATA:extra}" } remove_field => "message" } # 解析extra字段为独立KV json { source => "extra" remove_field => "extra" } }
按照你使用的python-logstash库的实现逻辑,extra字段本身会被序列化为标准JSON,上面的json filter会自动将extra里的所有键值对拆为独立字段存入Elasticsearch。
内容的提问来源于stack exchange,提问作者Eilon Reif
相关产品推荐
相关产品推荐

