elasticsearch 日志存储替换旧索引,elasticsearch,command-line,logstash,alias,elasticsearch,Command Line,Logstash,Alias" /> elasticsearch 日志存储替换旧索引,elasticsearch,command-line,logstash,alias,elasticsearch,Command Line,Logstash,Alias" />

elasticsearch 日志存储替换旧索引

elasticsearch 日志存储替换旧索引,elasticsearch,command-line,logstash,alias,elasticsearch,Command Line,Logstash,Alias,我正在使用logstash创建一个弹性索引。这些步骤是: 1.logstash启动 2.使用jdbc输入插件检索数据 3.数据通过elasticsearch输出插件进行索引(模板包含别名) 4.停车场 当时,我有一个索引调用myindex-1,可以用别名myindex请求它。 第二次,我得到了一个索引调用myindex-2,可以用别名myindex请求它。第一个索引现在已弃用,我需要在步骤4之前(或之后)删除它 您知道如何做到这一点吗?首先,如果您知道不推荐使用的索引名称,那么只需添加步骤5:

我正在使用logstash创建一个弹性索引。这些步骤是: 1.logstash启动 2.使用jdbc输入插件检索数据 3.数据通过elasticsearch输出插件进行索引(模板包含别名) 4.停车场

当时,我有一个索引调用myindex-1,可以用别名myindex请求它。 第二次,我得到了一个索引调用myindex-2,可以用别名myindex请求它。第一个索引现在已弃用,我需要在步骤4之前(或之后)删除它


您知道如何做到这一点吗?

首先,如果您知道不推荐使用的索引名称,那么只需添加步骤5:

curl -XDELETE 'http://localhost:9200/myindex-1'
因此,您可以使用这个附加步骤将您的logstash运行包装到脚本中-据我所知,logstash没有删除索引的选项,这根本不是它的目的

但是从您描述您的情况的方式来看,似乎您正在尝试在创建新索引期间保持数据可用,您能详细介绍一下您的用例吗

问这个问题的原因是,使用当前的过程,在索引期间,您可能会得到重复的数据(旧版本和新版本)

如果确实需要刷新数据,并假设从数据库检索的数据中有id, 您可能会考虑另一种方法:在LogSTASH中配置2个弹性搜索输出, 第一个操作设置为“删除”,目标是上一个索引中的旧条目, 第二个是您的标准创建到新索引中

根据数据的性质,可能还有其他可能性

  • 创建并填充myindex-2,不要将其命名为别名
  • 同时将别名添加到myindex-2并将其从myalias-1中删除
  • 步骤2的REST请求:

    POST /_aliases
    {
        "actions" : [
            { "remove" : { "index" : "myindex-1", "alias" : "myindex" } },
            { "add"    : { "index" : "myindex-2", "alias" : "myindex" } }
        ]
    }
    

    文档

    没错:我希望在创建新索引期间保持数据可用。您的解决方案有两个输出,但并不完全完美。通过示例:该表包含两行:1和2。因此,第一个索引包含这两行。然后删除第1行。第一个输出只删除第二行,而不是第一行(因为在数据库中不再删除)。我认为您不会找到完美的解决方案。但是关于我的建议,你仍然保留旧的索引删除。“最佳”解决方案将取决于许多因素,包括:创建新索引需要多长时间,过渡期间结果中重复项对最终用户的影响,是否有保留数据历史记录的价值(在这种情况下,我的建议非常糟糕)。。。