通过Logstash将日志从AWS Kinesis流式传输到ElasticSearch时出现编码问题

lstz6jyr  于 2022-12-09  发布在  Logstash
关注(0)|答案(1)|浏览(185)

我有一个AWS Kinesis数据流,叫做“otelpoc”。
在Logstash中,我使用的是Kinesis输入插件--请看这里。
我的Logstash配置如下:

input {
   kinesis {
      kinesis_stream_name => "otelpoc"
      region => "ap-southeast-2"
      codec => json { }
   }
}
output {
   elasticsearch {
      hosts => ["elasticsearch:9200"]
      index => "otelpoc-logstash-%{+YYYY.MM.dd}"
   }
}

我可以使用AWS CLI将事件放入Kinesis,如下所示:aws kinesis put-record --stream-name otelpoc --data file://payload.json --partition-key 1
payload.json看起来像这样:

{
  "message": "this is a test",
  "level": "error"
}

...但执行此操作时,我在Logstash中看到如下错误:Received an event that has a different character encoding than you configured. {:text=>"\\x99\\xEB,j\\a\\xAD\\x86+\\\"\\xB1\\xAB^\\xB2\\xD9^\\xBD\\xE9^\\xAE\\xBA+", :expected_charset=>"UTF-8"}
有趣的是,消息仍然会输出到Elastic,我可以在Kibana中查看它,如下所示:

不确定我应该如何处理字符编码...我在Logstash中尝试了几种方法,但都没有成功,例如,将kinesis输入中的编解码器更改为如下所示

codec => plain {
   charset => "UTF-8"
}

......但是没有运气......我试着在几个在线解码器中解码编码的文本,但不确定我想从哪里解码......有人能帮忙吗?
编辑:使用ELK堆栈的v6.7.1,这是相当旧的,但我不认为这是问题...

g6baxovj

g6baxovj1#

使用AWS CLI向Kinesis发布消息时,我从未解决此问题,但对于我的特定用例,我尝试使用开放遥测(OTEL)收集器代理的awskinesis导出器向Kinesis发送日志-请参见here
如果我使用otlp_json编码,它工作,例如.

awskinesis:
    aws:
      stream_name: otelpoc
      region: ap-southeast-2
    encoding:
      name: otlp_json

相关问题