首页 > 解决方案 > Logstash:1 个输入和多个输出文件

问题描述

我们有一个正在运行的软件,它通过 Apache Kafka 发布信息。由于客户要求,所有信息都被收集并写入 txt 和 csv 文件。到目前为止,客户只有一个项目,但他们现在想添加第二个项目,并希望将信息过滤到 2 个单独的文件中。事实上,他们希望像现在一样继续将 1 个项目推送到 txt 文件中,但将第二个项目的信息直接推送到数据库中。这可能吗?谁能指出我在哪里可以找到更多信息?

input {
  kafka {
    bootstrap_servers => ["10.1.83.132:9192"]
    group_id => ["my_plugin_id"]
    topics => "survey-result"
    codec => json
    security_protocol => ["SSL"]
    ssl_truststore_location => ["/home/bitnami/kafka.client.truststore.jks"]
    ssl_truststore_password => ["changeit"]
    ssl_endpoint_identification_algorithm => [""]
    auto_offset_reset => "earliest"
    }
}
output {
   elasticsearch {
      hosts => ["127.0.0.1:9200"]
      index => "survey-result"
      workers => 1
      codec => json
    }
   file {
        path => "/sadata/saexport-%{+YYYY-MM-dd}.txt"
        # codec => line { format => "custom format: %{message}"}
 }

   csv {
        # elastic field name
        fields => ["data.integrationName", "data.contextData.UCID", "data.contextData.ANI", "data.reason.reason", "data.status"]
        # separator => ","
        # This is path where we store output.   
        path => "/sadata/saexport.%{+YYYY-MM-dd-hh}.csv"
  }
}

谢谢

标签: logstashlogstash-configuration

解决方案


是的,这是可能的,您需要在输出中使用条件来根据一个或多个字段将消息定向到正确的目的地。

例如:

output {
    if [fieldName] == "stringA" {
        output for this type of message
    }
    if [fieldName] == "stringB" {
        output for this type of message
    }
    if [fieldName] == "stringN" {
        output for this type of message
    }
}

您将需要一个字段进行过滤,该字段可以出现在文档中,或者如果您要使用多个输入,则可以使用所有输入中可用的常用选项tags中的或type选项添加它。

部分文档有一些关于使用条件的示例。


推荐阅读