【问题标题】:Document ID not set in ElasticSearch, even though it is configured inside logstash.conf文档 ID 未在 ElasticSearch 中设置,即使它是在 logstash.conf 中配置的
【发布时间】:2019-08-30 17:01:51
【问题描述】:

Here 是我的logstash.conf 里面的内容。

(很抱歉没有直接在这里粘贴内容。StackOverflow 不允许代码文本比例过高的问题。)

作为测试,我运行了 PowerShell 命令

C:\Users\Me\Downloads\curl-7.64.1-win64-mingw\bin> .\curl.exe -XPUT 'http://127.0.0.1:31311/twitter_new/7'

我在我的 Logstash 终端上看到以下输出:

{
                "message" => "",
               "@version" => "1",
                   "host" => "127.0.0.1",
             "@timestamp" => 2019-04-09T11:35:22.458Z,
    "request_path_length" => 3,
                "headers" => {
              "http_host" => "127.0.0.1:31311",
         "content_length" => "0",
           "request_path" => [
            [0] "",
            [1] "twitter_new",
            [2] "7"
        ],
            "http_accept" => "*/*",
           "http_version" => "HTTP/1.1",
        "http_user_agent" => "curl/7.64.1",
         "request_method" => "PUT"
    },
               "index_id" => "twitter_new"
}

如您所见,document_id 未设置为 7,尽管这是我所期望的。

我该如何解决这个问题?

更新:

我变了

if [request_path_length == 3] {

if [request_path_length] == 3 {

我向/twitter_new/8 提出了另一个PUT 请求。然后我发出了GET 请求以检索所有条目,这是与我发出的最新PUT 请求对应的条目:

{
    "_index": "twitter_new",
    "_type": "doc",
    "_id": "O5AIAmoBCWsefMj-o7Fw",
    "_score": 1,
    "_source": {
        "message": "",
        "document_id": "8",
        "@version": "1",
        "@timestamp": "2019-04-09T12:18:00.665Z",
        "index_id": "twitter_new",
        "request_path_length": 3,
        "headers": {
            "request_path": [
                "",
                "twitter_new",
                "8"
            ],
            "http_accept": "*/*",
            "http_version": "HTTP/1.1",
            "content_length": "0",
            "request_method": "PUT",
            "http_user_agent": "curl/7.64.1",
            "http_host": "127.0.0.1:31311"
        },
        "host": "127.0.0.1"
    }
}

如您所见,在source 内部,document_id 确实设置为8,但_id 仍然是一个随机生成的字符串。我希望_id 也是8,就像_indextwitter_new 一样。

我是不是误会了什么?

【问题讨论】:

  • 你能把document_id => "%{[headers][request_path][2]}"改成document_id => "%{document_id}"并检查一下吗?
  • 找到解决方案了吗?

标签: elasticsearch logstash elasticsearch-plugin


【解决方案1】:

你需要改变你的条件。

这是引用 logstash 管道上的字段的正确方法:

if [request_path_length] == 3

您正在使用if [request_path_length == 3],它不起作用。

【讨论】:

    猜你喜欢
    • 2023-04-07
    • 2019-06-05
    • 2017-05-17
    • 2020-01-24
    • 2016-02-29
    • 2019-08-17
    • 1970-01-01
    • 1970-01-01
    • 2020-10-16
    相关资源
    最近更新 更多