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

使用ElasticSearch输出创建与请求路径值同名的索引

蒋俊
2023-03-14

这是我的logstash.conf:

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

output {
  elasticsearch {
    hosts => ["http://localhost:9200"]      
  }
  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'

在我的logstash终端中显示了以下输出:

{
    "@timestamp" => 2019-04-09T08:32:09.250Z,
       "message" => "",
      "@version" => "1",
       "headers" => {
           "request_path" => "/twitter",
           "http_version" => "HTTP/1.1",
        "http_user_agent" => "curl/7.64.1",
         "request_method" => "PUT",
            "http_accept" => "*/*",
         "content_length" => "0",
              "http_host" => "127.0.0.1:31311"
    },
          "host" => "127.0.0.1"
}

当我跑的时候

C:\users\me\downloads\curl-7.64.1-win64-mingw\bin>.\curl.exe-xget“http://127.0.0.1:9200/_cat/indexes”

在PowerShell里面,我看到

黄色开放日志stash-2019.04.091THSTDPFQYSWL1WPNEIWPQ 5 1 0 0 401B 401B

根据ElasticSearch约定,创建了一个名为logstash-2019.04.09的索引,以响应我的put请求。

我的问题是:如果我希望索引具有与.\curl.exe-xput'http://127.0.0.1:31311/{index_name}'命令中传递的{index_name}参数相同的值,那么我应该如何在logstash.conf文件中配置ElasticSearch输出?

Edit:为了澄清,我希望每次发出put请求创建新索引时都动态读取{index_name}。这可能吗?

共有1个答案

唐煜
2023-03-14

可以使用索引输出配置选项。
此配置可以使用%{foo}语法进行动态配置。由于希望[headers][request_path]的值位于索引配置中,因此可以执行如下操作:

output {
  elasticsearch {
    hosts => ["http://localhost:9200"] 
    index => "%{[headers][request_path]}"     
  }
}

要使其工作,值[headers][request_path]字段不能包含以下任何字符:[,\“,*,\\,<,,,>,/,?]。我建议您使用变异筛选器的gsub配置选项。因此,要删除所有正斜杠,您应该使用如下内容:

filter{
  mutate{
      gsub => ["[headers][request_path]","/",""]
    }
}

如果请求路径有几个正斜杠,可以用ElasticSearch接受的字符替换它们。
所以,最终的logstash.conf文件应该如下所示:

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

filter{
  mutate{
      gsub => ["[headers][request_path]","/",""]
    }
}

output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "%{[headers][request_path]}"
  }
  stdout {
    codec => "rubydebug"
  }
}
 类似资料:
  • 当我发送请求时,如下所示 C:\users\bolverkxr\downloads\curl-7.64.1-win64-mingw\bin>.\curl.exe-xput'http://127.0.0.1:31311/twitter' 我希望创建一个名为的新索引,而不是使用ElasticSearch默认值。 编辑: 当我将段更改为以下内容时,也会发生同样的错误:

  • 问题内容: 我有一个用例,需要每月在Elasticsearch中创建索引。这个想法是在月度基础上创建索引,以便它们易于维护并且可以在过期时删除。为此,我使用了spring- batch并有一个月度工作,它将按月基础创建索引以供Elasticsearch使用-Java集成我已经使用了Spring-Data Elasticsearch实现。我现在面临的问题是,我无法弄清楚如何使用Entity对象为索引

  • 问题内容: 我正在努力完成索引创建这一简单任务,目标是使用分析器和字段映射创建索引。当我使用分析器创建索引时,我可以通过分析api调用与分析器通信,但是当我添加映射信息时,创建索引调用失败,并显示“字段[$ field]]找不到Analyzer [analyzer1]”,我创建了一个脚本来显示问题: 问题答案: 我相信您的问题是这些设置需要嵌套在JSON的一个节点内,而不是您所拥有的嵌套在一个节点

  • 我正在开发一个web应用程序,并试图使用它的文本创建一个pdf文档。 当我得到一个路径(本地和服务器上)时,它工作得很好,但我知道我需要在不实际创建它的情况下完成它。 我不想要的:PdfCopy copy=newpdfcopy(documentPDF,newfileoutputstream(mypath)) 我想要的是://PdfCopy copy=new PdfCopy(documentPDF,

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

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