[英]How to import a big JSON-file to a Docker-swarm cluster with ELK stack?
基本上,我想將JSON數據導入到(Logstash-> ElasticSearch->)Kibana中,但是我是一個全新的人,並且陷入了不同的方法,我無法完全理解並得到錯誤或沒有輸出。
我得到的是一個文件test.json,其中包含以下格式的Wikipedia-data:
{
"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.3Mb,因為我刪除了一些最大的示例。
我嘗試了curl命令:
貓test.json | jq -c'。[] | {“ index”:{}},'。 | curl -XPOST本地主機:9200 / _bulk --data-binary @-
和
curl -s -XPOST本地主機: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"}
}
}
}
}
';
但是我總是會收到這個錯誤:
{“錯誤”:“不支持Content-Type標頭[application / x-www-form-urlencoded]”,“狀態”:406}
或當我使用時:
curl本地主機:9200 / wiki -H“內容類型:應用程序/ json” -X POST -d @ test.json
我得到:
{“錯誤”:“ uri [/ wiki]和方法[POST]的HTTP方法不正確,允許:[GET,HEAD,DELETE,PUT]”,“狀態”:405}
當我將“ wiki”替換為“ _bulk”時,就像所有示例似乎都具有共同點一樣,那么我得到:
{“錯誤”:{“ root_cause”:[{“類型”:“ security_exception”,“原因”:“缺少REST請求的認證令牌[/ _bulk]”,“標題”:{“ WWW-Authenticate”:“基本realm = \\“ security \\” charset = \\“ UTF-8 \\”“}}],” type“:” security_exception“,” reason“:”缺少REST請求[/ _bulk]的身份驗證令牌“,” header“: {“ WWW-Authenticate”:“基本領域= \\”安全\\“字符集= \\” UTF-8 \\“”}},“狀態”:401
我也盡可能地復制粘貼並調整了我在Kibana-Logstash-Pipeline中的conf文件,如下所示:
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 }
}
但是,當我單擊“創建並部署”時,什么也沒有發生。
因此,我嘗試了一些示例,但是就像我說的那樣-我不完全理解它們,因此很難將數據發送到Kibana。 我已經編寫了Logstash和ElasticSearch,因為我也想通過使用它們來傳遞數據。
有人可以向我解釋一下,如何在不手動更改文件的情況下直接傳遞此數據嗎? 許多回答說,數據無法在我擁有的結構中傳遞,而只能是“一行,一個輸入”。 但是我不能用手更改將近40000個數據的整個文件,而且我不想為此編寫一個python-script。
也許有什么工具? 或者,也許我太愚蠢,無法理解語法並且做錯了什么?
任何幫助表示贊賞! 先感謝您!
就像@Ian Kemp在評論部分回答的一樣,問題是我使用POST而不是PUT。 之后,我收到一條錯誤消息,提示身份驗證失敗,因此我用谷歌搜索並得到了最終答案:
curl elastic:changeme @ localhost:9200 / wiki -H“內容類型:application / json” -X PUT -d @ test.json
與文件中的索引行。 這就是我最終如何在Elasticsearch中獲得數據的結構:)非常感謝Ian Kemp!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.