使用logstash输出到elasticsearch中文乱码的解决方案

使用logstash输出到elasticsearch中文乱码的解决方案

logstash版本为5.5.3,elasticsearch版本有两个,分别为2.3.0和5.5.3;其中elasticsearch-2.3.0运行在windows机器上,elasticsearch-5.5.3运行在linux机器上。logstash运行在windows机器上。本文所探讨的由logstash输出到elasticsearch所导致的中文乱码问题,其根本原因是操作系统编码不一样的问题。而出现乱码时,logstash运行在windows环境中;不管elasticsearch运行在windows还是linux中,只要logstash运行在windows中并且你没有在conf启动文件的input模块设置正确的编码的话,就会乱码。

我的logstash的启动文件是这样配置的:

input {      kafka {        bootstrap_servers => ["192.168.110.31:9092,192.168.110.31:9093,192.168.110.31:9094"]        client_id => "test"        group_id => "test"        auto_offset_reset => "latest"        consumer_threads => 5        decorate_events => true        topics => ["test","loge"]             } }filter{         //.......}        output {     elasticsearch {       //.......     }     stdout {        codec => json_lines     }}

当我刚开始发现elasticsearch里面的中文乱码时,我第一时间排查原因,首先我得弄清楚是不是kafka中数据本来就是乱码的,然后我在idea中编写了一个消费者程序将数据取出来,发现正常显示并没有乱码;紧接着测试logstash从kafka中读取出来是否乱码,我再次启动logstash,然后控制台打印的中文也正常;但去elasticsearch查询中文就乱码,我也知道是字符集问题,但是不知道在哪里设置;幸好logstash的各个模块里面有一个通用配置属性是codec,默认为plain,里面可以设置编码,刚开始我以为是在存入elasticsearch时乱码的,所以就把codec => plain{ chaset => "编码"}这句放在output里面的elasticsearch模块里,但是不管我设置成utf-8还是gbk还是iso-8859-1,最后还是乱码。所以我把问题定位在input模块,应该是要在读取kafka数据时设置正确的编码,然后按下面这么改就OK了:

input {      kafka {        bootstrap_servers => ["172.31.11.31:8071,172.31.11.31:8072,172.31.11.31:8073"]        client_id => "test"        group_id => "test"        auto_offset_reset => "latest"        consumer_threads => 5        decorate_events => true        topics => ["test","loge"]        codec => plain{ charset => "GBK" } //关键是这一句决定存入elasticsearch中文是否乱码      }}

output里面不用设置;当我这样设置以后,我再次启动logstash,发现logstash控制台中文开始乱码,我赶紧去elasticsearch里面查询,发现中文反而是正常的。所以在windows中运行logstash时,如果出现中文乱码,记得在input模块里加codec => plain{ charset => "GBK" } ,现在看来logstash控制台如果不乱码,存入elasticsearch就乱码;logstash控制台乱码,存入elasticsearch就不乱码。

注意:如果你logstash和elasticsearch都运行在linux上就不用设置,中文不会乱码。如果你logstash运行在windows上,那么不管elasticsearch在windows还是linux上,都要设置编码。我没有测试logstash在linux上,elasticsearch在windows上的情况。

推荐阅读

    电脑输出接音箱|电脑音箱接线

    电脑输出接音箱|电脑音箱接线,,电脑音箱接线把三根的视频线(黄、红、白)按颜色插入电视机的输入,黄色插DVD的视频输出,红白插DVD的左右声道,电

    计算机蓝屏故障的计算机蓝屏解决方案

    计算机蓝屏故障的计算机蓝屏解决方案,,电脑蓝屏电脑故障经常使用电脑的朋友经常遇到,因为电脑蓝屏是一个非常普遍的现象,所以很难预测,什么时

    Chrome浏览器中文名字叫酷音量浏览器

    Chrome浏览器中文名字叫酷音量浏览器,,现在我们可以看到,在2012,很多次出现在Chrome相关页面中。这就是所谓的酷浏览器。今天,谷歌发布了一个

    无法打开网络正常网页的解决方案

    无法打开网络正常网页的解决方案,,昨天我在一家电脑公司做了一个奇怪的现象,在网络的开始都是正常的,QQ是正常的,但不久之后,我发现无法打开网

    MacChrome打开HTTPS证书错误解决方案

    MacChrome打开HTTPS证书错误解决方案,,评论:在Chrome浏览器下,总是建议站点的安全证书不可信。有一个很好的解决方案,你可以试试看。 GoAge

    三常见BIOS故障排除解决方案

    三常见BIOS故障排除解决方案,,笔记本电脑如何长时间出现黑屏为什么为什么如何删除和修改旧IBM笔记本电脑BIOS设置中的密码我想你会与这些

    杜比怎么设置|杜比怎么设置中文

    杜比怎么设置|杜比怎么设置中文,,1. 杜比怎么设置中文杜比特是人类路跑项目上最伟大的运动员,划时代的体坛传奇巨星,马拉松世界纪录保持者,曾

    atom设置中文|atom怎么用

    atom设置中文|atom怎么用,,1. atom怎么用1、首先挤出适量的卸妆乳。要卸妆的时候先不用弄水,挤出一定量的卸妆乳放在手心。2、用手在脸部按