如何删除我的整个 Elasticsearch 数据库并重新发送所有日志?

How can I delete my entire Elasticsearch db and resend all the logs?

我已经安装了 ELK + filebeat,并且我最近开始使用 SYSLOG5424LINE logstash 过滤器以不同方式过滤我的系统日志,因为系统日志优先级默认为注意。除了更正错误默认为 'notice' 的系统日志优先级字段外,这还在我的弹性搜索系统日志文档中创建了一些新索引。

现在我所有新生成的 syslog 文档都有一堆新字段,而我的旧文档在过滤器更改之前没有,而且我认为重新索引我的旧文档不会起作用,因为我需要删除具有不正确值的系统日志优先级字段并将其替换为 syslog5424_pri 字段。

所以,我已经阅读了如何从 elasticsearch 中删除所有文档,但是一旦我这样做了,我如何让 filebeat 将所有这些日志重新发送到 ES?它是否具有与 ES 现在接收的新日志相同的索引和映射?

您使用 DELETE API 删除索引和文档。如果你想摆脱你使用的整个索引

curl -XDELETE 'localhost:9200/<indexname>'

如果您只想从索引中删除特定文档类型,则需要使用按查询删除 API

curl -XPOST 'localhost:9200/<indexname>/_delete_by_query?pretty' -H 'Content-Type: application/json' -d'
{
  "query": { 
    "match": {
      "type": "doctype"
    }
  }
}
'

重新发送 Filebeat 已经发送的日志,只需清除 Filebeat 注册表即可完成。该文件夹应为 $FilebeatInstallation/registry。这样 FileBeat 会将其视为新日志。

映射和索引名称由您的 logstash 配置定义。因此,现在由 Filebeat 重新发送的数据将使用它的当前迭代。