#postgresql #elasticsearch #logstash #logstash-configuration #logstash-jdbc
#postgresql #elasticsearch #logstash #logstash-конфигурация #logstash-jdbc
Вопрос:
У меня есть таблица базы данных, которая содержит более 400 записей, но каждый раз, когда я использую logstash и JDBC, она получает только 126 записей. Я пробовал много раз с разными индексами каждый раз, но все равно извлекал только 126.
Вот выходные конфигурации:
input {
jdbc {
-
-
jdbc_driver_class => "org.postgresql.Driver"
statement => "SELECT * from xfailure"
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
manage_template => false
index => "test_predictions"
document_id => "%{id}"
}
}
Когда я проверяю количество строк, я обнаружил, что в нем более 400 записей, вот состояние выбора:
SELECT * FROM xfailure;
вот пример столбцов записей:
id|modified|x_url|x_id|correlation_id|links|code|description|explanation|tr_id
Когда я создаю индекс на Kibanna, я использовал временную метку в качестве поля времени, но количество обращений составляет всего 162 обращения!
Комментарии:
1. Есть ли ошибки в журналах logstah или elasticsearch? Вы предварительно настроили сопоставление индексов или полагаетесь на автоматическое сопоставление?
2. @ibexit
index => "test_predictions"
Если вы имеете в виду индексирование с указанием индекса для хранения данных, то да, я его указал. Я также пробовал с указанием document_id и без него.3. Нет, elastic создает отображение для каждого индекса, это своего рода схема, в которой определены все поля и типы данных. Если вы не укажете его, elastic попытается угадать его на основе входящих документов. И если есть документы, не соответствующие автоматически угадываемой схеме, или сопоставлению, они не будут проиндексированы.
4. @ibexit Я извлекаю данные из таблицы базы данных postgresql, поэтому я думаю, что у меня нет шансов иметь более одной схемы.
5. Достаточно иметь смешанное поле, в котором допустимы строки или числа. Вводится firdt dic с номером, предположение elastics для сопоставления будет number, а затем, позже, приходит другой документ со строкой в качестве значения этого поля — бам! Загляните в журналы, может быть, это что-то другое…
Ответ №1:
Я нашел решение для этого, которое определяет каждое поле so, изменяя sql-запрос из:
SELECT * FROM xfailure;
Для
SELECT field_1 as field_1, field_2 as field_2 FROM xfailure;
И теперь он работает нормально.