LOGSTASH: как настроить logstash, чтобы получать все данные запроса, а не только его часть?

#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;
  

И теперь он работает нормально.