В основном я хочу импортировать JSON-данные в (Logstash-> ElasticSearch->) Kibana, но я совершенно новичок и застрял в различных методах, которые я не до конца понимаю, и получаю ошибки или не выводлю.
У меня есть файл test.json, содержащий данные из Википедии в следующем формате:
{
"results": [
{
"curr": "Ohio_\"Heartbeat_Bill\"",
"n": 43,
"prev": "other-external",
"type": "external"
},
{
"curr": "Ohio_\"Heartbeat_Bill\"",
"n": 1569,
"prev": "other-search",
"type": "external"
},
{
"curr": "Ohio_\"Heartbeat_Bill\"",
"n": 11,
"prev": "other-internal",
"type": "external"
},
...
И так далее.Файл размером 1,3 МБ, потому что я удалил некоторые из самых больших примеров.
Я попробовал команду curl:
cat test.json |jq -c '. [] |{"индекс": {}}, .'|curl -XPOST localhost: 9200 / _bulk --data-binary @ -
и
curl -s -XPOST localhost: 9200 / _bulk --data-binary @test.json
и
написать "{" index ": {}}" в начале документа
Я такжепробовал:
curl -XPUT http://localhost:9200/wiki -d '
{
"mappings" : {
"_default_" : {
"properties" : {
"curr" : {"type": "string"},
"n" : {"type": "integer"},
"prev" : {"type": "string"},
"type" : {"type": "string"}
}
}
}
}
';
Но я всегда получаю эту ошибку:
{"error": "заголовок Content-Type [application / x-www-form-urlencoded] не являетсяподдерживается "," status ": 406}
Или когда я использую:
curl localhost: 9200 / wiki -H" Тип содержимого: application / json "-X POST -d @ test.json
Я получаю:
{"error": "Неверный HTTP-метод для uri [/ wiki] и метод [POST],позволено: [GET, HEAD, DELETE, PUT] "," status ": 405}
И когда я заменяю" wiki "на" _bulk ", как и во всех примерах, кажется, есть что-то общее,тогда я получаю:
{"error": {"root_cause": [{"type": "security_exception", "reason": "отсутствует токен аутентификации для запроса REST [/ _bulk»] "," header ": {" WWW-Authenticate ":" Basic realm = \ "security \" charset = \ "UTF-8 \" "}}]," type ":" security_exception "," reason ":"отсутствует токен аутентификации для запроса REST [/ _bulk] "," header ": {" WWW-Authenticate ":" Basic realm = \ "security \" charset = \ "UTF-8 \" "}}," status ": 401
У меня также есть скопированный и скорректированный, насколько я понял, файл conf в Kibana-Logstash-Pipeline, например:
input
{
file
{
codec => multiline
{
pattern=> '^\{'
negate=> true
what=> previous
}
path => ["/home/user/docker-elastic/examples/pretty.json"]
start_position => "beginning"
sincedb_path => "/dev/null"
exclude => "*.gz"
}
}
filter
{
mutate
{
replace => [ "message", "%{message}}" ]
gsub => [ 'message','\n','']
}
if [message] =~ /^{.*}$/
{
json { source => message }
}
}
output
{
elasticsearch {
protocol => "http"
codec => json
host => "localhost"
index => "wiki_json"
embedded => true
}
stdout { codec => rubydebug }
}
Но когда я нажимаю «создать и развернуть», ничего не происходит.
Итак, я попробовал некоторые примеры, но, как я уже сказал, я не до конца их понимаю и поэтому испытываю проблемы с передачей своих данных в Кибану.Я написал Logstash и ElasticSearch, потому что я бы тоже хотел передать данные, используя их.
Может кто-нибудь объяснить мне, как я могу передать эти данные напрямую, без изменения файла вручную?Во многих ответах говорилось, что данные не могут быть переданы в структуре, которую я имею, но должны быть «одна строка, один вход» - только.Но я не могу вручную изменить весь файл, содержащий почти 40000 данных, и я не хотел бы писать для него скрипт на python ..
Может быть, есть инструмент или что-то еще?Или, может быть, я просто слишком глуп, чтобы понять синтаксис, и делаю что-то не так?
Любая помощь приветствуется!Заранее спасибо!