用于 Elasticsearch 索引的 Logstash 中的小写字段名称
Lowercase field name in Logstash for Elasticsearch index
我有一个 logstash 命令,我正在通过管道将文件写入 Elasticsearch。我想使用一个字段 select 我将写入的索引 (appName
)。但是,此字段中的数据并非全部为小写,因此我需要在 select 索引时执行此操作,但我不希望修改文档本身中的数据。
我在下面尝试首先将原始字段 (appName
) 复制到新字段 (appNameIndex
),将新字段小写,将其从上传中删除,然后使用它选择索引。
input {
stdin { type => stdin }
}
filter {
csv {
separator => " "
columns => ["appName", "field1", "field2", ...]
convert => {
...
}
}
filter {
mutate {
copy => ["appName", "appNameIndex"]
}
}
filter {
mutate {
lowercase => ["appNameIndex"]
}
}
filter {
mutate {
remove_field => [
"appNameIndex", // if I remove this it works
...
]
}
}
output {
amazon_es {
hosts =>
["my-es-cluster.us-east-1.es.amazonaws.com"]
index => "%{appNameIndex}"
region => "us-east-1"
}
}
但是我收到的错误是
Invalid index name [%{appIndexName}]
很明显它没有抓住我的突变。是因为删除部分将其完全删除了吗?我希望只是将其从文档上传中删除。我是不是做错了?
UPDATE 我尝试取出删除索引名称部分,它确实有效,因此有助于确定错误的来源。现在问题变成了我如何绕过它。删除那部分配置后,我基本上有两个字段具有相同的数据,一个是小写的,一个不是
您可以定义一个 @metadata
字段,它是一个永远不会包含在输出中的特殊字段 https://www.elastic.co/guide/en/logstash/current/event-dependent-configuration.html#metadata。
input {
stdin { type => stdin }
}
filter {
csv {
separator => " "
columns => ["appName", "field1", "field2", ...]
convert => {
...
}
}
filter {
mutate {
copy => ["appName", "[@metadata][appNameIndex]"]
}
}
filter {
mutate {
lowercase => ["[@metadata][appNameIndex]"]
}
}
output {
amazon_es {
hosts => ["my-es-cluster.us-east-1.es.amazonaws.com"]
index => "%{[@metadata][appNameIndex]}"
region => "us-east-1"
}
}
我有一个 logstash 命令,我正在通过管道将文件写入 Elasticsearch。我想使用一个字段 select 我将写入的索引 (appName
)。但是,此字段中的数据并非全部为小写,因此我需要在 select 索引时执行此操作,但我不希望修改文档本身中的数据。
我在下面尝试首先将原始字段 (appName
) 复制到新字段 (appNameIndex
),将新字段小写,将其从上传中删除,然后使用它选择索引。
input {
stdin { type => stdin }
}
filter {
csv {
separator => " "
columns => ["appName", "field1", "field2", ...]
convert => {
...
}
}
filter {
mutate {
copy => ["appName", "appNameIndex"]
}
}
filter {
mutate {
lowercase => ["appNameIndex"]
}
}
filter {
mutate {
remove_field => [
"appNameIndex", // if I remove this it works
...
]
}
}
output {
amazon_es {
hosts =>
["my-es-cluster.us-east-1.es.amazonaws.com"]
index => "%{appNameIndex}"
region => "us-east-1"
}
}
但是我收到的错误是
Invalid index name [%{appIndexName}]
很明显它没有抓住我的突变。是因为删除部分将其完全删除了吗?我希望只是将其从文档上传中删除。我是不是做错了?
UPDATE 我尝试取出删除索引名称部分,它确实有效,因此有助于确定错误的来源。现在问题变成了我如何绕过它。删除那部分配置后,我基本上有两个字段具有相同的数据,一个是小写的,一个不是
您可以定义一个 @metadata
字段,它是一个永远不会包含在输出中的特殊字段 https://www.elastic.co/guide/en/logstash/current/event-dependent-configuration.html#metadata。
input {
stdin { type => stdin }
}
filter {
csv {
separator => " "
columns => ["appName", "field1", "field2", ...]
convert => {
...
}
}
filter {
mutate {
copy => ["appName", "[@metadata][appNameIndex]"]
}
}
filter {
mutate {
lowercase => ["[@metadata][appNameIndex]"]
}
}
output {
amazon_es {
hosts => ["my-es-cluster.us-east-1.es.amazonaws.com"]
index => "%{[@metadata][appNameIndex]}"
region => "us-east-1"
}
}