Elasticsearch изменить тип поля из рассечения фильтра
Я использую logstash-logback-encoder
отправить файлы журналов Java в logstash, а затем в эластичный поиск. Разобрать message
в журнале Java, я использую следующий фильтр для анализа сообщения
input {
file {
path => "/Users/MacBook-201965/Work/java/logs/oauth-logstash.log"
start_position => "beginning"
codec => "json"
}
}
filter {
if "EXECUTION_TIME" in [tags] {
dissect {
mapping => {
"message" => "%{endpoint} timeMillis:[%{execution_time_millis}] data:%{additional_data}"
}
}
mutate {
convert => { "execution_time_millis" => "integer" }
}
}
}
output {
elasticsearch {
hosts => "localhost:9200"
index => "elk-%{+YYYY}"
document_type => "log"
}
stdout {
codec => json
}
}
Это рассекает сообщение, чтобы я мог получить значение execution_time_millis
, Однако тип данных является строковым. Я создал индекс, используя шаблон индекса Kibana. Как я могу изменить тип данных execution_time_millis
в долго?
Вот пример сообщения JSON от входа
{
"message":"/tests/{id} timeMillis:[142] data:2282||0:0:0:0:0:0:0:1",
"logger_name":"com.timpamungkas.oauth.client.controller.ElkController",
"level_value":20000,
"endpoint":"/tests/{id}",
"execution_time_millis":"142",
"@version":1,
"host":"macbook201965s-MacBook-Air.local",
"thread_name":"http-nio-8080-exec-7",
"path":"/Users/MacBook-201965/Work/java/logs/oauth-logstash.log",
"@timestamp":"2018-01-04T11:20:20.100Z",
"level":"INFO",
"tags":[
"EXECUTION_TIME"
],
"additional_data":"2282||0:0:0:0:0:0:0:1"
}{
"message":"/tests/{id} timeMillis:[110] data:2280||0:0:0:0:0:0:0:1",
"logger_name":"com.timpamungkas.oauth.client.controller.ElkController",
"level_value":20000,
"endpoint":"/tests/{id}",
"execution_time_millis":"110",
"@version":1,
"host":"macbook201965s-MacBook-Air.local",
"thread_name":"http-nio-8080-exec-5",
"path":"/Users/MacBook-201965/Work/java/logs/oauth-logstash.log",
"@timestamp":"2018-01-04T11:20:19.780Z",
"level":"INFO",
"tags":[
"EXECUTION_TIME"
],
"additional_data":"2280||0:0:0:0:0:0:0:1"
}
Спасибо
1 ответ
Если вы уже проиндексировали документы, вам придется переиндексировать данные после изменения типа данных любого поля.
Тем не менее, вы можете использовать что-то вроде этого, чтобы изменить тип millis
от строки к целому числу (long
не поддерживается в этом)
https://www.elastic.co/guide/en/logstash/current/plugins-filters-mutate.html
Кроме того, попробуйте определить шаблон asticsearch перед созданием индекса, если вы собираетесь добавить несколько индексов с именами индексов, имеющими некоторый шаблон регулярных выражений. Кроме того, вы также можете заранее определить формат индекса и затем начать индексирование.