当前位置: 首页 > 知识库问答 >
问题:

试图使用ElasticSearch输出创建与请求路径值同名的索引时,出现无效的FieldReference

公西永嘉
2023-03-14
input {
    http {
        host => "127.0.0.1"
        port => 31311 
    }
}

filter {
    mutate {
        split => ["%{headers.request_path}", "/"]
        add_field => { "index_id" => "%{headers.request_path[0]}" }
        add_field => { "document_id" => "%{headers.request_path[1]}" }
    }
}

output {
  elasticsearch {
    hosts => "http://localhost:9200"
    index => "%{index_id}"
    document_id => "%{document_id}"
  }
  stdout {
    codec => "rubydebug"
  }
}

当我发送put请求时,如下所示

C:\users\bolverkxr\downloads\curl-7.64.1-win64-mingw\bin>.\curl.exe-xput'http://127.0.0.1:31311/twitter'

我希望创建一个名为twitter的新索引,而不是使用ElasticSearch默认值。

编辑:

当我将筛选器段更改为以下内容时,也会发生同样的错误:

filter {
    mutate {
        split => ["%{[headers][request_path]}", "/"]
        add_field => { "index_id" => "%{[headers][request_path][0]}" }
        add_field => { "document_id" => "%{[headers][request_path][1]}" }
    }
}

共有1个答案

堵琨
2023-03-14

拆分字段,不使用%{foo}语法。此外,您应该从数组的位置[1]开始,因为在位置[0]中,由于第一个分隔符(/)的左边没有字符,将出现一个空字符串(“”)。相反,您的过滤器部分应该如下所示:

 filter {
    mutate {
        split => ["[headers][request_path]", "/"]
        add_field => { "index_id" => "%{[headers][request_path][1]}" }
        add_field => { "document_id" => "%{[headers][request_path][2]}" }
    }
}

现在可以使用%{index_id}%{document_id}中的值。我使用Logstash 6.5.3版本对此进行了测试,并使用Postman发送'HTTP://127.0.0.1:31311/twitter/1'HTTP请求,控制台中的输出如下所示:

{
        "message" => "",
       "index_id" => "twitter",
    "document_id" => "1",
       "@version" => "1",
           "host" => "127.0.0.1",
     "@timestamp" => 2019-04-09T12:15:47.098Z,
        "headers" => {
             "connection" => "keep-alive",
           "http_version" => "HTTP/1.1",
            "http_accept" => "*/*",
          "cache_control" => "no-cache",
         "content_length" => "0",
          "postman_token" => "cb81754f-6d1c-4e31-ac94-fde50c0fdbf8",
        "accept_encoding" => "gzip, deflate",
           "request_path" => [
            [0] "",
            [1] "twitter",
            [2] "1"
        ],
              "http_host" => "127.0.0.1:31311",
        "http_user_agent" => "PostmanRuntime/7.6.1",
         "request_method" => "PUT"
    }
}

配置的输出部分不会更改。因此,最终的logstash.conf文件如下所示:

input {
    http {
        host => "127.0.0.1"
        port => 31311 
    }
}

filter {
    mutate {
        split => ["[headers][request_path]", "/"]
        add_field => { "index_id" => "%{[headers][request_path][1]}" }
        add_field => { "document_id" => "%{[headers][request_path][2]}" }
    }
}

output {
  elasticsearch {
    hosts => "http://localhost:9200"
    index => "%{index_id}"
    document_id => "%{document_id}"
  }
  stdout {
    codec => "rubydebug"
  }
}
 类似资料:
  • 这是我的: 作为测试,我在PowerShell中运行了以下命令: C:\users\me\downloads\curl-7.64.1-win64-mingw\bin>.\curl.exe-xput'http://127.0.0.1:31311/twitter' 在我的终端中显示了以下输出: 当我跑的时候 C:\users\me\downloads\curl-7.64.1-win64-mingw\b

  • 问题内容: 我正在使用Microsoft SQL SERVER 2014。 以下是我的查询 我得到了错误 消息207,级别16,状态1,第2行无效的列名称“ total_calories”。 这是一个非常简单的表(我是sql的新手,正在学习它)。有人可以指出我在做什么错吗?谢谢。 问题答案: 是必需的,因为您无权访问别名

  • 我有一个索引(仅150kb),我想在kibana中可视化。在进入堆栈管理之后 为什么会这样?我关闭了elasticsearch和kibana,然后重新打开,但错误依然存在。

  • 本文向大家介绍Dijkstra算法最短路径的C++实现与输出路径,包括了Dijkstra算法最短路径的C++实现与输出路径的使用技巧和注意事项,需要的朋友参考一下 某个源点到其余各顶点的最短路径 这个算法最开始心里怕怕的,不知道为什么,花了好长时间弄懂了,也写了一遍,又遇到时还是出错了,今天再次写它,心里没那么怕了,耐心研究,懂了之后会好开心的,哈哈 Dijkstra算法: 图G 如图:若要求从顶

  • 我有一个服务: 和一个入口路径: 但保存入口返回: 同步期间出错:评估入口规范时出错:服务“default/ExternalName”类型为“ExternalName”,应为“NodePort”或“LoadBalancer” GCE入口应支持外部名称服务(或者至少没有易于查找的文档表明存在其他错误),并且该错误很难追踪。

  • 我试图在我的应用程序中使用JPA,但当我添加JPA并启动应用程序时,我遇到了这个错误。我在stackoverflow和其他网站上看到了与相同错误相关的问题,建议了许多答案,但没有运气解决这个错误。。我不明白我哪里做错了。 POM。XML 实体类 存储库类 控制器类 我得到的错误是 我试过了 创建在类路径资源中定义的名为“entityManagerFactory”的bean时出错:调用init方法失