使用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上的情况。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值