Hi all,
Is it possible to have a conditional output in logstash?
My setup is several different filters in /etc/logstash/conf.d with grok filters.
They all then look at my output.conf file.
In my output.conf file I send the logs to an AWS SQS queue.
Output config:
if "_grokparsefailure" in [tags] {
output {
sqs {
queue => "Queue-One"
region => "eu-west-1"
access_key_id => "xxx"
secret_access_key => "xxx"
}
}
}
else {
output {
sqs {
queue => "Other-Queue"
region => "eu-west-1"
access_key_id => "xxx"
secret_access_key => "xxx"
}
}
}
But this doesn't seem to work.
I have also tried
if [tags] =~ /grokparsefailure/ {
That also doesn't seem to work.
The error I get is:
Failed to execute action {:action=>LogStash::PipelineAction::Create/pipeline_id:main, :exception=>"LogStash::ConfigurationError", :message=>"Expected one of #, input, filter, output at line 833, column 1 (byte 58775) after ", :backtrace=>["/usr/share/logstash/logstash-core/lib/logstash/compiler.rb:41:in
compile_imperative'", "/usr/share/logstash/logstash-core/lib/logstash/compiler.rb:49:in compile_graph'", "/usr/share/logstash/logstash-core/lib/logstash/compiler.rb:11:in
block in compile_sources'", "org/jruby/RubyArray.java:2577:in map'", "/usr/share/logstash/logstash-core/lib/logstash/compiler.rb:10:in
compile_sources'", "org/logstash/execution/AbstractPipelineExt.java:151:in initialize'", "/usr/share/logstash/logstash-core/lib/logstash/pipeline.rb:22:in
initialize'", "/usr/share/logstash/logstash-core/lib/logstash/pipeline.rb:90:in initialize'", "/usr/share/logstash/logstash-core/lib/logstash/pipeline_action/create.rb:43:in
block in execute'", "/usr/share/logstash/logstash-core/lib/logstash/agent.rb:96:in block in exclusive'", "org/jruby/ext/thread/Mutex.java:165:in
synchronize'", "/usr/share/logstash/logstash-core/lib/logstash/agent.rb:96:in exclusive'", "/usr/share/logstash/logstash-core/lib/logstash/pipeline_action/create.rb:39:in
execute'", "/usr/share/logstash/logstash-core/lib/logstash/agent.rb:334:in block in converge_state'"]}
Any ideas?