Назад | Перейти на главную страницу

Информация, отправленная из Logstash через эластичный вывод, не отображается в Kibana, но вывод файла работает нормально - что я делаю не так?

У меня есть конфигурация «стек ELK», и сначала я выполнял стандартную загрузку системного журнала filebeat из logstash с помощью выходного плагина elasticsearch. Он работал нормально.

Теперь я добавил порт ввода TCP (с назначенным "типом" для этих данных, чтобы делать if [type] == "thistype" для дифференциации в фильтрах), свой собственный фильтр Grok и вывод для обоих elasticsearch с его собственным уникальным имя индекса и имя_документа и файл. Когда данные поступают через TCP-порт, они записывают правильно отформатированные данные в выходной файл, как и ожидалось в плагине вывода файлов, но при выборе данного индекса в Kibana данные не отображаются. Kibana распознает индекс из моей выходной конфигурации, а также перечисляет все поля / ключи, которые я назначаю в фильтре Grok; однако, опять же, данные недоступны для поиска. Данные определенно обрабатываются должным образом, поскольку они, как я уже упоминал, отображаются в выводе файлового плагина.

Что я здесь делаю не так? Моя конфигурация следующая:

input {
  tcp {
    host => "10.1.1.10"
    port => 12345
    type => "odata"
    id => "odata"
    codec => line
  }
}

filter {
  if [type] == "odata" {
    grok {
      match => { "message" => "%{QUOTEDSTRING:oid},\"%{WORD:oword1}\",\"%{IPV4:oclientip}\",\"%{DATA:otimestamp}\",%{QUOTEDSTRING:opl},%{QUOTEDSTRING:oos},%{QUOTEDSTRING:oua}" }
      remove_field => "message"
    }

    date {
      match => ["otimestamp", "YYYY-MM-dd HH:mm:ss Z"]
    }

    mutate {
      remove_field => "otimestamp"
      remove_field => "host"
      remove_field => "@version"
    }
  }
}

output {
# the if .. is here because there are other types that are handled in this output since I centralize the input, filter, and output files to three distinct files.
  if [type] == "odata" {
    elasticsearch {
      hosts => ["10.1.1.1:9200", "10.1.1.2:9200"]
      sniffing => false
      index => "odataindex"
      document_type => "odatatype"
    }
    file {
      path => "/tmp/odata_output"
    }
  }
}

Опять же, фильтр Grok в порядке; данные просто загружаются через tcp; а плагин вывода файлов отлично выводит поля интерпретации / grokd. Kibana видит индекс odataindex и поля (такие как oid, oclientip, oua и т. Д.) Из фильтра grok. Когда я выполняю поиск, он просто не возвращает никаких данных.

Любые идеи? Я новичок в elastic / kibana / logstash и был бы признателен за любые советы по отладке этих вещей.

Заранее спасибо!

Поскольку я не был знаком с Kibana, я не знал, что время для данных при поиске / отображении по умолчанию составляет всего 15 минут. Входящие данные были отмечены меткой времени (ключ @timestamp) через плагин 'date' с исходной датой открытия, а НЕ временем, через порт TCP для эластичного события вставки; таким образом, данные не отображались, и я понятия не имел, что по умолчанию отображаются только данные за последние 15 минут на основе @timestamp. Если бы я прочитал часть о временных ограничениях, я бы знал. Поэтому я просто скорректировал время, чтобы вернуться на бесконечные годы назад, и увидел свои данные.

Итак, если у кого-то еще есть эта проблема, вероятно, это потому, что вы создали зависящий от времени индекс и не нажали кнопку «время» в правом верхнем углу и не изменили временные рамки.

Вот почему, друзья мои, вы читаете инструкцию!