Logstash 6.2 - 完整的持久队列(错误的映射?)
Logstash 6.2 - full persistent queue (wrong mapping?)
我的队列快满了,我在我的日志文件中看到了这个错误:
[2018-05-16T00:01:33,334][WARN ][logstash.outputs.elasticsearch] Could not index event to Elasticsearch. {:status=>400, :action=>["index", {:_id=>nil, :_index=>"2018.05.15-el-mg_papi-prod", :_type=>"doc", :_routing=>nil}, #<LogStash::Event:0x608d85c1>], :response=>{"index"=>{"_index"=>"2018.05.15-el-mg_papi-prod", "_type"=>"doc", "_id"=>"mHvSZWMB8oeeM9BTo0V2", "status"=>400, "error"=>{"type"=>"mapper_parsing_exception", "reason"=>"failed to parse [papi_request_json.query.disableFacets]", "caused_by"=>{"type"=>"i_o_exception", "reason"=>"Current token (VALUE_TRUE) not numeric, can not use numeric value accessors\n at [Source: org.elasticsearch.common.bytes.BytesReference$MarkSupportingStreamInputWrapper@56b8442f; line: 1, column: 555]"}}}}}
[2018-05-16T00:01:37,145][INFO ][org.logstash.beats.BeatsHandler] [local: 0:0:0:0:0:0:0:1:5000, remote: 0:0:0:0:0:0:0:1:50222] Handling exception: org.logstash.beats.BeatsParser$InvalidFrameProtocolException: Invalid Frame Type, received: 69
[2018-05-16T00:01:37,147][INFO ][org.logstash.beats.BeatsHandler] [local: 0:0:0:0:0:0:0:1:5000, remote: 0:0:0:0:0:0:0:1:50222] Handling exception: org.logstash.beats.BeatsParser$InvalidFrameProtocolException: Invalid Frame Type, received: 84
...
[2018-05-16T15:28:09,981][INFO ][logstash.outputs.elasticsearch] retrying failed action with response code: 403 ({"type"=>"cluster_block_exception", "reason"=>"blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];"})
[2018-05-16T15:28:09,982][INFO ][logstash.outputs.elasticsearch] retrying failed action with response code: 403 ({"type"=>"cluster_block_exception", "reason"=>"blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];"})
[2018-05-16T15:28:09,982][INFO ][logstash.outputs.elasticsearch] retrying failed action with response code: 403 ({"type"=>"cluster_block_exception", "reason"=>"blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];"})
如果我理解第一个警告,问题出在映射上。我的队列 Logstash 文件夹中有很多文件。我的问题是:
- 如何清空我的队列,我可以只删除 logstash 队列文件夹中的所有文件吗(所有日志都会丢失)?然后将所有数据重新发送到 logstash 以正确索引?
- 如何确定映射中的确切问题所在,或者哪些服务器发送了错误类型的数据?
- 我在端口 5000 上有一个名为 testing-pipeline 的管道,只是为了检查 Logstash 是否从 nagios 处于活动状态。
[INFO ][org.logstash.beats.BeatsHandler]
日志是什么?
- 如果我没理解错,
[INFO ][logstash.outputs.elasticsearch]
只是关于重试处理 logstash 队列的日志?
所有服务器上都是 FIlebeat 6.2.2。谢谢你的帮助。
可以删除队列中的所有页面,但这不是正确的解决方案。就我而言,队列已满,因为存在具有不同索引映射的事件。在 Elasticsearch 6 中,你不能将具有不同映射的文档发送到同一个索引,因此日志会因为这个日志而堆积在队列中(即使只有一个错误事件,所有其他事件都不会被处理)。那么如何处理所有可以处理的数据并跳过错误的数据呢?解决方案是配置 DLQ (dead letter queue)。每个响应代码为 400 或 404 的事件都将移至 DLQ,以便处理其他事件。来自DLQ的数据稍后可以用pipeline处理。
错误的映射可以通过错误日志判断"error"=>{"type"=>"mapper_parsing_exception", ..... }
。要指定错误映射的确切位置,您必须比较事件和索引的映射。
[INFO ][org.logstash.beats.BeatsHandler]
是由 Nagios 服务器引起的。检查不包含有效请求,这就是处理异常的原因。检查应测试 Logstash 服务是否处于活动状态。现在,我在 localhost:9600
上查看 Logstas 服务以获取更多信息 here。
[INFO ][logstash.outputs.elasticsearch]
表示 Logstash 尝试处理队列但索引被锁定 ([FORBIDDEN/12/index read-only / allow delete (api)]
),因为索引被设置为只读状态。 Elasticsearch,当服务器上space不足时,自动将索引配置为只读。这可以通过 cluster.routing.allocation.disk.watermark.low
更改,以获取更多信息 here。
我的队列快满了,我在我的日志文件中看到了这个错误:
[2018-05-16T00:01:33,334][WARN ][logstash.outputs.elasticsearch] Could not index event to Elasticsearch. {:status=>400, :action=>["index", {:_id=>nil, :_index=>"2018.05.15-el-mg_papi-prod", :_type=>"doc", :_routing=>nil}, #<LogStash::Event:0x608d85c1>], :response=>{"index"=>{"_index"=>"2018.05.15-el-mg_papi-prod", "_type"=>"doc", "_id"=>"mHvSZWMB8oeeM9BTo0V2", "status"=>400, "error"=>{"type"=>"mapper_parsing_exception", "reason"=>"failed to parse [papi_request_json.query.disableFacets]", "caused_by"=>{"type"=>"i_o_exception", "reason"=>"Current token (VALUE_TRUE) not numeric, can not use numeric value accessors\n at [Source: org.elasticsearch.common.bytes.BytesReference$MarkSupportingStreamInputWrapper@56b8442f; line: 1, column: 555]"}}}}}
[2018-05-16T00:01:37,145][INFO ][org.logstash.beats.BeatsHandler] [local: 0:0:0:0:0:0:0:1:5000, remote: 0:0:0:0:0:0:0:1:50222] Handling exception: org.logstash.beats.BeatsParser$InvalidFrameProtocolException: Invalid Frame Type, received: 69
[2018-05-16T00:01:37,147][INFO ][org.logstash.beats.BeatsHandler] [local: 0:0:0:0:0:0:0:1:5000, remote: 0:0:0:0:0:0:0:1:50222] Handling exception: org.logstash.beats.BeatsParser$InvalidFrameProtocolException: Invalid Frame Type, received: 84
...
[2018-05-16T15:28:09,981][INFO ][logstash.outputs.elasticsearch] retrying failed action with response code: 403 ({"type"=>"cluster_block_exception", "reason"=>"blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];"})
[2018-05-16T15:28:09,982][INFO ][logstash.outputs.elasticsearch] retrying failed action with response code: 403 ({"type"=>"cluster_block_exception", "reason"=>"blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];"})
[2018-05-16T15:28:09,982][INFO ][logstash.outputs.elasticsearch] retrying failed action with response code: 403 ({"type"=>"cluster_block_exception", "reason"=>"blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];"})
如果我理解第一个警告,问题出在映射上。我的队列 Logstash 文件夹中有很多文件。我的问题是:
- 如何清空我的队列,我可以只删除 logstash 队列文件夹中的所有文件吗(所有日志都会丢失)?然后将所有数据重新发送到 logstash 以正确索引?
- 如何确定映射中的确切问题所在,或者哪些服务器发送了错误类型的数据?
- 我在端口 5000 上有一个名为 testing-pipeline 的管道,只是为了检查 Logstash 是否从 nagios 处于活动状态。
[INFO ][org.logstash.beats.BeatsHandler]
日志是什么? - 如果我没理解错,
[INFO ][logstash.outputs.elasticsearch]
只是关于重试处理 logstash 队列的日志?
所有服务器上都是 FIlebeat 6.2.2。谢谢你的帮助。
可以删除队列中的所有页面,但这不是正确的解决方案。就我而言,队列已满,因为存在具有不同索引映射的事件。在 Elasticsearch 6 中,你不能将具有不同映射的文档发送到同一个索引,因此日志会因为这个日志而堆积在队列中(即使只有一个错误事件,所有其他事件都不会被处理)。那么如何处理所有可以处理的数据并跳过错误的数据呢?解决方案是配置 DLQ (dead letter queue)。每个响应代码为 400 或 404 的事件都将移至 DLQ,以便处理其他事件。来自DLQ的数据稍后可以用pipeline处理。
错误的映射可以通过错误日志判断"error"=>
{"type"=>"mapper_parsing_exception", ..... }
。要指定错误映射的确切位置,您必须比较事件和索引的映射。[INFO ][org.logstash.beats.BeatsHandler]
是由 Nagios 服务器引起的。检查不包含有效请求,这就是处理异常的原因。检查应测试 Logstash 服务是否处于活动状态。现在,我在localhost:9600
上查看 Logstas 服务以获取更多信息 here。[INFO ][logstash.outputs.elasticsearch]
表示 Logstash 尝试处理队列但索引被锁定 ([FORBIDDEN/12/index read-only / allow delete (api)]
),因为索引被设置为只读状态。 Elasticsearch,当服务器上space不足时,自动将索引配置为只读。这可以通过cluster.routing.allocation.disk.watermark.low
更改,以获取更多信息 here。