ElasticSearch 8 错误,操作/元数据行 [1] 包含未知参数 [_type] 状态:400

Sat*_*mar 8 elasticsearch kubernetes

我正在尝试在 K8S 集群(本地)上设置 EFK(ElasticSearch 8、FluentD 和 Kibana)堆栈

我按照此链接安装了elasticsearch并使用helm图表安装了它,然后按照此链接安装了fluidd

fluidd 和 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
Run Code Online (Sandbox Code Playgroud)

然而,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
Run Code Online (Sandbox Code Playgroud)

Conf文件(定制输出)

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>
Run Code Online (Sandbox Code Playgroud)

我不确定'type'它指的是哪个领域。我无法找到 ElasticSearch 8 的示例matchsource指令进行比较

似乎从 ES 8 开始type支持field ,但我不确定这一点。请让我知道错误的原因

Ama*_*ala 12

当我尝试将 elasticsearch 8.2.3 与 FluentBit 1.9.5 一起使用时,我遇到了类似的错误。我可以看到 Elastic 正在发送日志,但在 kibana 网页中看不到任何数据,因为它无法创建索引,并在 fluid-bit pod 日志中看到上述错误。我关注了这个 github 问题,并在我的 Fluent-bit Helm Chart Values.yaml 文件中的 Outputs: 部分下添加了Suppress_Type_Name On,之后工作正常。

      [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 }}
Run Code Online (Sandbox Code Playgroud)


dog*_*kan 4

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

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

不幸的是,您无法从 appsettings.json 进行设置。至少我没找到办法。

在后台,Serilog.Sinks.ElasticSearch库使用此属性,就像_type在 HTTP 标头中一样。但正如leandrojmp在评论中指出的那样, “_type”标头在ElasticSearch 8.2版本中不再可用。