У меня есть конфигурация «стек 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. Если бы я прочитал часть о временных ограничениях, я бы знал. Поэтому я просто скорректировал время, чтобы вернуться на бесконечные годы назад, и увидел свои данные.
Итак, если у кого-то еще есть эта проблема, вероятно, это потому, что вы создали зависящий от времени индекс и не нажали кнопку «время» в правом верхнем углу и не изменили временные рамки.
Вот почему, друзья мои, вы читаете инструкцию!