Logstash / Elasticsearch - 在输出配置中将字段转换为小写

Logstash / Elasticsearch - 在输出配置中将字段转换为小写

我有一个标准的 ELK 堆栈,目前存储了大量日志输出。我正尝试将我的索引分离为特定于源的索引。

作为我的 FileBeats 配置的一部分,一些标准字段始终作为每条消息的一部分生成(并且特定于位置),我想将其用作我的 ES 索引的基础:

output {
  elasticsearch {
    hosts => ["http://elasticsearch.mydomain.com:80"]
    index => "logstash-%{+YYYY.MM.dd}-%{[fields][identifier]}"
  }
}

但是,ES 拒绝了某些索引,因为该字段包含大写字符 - 标识符具有可接受的值,例如麦富但也可能是我的酒吧

[logstash.outputs.elasticsearch] Could not index event to Elasticsearch. {"reason"=>"Invalid index name [logstash-2017.06.02-MyBar], must be lowercase"}

大小写不是必需的,我可以添加变异过滤器来强制将相关字段变为小写,但我更愿意使用正确的大小写来存储标识符字段,但使用小写版本作为索引名称。

是否有可以在 elasticsearch 输出中调用的函数,将相关字段转换为小写?类似

    index => "logstash-%{+YYYY.MM.dd}-%{[fields][identifier]}.lowercase()"

答案1

这可以通过一些变异技巧来实现。

  1. 使用 mutate 创建一个新字段,并将其设置为您的标识符。
  2. 在第二次变异中,将新字段改为小写。
  3. 在输出中使用新字段。

就像这样:

filter {
  mutate {
    add_field => { "lc_identifier" => "%{fields}%{identifier}" }
  }
  mutate {
    lowercase => [ "lc_identifier" ]
  }
}

output {
  elasticsearch {
    hosts => ["http://elasticsearch.example.com:80"]
    index => "logstash-%{+YYYY.MM.dd}-%{[lc_identifier]}"
  }
}

您最终会lc_identifier在索引中得到一个字段,但这并不重要。

答案2

基于 sysadmin1138 的回答

您可以使用@元数据字段,以防止该lc_identifier字段在索引时出现在您的文档中。

在您的过滤器中,更改:

filter {
  mutate {
    add_field => { "lc_identifier" => "%{fields}%{identifier}" }
  }
  mutate {
    lowercase => [ "lc_identifier" ]
  }
}

到:

filter {
  mutate {
    add_field => { "[@metadata][lc_identifier]" => "%{fields}%{identifier}" }
  }
  mutate {
    lowercase => [ "[@metadata][lc_identifier]" ]
  }
}

并在输出中调用它:

output {
  elasticsearch {
    hosts => ["http://elasticsearch.example.com:80"]
    index => "logstash-%{+YYYY.MM.dd}-%{[@metadata][lc_identifier]}"
  }
}

这样,您可以创建具有小写标识符的索引模式,但避免小写字段出现在文档本身中。

答案3

filter {
  mutate {
    add_field => { "lc_identifier" => "%{fields}" }
  }
  mutate {
    lowercase => [ "lc_identifier" ]
  }
}

output {
  elasticsearch {
    hosts => ["http://elasticsearch.example.com:80"]
    index => "logstash-%{+YYYY.MM.dd}-%{lc_identifier}"
  }
}

相关内容