使用应用程序端口为Logstash中的日志编制索引

vngu2lb8  于 2022-12-16  发布在  Logstash
关注(0)|答案(1)|浏览(171)

我使用ELK堆栈,这个依赖关系和配置,以记录我的API。

<dependency>
        <groupId>com.github.piomin</groupId>
        <artifactId>logstash-logging-spring-boot-starter</artifactId>
        <version>1.3.0.RELEASE</version>
    </dependency>

在属性中:

logging.logstash.enabled: true
logging.logstash.url: 127.0.0.1:5000
logging.logstash.ignorePatterns: /(actuator|swagger|webjars).*
logging.logstash.logHeaders: true

我有几个应用程序使用不同的端口,如==〉应用程序A:本地主机:9000,应用程序B:localhost:9001,...所有日志都使用以下配置发送到Logstash:

input {
   tcp {
    port => 5000
    codec => json
    type => "AppA"
  }
   tcp {
    port => 5000
    codec => json
    type => "AppB"

  }
}

filter {
       if [type] == "AppA" {
            mutate { add_field => { "[@metadata][target_index]" => "AppA" } }
      } else if [type] == "AppB" {
            mutate { add_field => { "[@metadata][target_index]" => "AppB" } }
      }
}

output {
    elasticsearch {
             hosts => ["localhost:9200"]
             index => "%{[@metadata][target_index]}"
                  }
}

但是它不起作用。我想根据端口或应用程序的名称对它们进行索引。有什么解决办法吗?

plupiseo

plupiseo1#

由于您希望过滤事件,并根据输入将其发送到不同的索引,因此只需在输出块中使用条件,就像在过滤器块中所做的那样。
您需要类似以下管道的东西。

input {
    tpc {
        port => 5000
        type => "AppA"
    }
    tpc {
        port => 6000
        type => "AppB"
    }
}

filter {
    if [type] == "AppA" {
        filters for type AppA
    } else if [type] == "AppB" {
        filters for type AppB
    }
}

output {
    if [type] == "AppA" {
        elasticsearch {
            index for AppA
        }
    } else if [type] == "AppB" {
        elasticsearch {
            index for AppB
        }
    }
}

相关问题