我正在尝试在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的match
和source
指令的示例进行比较
似乎type
字段是不支持从ES 8起,但我不确定。请让我知道错误的原因
3条答案
按热度按时间erhoui1w1#
当我尝试将elasticsearch 8.2.3与fluentBit 1.9.5一起使用时,我遇到了类似的错误。我可以看到elasticsearch正在发送日志,但无法在kibana网页中看到任何数据,因为无法创建索引,并且在fluentBit pod日志中看到了上述错误。我遵循this github issue并在输出下添加了Suppress_Type_Name On:节在我的流畅位掌舵图表价值观.yaml文件,它工作正常之后。
字符串
xkftehaa2#
我在同一个问题上工作了几天,我找到了一个解决方案,但只是一个变通方案,而不是最佳解决方案。
如果您将
ElasticsearchSinkOptions
设置为null,则不会遇到此问题。不幸的是,你不能从appsettings.json设置它。至少我找不到方法。
在后台,
Serilog.Sinks.ElasticSearch
库在HTTP头中使用此属性作为_type
。但是'_type'头,正如leandrojmp在评论中指出的那样,它在ElasticSearch的8.2版本中不再可用。jdzmm42g3#
FluentD(和Fluent Bit)Elasticsearch输出插件在将日志传输到Elasticsearch时会在日志中放置一个
_type
字段。然而,该字段是Elasticsearch的一个特殊字段,在版本8中已从Elasticsearch中删除。因此,如果您的Elasticsearch安装的版本为8或更高版本,则需要通过将
Suppress_Type_Name
配置参数设置为On
(默认值为Off
)来抑制FluentD(或Fluent Bit)以不在日志中放置_type
字段。字符串
通过使用此配置参数,FluentD(或Fluent Bit)将不会在最终日志中包含
_type
字段,Elasticsearch也不会抱怨。参考:
https://docs.fluentbit.io/manual/pipeline/outputs/elasticsearch#action-metadata-contains-an-unknown-parameter-type