Импорт PCAP в Elasticsearch

Я пробую Elasticsearch в первый раз.

Я скачал Elasticsearch и Kibana, вроде все работает нормально. Я могу посетить http://localhost:5601 и просмотреть Kibana без ошибок.

Я сделал несколько трассировок с wireshark/tshark и преобразовал их в формат Elasticsearch с помощью:

tshark -r test_trace.pcap -T ek > test_trace.pcap.json

Теперь я пытаюсь импортировать этот .json в Elasticsearch, но, похоже, это не удается:

curl -s -H "Content-Type: application/x-ndjson" -XPOST "localhost:9200/foo/_bulk" --data-binary "@/Users/test-elastic/test_trace.pcap.json"

Я не получаю никаких ошибок или каких-либо выходных данных, но при посещении Kibana отображается index_not_found_exception и выполняется:

curl 'http://127.0.0.1:9200/foo/_search/?size=10&pretty=true'

Выходы

{
  "error" : {
    "root_cause" : [
      {
        "type" : "index_not_found_exception",
        "reason" : "no such index",
        "resource.type" : "index_or_alias",
        "resource.id" : "foo",
        "index_uuid" : "_na_",
        "index" : "foo"
      }
    ],
    "type" : "index_not_found_exception",
    "reason" : "no such index",
    "resource.type" : "index_or_alias",
    "resource.id" : "foo",
    "index_uuid" : "_na_",
    "index" : "foo"
  },
  "status" : 404
}

Как я могу правильно импортировать свои данные и просматривать их в Elasticsearch и Kibana?

Файл JSON размером 195 МБ преобразован из файла PCAP размером 10 МБ. Вывод первых строк в json-файле:

{"index" : {"_index": "packets-2019-02-15", "_type": "pcap_file", "_score": null}}
{"timestamp" : "1549540104875", "layers" : {"frame": {"frame_frame_interface_id":...

ОБНОВЛЕНИЕ

После удаления -s в curl я получаю вывод:

HTTP/1.1 413 Request Entity Too Large

Теперь я попытался использовать split для разделения файлов на несколько файлов меньшего размера.

Повторное тестирование импорта теперь дает мне несколько ошибок:

..."reason":"failed to parse","caused_by":{"type":"json_parse_exception","reason":"Duplicate field 'ip_ip_addr'\n at [Source: org.elasticsearch.common.bytes.BytesReference$MarkSupportingStreamInputWrapper@5d2f82db; line: 1, column: 1300...

ОБНОВЛЕНИЕ

Я использовал следующую команду на моем test_trace.pcap.json, чтобы получить файлы меньшего размера:

split -l 10000 -a 10 test_trace.pcap.json.pcap.json ./tmp/test_trace.pcap

Затем я получил много файлов и протестировал импорт с первым файлом:

./tmp/test_trace.pcapaaaaaaaaaa

Тип файла в моем .json:

"frame_frame_protocols": "sll:ethertype:ip:sctp"

и действительно есть несколько полей ip_ip_addr, так как у меня есть IP-адреса источника и назначения в трассировках.


person Alfred Balle    schedule 18.02.2019    source источник
comment
Можете ли вы также показать первые несколько строк test_trace.pcap.json? и насколько большой этот файл?   -  person Val    schedule 18.02.2019
comment
Конечно сделано :)   -  person Alfred Balle    schedule 18.02.2019


Ответы (1)


Ваш файл JSON уже содержит индекс, в который данные должны быть проиндексированы, то есть packets-2019-02-15, поэтому ваш запрос должен быть просто:

curl 'http://127.0.0.1:9200/packets-2019-02-15/_search/?size=10&pretty=true'

Однако я сомневаюсь, что вы можете отправить файл размером 195 МБ за один раз, я предлагаю вам разбить и загрузить по частям

person Val    schedule 18.02.2019
comment
Хорошо, запуск curl 'http://127.0.0.1:9200/packets-2019-02-15/_search/?size=10&pretty=true' ничего не дает. Не будет ли сообщения об ошибке, если файл слишком большой? - person Alfred Balle; 18.02.2019
comment
Файл, вероятно, слишком большой, и если вы подождете достаточно долго, вы, вероятно, получите ошибку 5xx. Ваша команда curl bulk завершила выполнение или вы ее убили? - person Val; 18.02.2019
comment
curl завершается в течение нескольких секунд, без ошибок и без необходимости его убивать. - person Alfred Balle; 18.02.2019
comment
Хм, несколько секунд для 195 МБ звучит странно... можно убрать ключ -s? - person Val; 18.02.2019
comment
здесь есть еще отзывы? - person Val; 19.02.2019
comment
Как убрать ключ -s? - person Alfred Balle; 19.02.2019
comment
из вашей команды curl, где вы выполняете массовую загрузку, просто удалите переключатель -s и замените его на -v - person Val; 19.02.2019
comment
А, теперь я получаю HTTP/1.1 413 Request Entity Too Large. Отлично спасибо. Я обновлю сообщение информацией и выводом после использования split. - person Alfred Balle; 19.02.2019
comment
Могу я спросить, как вы сделали разделение? операция разделения просто предполагает разделение вашего большого объемного файла на более мелкие. Есть ли в каждом разделенном файле команда и строка документа для каждого документа? - person Val; 19.02.2019
comment
Используется split -l 10000 -a 10 test_trace.pcap.json /tmp/test_trace.pcap - person Alfred Balle; 19.02.2019
comment
Вам нужно показать, как вы адаптировали мой сплит-скрипт к вашему случаю, пожалуйста, дополните им свой вопрос, чтобы у нас была полная картина. - person Val; 19.02.2019
comment
Просто проверка, если ask.wireshark.org/question/505/ deduplication-in-tshark-t-ek может быть моей проблемой. - person Alfred Balle; 19.02.2019
comment
Что ж, действительно, если сгенерированный JSON имеет несколько повторяющихся полей, это будет проблемой, поскольку это недействительный JSON. - person Val; 19.02.2019
comment
Хорошо, теперь все работает с обновленным Wireshark. Спасибо. - person Alfred Balle; 19.02.2019
comment
Круто, рад, что ты это понял! - person Val; 19.02.2019