📜  如何使用 logstash 创建多个索引 (1)

📅  最后修改于: 2023-12-03 15:08:22.792000             🧑  作者: Mango

如何使用 Logstash 创建多个索引

Logstash 是一个流行的开源数据收集引擎,其可以将不同来源的数据进行过滤、转换、聚合等操作,然后将数据存储到不同的数据存储系统中。其中最常用的数据存储系统就是 Elasticsearch,而在 Elasticsearch 中,数据是以索引的形式进行存储的。

在某些情况下,我们需要将数据存储到不同的索引中,例如按数据来源分别存储到不同的索引中,或者按时间周期创建不同的索引等等。本文将介绍如何使用 Logstash 创建多个索引。

1. 使用 Logstash 配置文件创建单一索引

首先,我们需要了解如何使用 Logstash 配置文件创建单一索引。下面是一个简单的示例:

input {
  stdin {}
}

filter {
  grok {
    match => { "message" => "%{COMBINEDAPACHELOG}" }
  }
}

output {
  elasticsearch {
    hosts => ["localhost:9200"]
    index => "my_index"
  }
}

这个配置文件接收标准输入,使用 Grok 过滤器将 Apache 日志格式的数据进行解析,然后将数据输出到 Elasticsearch 中名为 “my_index” 的索引中。

2. 使用 Logstash 配置文件创建多个索引

如果我们需要将数据存储到多个索引中,我们需要对配置文件进行一些修改。具体地,我们需要在 output 部分的 index 字段中使用 Elasticsearch 的 index templates,从而实现动态创建索引的目的。

下面是一个示例,其中我们将数据存储到根据日期创建的索引中:

input {
  stdin {}
}

filter {
  grok {
    match => { "message" => "%{COMBINEDAPACHELOG}" }
  }
  date {
    match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
    target => "@timestamp"
  }
}

output {
  elasticsearch {
    hosts => ["localhost:9200"]
    index => "my_index-%{+YYYY.MM.dd}"
  }
}

在这个示例中,我们使用 date 过滤器将 timestamp 字段解析为 @timestamp 字段,并使用 index templates 将数据存储到名为 “my_index-YYYY.MM.dd” 的索引中,其中 YYYY.MM.dd 是当前日期。

如果我们需要将数据存储到根据数据来源动态创建的索引中,我们可以使用 Logstash 的条件语句。具体地,我们可以在 filter 部分中根据条件为数据添加一个特定的标记,然后在 output 部分中根据这个标记动态创建索引。下面是一个示例:

input {
  stdin {}
}

filter {
  if [source] == "web" {
    grok {
      match => { "message" => "%{COMBINEDAPACHELOG}" }
    }
    date {
      match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
      target => "@timestamp"
    }
    mutate {
      add_tag => "web"
    }
  } else if [source] == "app" {
    mutate {
      add_tag => "app"
    }
    json {
      source => "message"
    }
  }
}

output {
  if "web" in [tags] {
    elasticsearch {
      hosts => ["localhost:9200"]
      index => "my_web_index-%{+YYYY.MM.dd}"
    }
  } else if "app" in [tags] {
    elasticsearch {
      hosts => ["localhost:9200"]
      index => "my_app_index-%{+YYYY.MM.dd}"
    }
  }
}

在这个示例中,我们根据数据来源将数据分别处理,为数据添加不同的标记。然后在 output 部分,我们使用条件语句根据不同的标记动态创建不同的索引。

3. 总结

本文介绍了如何使用 Logstash 创建多个索引。具体地,我们通过使用 Elasticsearch 的 index templates 和 Logstash 的条件语句,实现了动态创建多个索引的目的。