Я использую logstash для подачи журналов в ElasticSearch. Я настраиваю вывод logstash как:
input {
file {
path => "/tmp/foo.log"
codec =>
plain {
format => "%{message}"
}
}
}
output {
elasticsearch {
#host => localhost
codec => json {}
manage_template => false
index => "4glogs"
}
}
Я замечаю, что как только я запускаю logstash, он создает сопоставление (журналы) в ES, как показано ниже.
{
"4glogs": {
"mappings": {
"logs": {
"properties": {
"@timestamp": {
"type": "date",
"format": "dateOptionalTime"
},
"@version": {
"type": "string"
},
"message": {
"type": "string"
}
}
}
}
}
}
Как я могу предотвратить создание logstash из этого сопоставления?
UPDATE:
Я тоже исправил эту ошибку. "сопоставление объектов для [журналов] пыталось разобрать как объект, но получил EOF, есть конкретное значение, предоставленное ему?"
Как пояснил Джон Петреон ниже, как только вы определяете сопоставление, вы должны убедиться, что ваши документы соответствуют отображению. В моем случае я определил отображение типа "type: nested", но вывод из logstash был строкой. Поэтому я удалил все кодеки (будь то json или plain) из моей конфигурации logstash и позволил json-документу пройти без изменений.
Вот моя новая конфигурация logstash (с некоторыми дополнительными фильтрами для многострочных журналов).
input {
kafka {
zk_connect => "localhost:2181"
group_id => "logstash_group"
topic_id => "platform-logger"
reset_beginning => false
consumer_threads => 1
queue_size => 2000
consumer_id => "logstash-1"
fetch_message_max_bytes => 1048576
}
file {
path => "/tmp/foo.log"
}
}
filter {
multiline {
pattern => "^\s"
what => "previous"
}
multiline {
pattern => "[0-9]+$"
what => "previous"
}
multiline {
pattern => "^$"
what => "previous"
}
mutate{
remove_field => ["kafka"]
remove_field => ["@version"]
remove_field => ["@timestamp"]
remove_tag => ["multiline"]
}
}
output {
elasticsearch {
manage_template => false
index => "4glogs"
}
}