elasticsearch 如何使用logstash将队列内容发送到elasticsearch索引,elasticsearch,logstash,elasticsearch,Logstash" /> elasticsearch 如何使用logstash将队列内容发送到elasticsearch索引,elasticsearch,logstash,elasticsearch,Logstash" />

elasticsearch 如何使用logstash将队列内容发送到elasticsearch索引

elasticsearch 如何使用logstash将队列内容发送到elasticsearch索引,elasticsearch,logstash,elasticsearch,Logstash,我有一个日志存储并运行,它消耗了两个兔子队列并发送到elasticsearch。这是我的logstash.conf文件: input { rabbitmq { host => 'rabbit' durable => true user => 'user' queue => 'dev-user_trace' password => 'pass' } rabbitmq { host => 'rabbit'

我有一个日志存储并运行,它消耗了两个兔子队列并发送到elasticsearch。这是我的logstash.conf文件:

input {
  rabbitmq {
    host => 'rabbit'
    durable => true
    user => 'user'
    queue => 'dev-user_trace'
    password => 'pass'
  }
  rabbitmq {
    host => 'rabbit'
    durable => true
    user => 'user'
    queue => 'min-price-queue'
    password => 'pass'
  }

}
filter{
}
output{
  stdout { codec => json}
    elasticsearch{
    hosts => ["elasticsearch"]
    index => "eventss-%{+YYYY.MM.dd}"
  }

}
现在我有了另一个队列,但我想将其内容发送到另一个elasticsearch索引。我的问题是:我需要如何将特定条目重定向到特定索引?或者我需要另一个logstash实例吗


提前谢谢。

非常好的开始。现在,您只需“键入”每个输入,然后根据其类型将事件转发到相应的输出,如下所示:

input {
  rabbitmq {
    host => 'rabbit'
    durable => true
    user => 'user'
    queue => 'dev-user_trace'
    password => 'pass'
    type => 'traces'               # <-- add this
  }
  rabbitmq {
    host => 'rabbit'
    durable => true
    user => 'user'
    queue => 'min-price-queue'
    password => 'pass'
    type => 'prices'               # <-- add this
  }

}
filter{
}
output{
  stdout { codec => json}

  if [type] == 'traces' {          # <-- check type
     elasticsearch{
       hosts => ["host1:9200"]
       index => "index1-%{+YYYY.MM.dd}"
     }
  }

  if [type] == 'prices' {          # <-- check type
     elasticsearch{
       hosts => ["host2:9200"]
       index => "index2-%{+YYYY.MM.dd}"
     }
  }
}
输入{
兔子{
主机=>“兔子”
持久=>真实
用户=>'user'
队列=>'dev-user_trace'
密码=>“通过”
type=>“traces”#“rabbit”
持久=>真实
用户=>'user'
队列=>“最小价格队列”
密码=>“通过”
type=>prices'#json}
如果[type]=“traces”{#[“host1:9200”]
index=>“index1-%{+YYYY.MM.dd}”
}
}
如果[type]=“prices”{#[“host2:9200”]
index=>“index2-%{+YYYY.MM.dd}”
}
}
}
更新

以上是最通用的方法,因此您可以对两种输出进行不同的配置。正如@pandaadb所建议的,您还可以有一个输出并定义一个类型作为您的目标索引:

input {
  rabbitmq {
    host => 'rabbit'
    durable => true
    user => 'user'
    queue => 'dev-user_trace'
    password => 'pass'
    type => 'index1'                    # <-- add this
  }
  rabbitmq {
    host => 'rabbit'
    durable => true
    user => 'user'
    queue => 'min-price-queue'
    password => 'pass'
    type => 'index2'                    # <-- add this
  }

}
filter{
}
output{
  stdout { codec => json}

  elasticsearch{
    hosts => ["localhost:9200"]
    index => "%{type}-%{+YYYY.MM.dd}"   # <-- use type here
  }
}
输入{
兔子{
主机=>“兔子”
持久=>真实
用户=>'user'
队列=>'dev-user_trace'
密码=>“通过”
类型=>'index1'#'rabbit'
持久=>真实
用户=>'user'
队列=>“最小价格队列”
密码=>“通过”
类型=>'index2'#json}
弹性搜索{
hosts=>[“localhost:9200”]

index=>“%{type}-%{+YYYY.MM.dd}”#如果您通过索引名调用您的类型,您可以在索引中使用通配符,并有1个elasticsearch输出,将其索引到“%{type}-%{+YYYY/MM.dd}”@pandadb Yes,但他可能希望以不同的方式配置两个ES输出,例如发送到两个不同的ES主机(如我的答案中所示)。我的答案更一般,但当然,如果需要,您可以使用单个输出并将
类型定义为目标索引。我已经更新了我的答案,并为此向您表示感谢。哦,是的,您的答案绝对正确:)我只想添加它,因为它在我的简单示例中很有帮助,并且使配置更具可读性谢谢你的回答。完美地解释了一个清楚的问题。谢谢你真棒,很高兴它能帮上忙!