ElasticSearch 8 Error with Action/metadata line [1] contains an unknown parameter [_type] status:400

zysjyyx4  于 12个月前  发布在  ElasticSearch
关注(0)|答案(3)|浏览(361)

我正在尝试在K8S集群(本地)上设置EFK(ElasticSearch 8,FluentD和Kibana)堆栈
我按照这个link安装elasticsearch,并使用helm charts安装它,然后按照这个link安装fluentd

fluentd和elasticsearch pod的输出

[root@ctrl01 ~]#  kubectl get pods
NAME                                                     READY   STATUS    RESTARTS   AGE
elasticsearch-master-0                                   1/1     Running   0          136m

[root@ctrl01 ~]#  kubectl get pods -n kube-system
NAME                                                            READY   STATUS    RESTARTS   AGE
fluentd-cnb7p                                                   1/1     Running   0          107m
fluentd-dbxjk                                                   1/1     Running   0          107m

字符串
但是,elasticsearch日志中堆积了以下警告消息

2021-10-18 12:13:12 +0000 [warn]: temporarily failed to flush the buffer. next_retry=2021-10-18 12:13:42 +0000 error_class="Elasticsearch::Transport::Transport::Errors::BadRequest" error="[400] {\"error\":{\"root_cause\":[{\"type\":\"illegal_argument_exception\",\"reason\":\"Action/metadata line [1] contains an unknown parameter [_type]\"}],\"type\":\"illegal_argument_exception\",\"reason\":\"Action/metadata line [1] contains an unknown parameter [_type]\"},\"status\":400}" plugin_id="out_es"
2021-10-18 12:13:12 +0000 [warn]: suppressed same stacktrace

配置文件(定制输出)

2021-10-18 12:09:10 +0000 [info]: using configuration file: <ROOT>
  <match fluent.**>
    @type null
  </match>
  <source>
    @type tail
    @id in_tail_container_logs
    path /var/log/containers/*.log
    pos_file /var/log/fluentd-containers.log.pos
    tag kubernetes.*
    read_from_head true
    format json
    time_format %Y-%m-%dT%H:%M:%S.%NZ
  </source>
  <source>
    @type tail
    @id in_tail_minion
    path /var/log/salt/minion
    pos_file /var/log/fluentd-salt.pos
    tag salt
    format /^(?<time>[^ ]* [^ ,]*)[^\[]*\[[^\]]*\]\[(?<severity>[^ \]]*) *\] (?<message>.*)$/
    time_format %Y-%m-%d %H:%M:%S
  </source>


我不确定它指的是哪个'type'字段。我无法找到ElasticSearch 8的matchsource指令的示例进行比较
似乎type字段是支持从ES 8起,但我不确定。请让我知道错误的原因

erhoui1w

erhoui1w1#

当我尝试将elasticsearch 8.2.3与fluentBit 1.9.5一起使用时,我遇到了类似的错误。我可以看到elasticsearch正在发送日志,但无法在kibana网页中看到任何数据,因为无法创建索引,并且在fluentBit pod日志中看到了上述错误。我遵循this github issue并在输出下添加了Suppress_Type_Name On:节在我的流畅位掌舵图表价值观.yaml文件,它工作正常之后。

[OUTPUT]
          Name  es
          Match *
          Host  {{ .Values.global.backend.es.host }}
          Port  {{ .Values.global.backend.es.port }}
          Logstash_Format Off
          Retry_Limit False
          Type  _doc
          Time_Key @timestamp
          Replace_Dots On
          Suppress_Type_Name On
          Index {{ .Values.global.backend.es.index }}
      {{ .Values.extraEntries.output }}

字符串

xkftehaa

xkftehaa2#

我在同一个问题上工作了几天,我找到了一个解决方案,但只是一个变通方案,而不是最佳解决方案。

如果您将ElasticsearchSinkOptions设置为null,则不会遇到此问题。

不幸的是,你不能从appsettings.json设置它。至少我找不到方法。
在后台,Serilog.Sinks.ElasticSearch库在HTTP头中使用此属性作为_type。但是'_type'头,正如leandrojmp在评论中指出的那样,它在ElasticSearch的8.2版本中不再可用。

jdzmm42g

jdzmm42g3#

FluentD(和Fluent Bit)Elasticsearch输出插件在将日志传输到Elasticsearch时会在日志中放置一个_type字段。然而,该字段是Elasticsearch的一个特殊字段,在版本8中已从Elasticsearch中删除。
因此,如果您的Elasticsearch安装的版本为8或更高版本,则需要通过将Suppress_Type_Name配置参数设置为On(默认值为Off)来抑制FluentD(或Fluent Bit)以不在日志中放置_type字段。

[OUTPUT]
    Name  es
    Host  192.168.2.3
    Port  9200
    ...
    ... (other es output plugin parameters)
    ...
    Suppress_Type_Name On

字符串
通过使用此配置参数,FluentD(或Fluent Bit)将不会在最终日志中包含_type字段,Elasticsearch也不会抱怨。

参考:

https://docs.fluentbit.io/manual/pipeline/outputs/elasticsearch#action-metadata-contains-an-unknown-parameter-type

相关问题