ปัญหา logstash กับไฟล์อินพุต json

ฉันมี json ต่อไปนี้ในไฟล์ -

{
"foo":"bar",
"spam" : "eggs"
},
{
"css":"ddq",
"eeqw": "fewq"
}

และไฟล์ conf ต่อไปนี้ -

input { 
file
{ 
   path => "/opt/logstash-1.4.2/bin/sam.json"
   type => "json"
   codec => json_lines
   start_position =>"beginning"
 }
}
output { stdout {  codec => json  } }

แต่เมื่อฉันวิ่ง

./logstash -f sample.conf

ฉันไม่ได้รับผลลัพธ์ใด ๆ ใน stdout

แต่เมื่อฉันไม่ให้ json เป็นตัวแปลงสัญญาณและให้ประเภท => "core2" ดูเหมือนว่าจะใช้งานได้ ใครรู้บ้างว่าฉันจะแก้ไขมันให้ทำงานกับประเภท json ได้อย่างไร

ปัญหาอื่นคือมันให้ผลลัพธ์ต่อไปนี้กับฉันเมื่อมันให้ stdout-

{"message":"{","@version":"1","@timestamp":"2015-07-15T02:02:02.653Z","type":"core2","host":"sjagannath","path":"/opt/logstash-1.4.2/bin/sam.json"}{"message":"\"foo\":\"bar\", ","@version":"1","@timestamp":"2015-07-15T02:02:02.654Z","type":"core2","host":"sjagannath","path":"/opt/logstash-1.4.2/bin/sam.json"}{"message":"\"spam\" : \"eggs\" ","@version":"1","@timestamp":"2015-07-15T02:02:02.655Z","type":"core2","host":"sjagannath","path":"/opt/logstash-1.4.2/bin/sam.json"}{"message":"},","@version":"1","@timestamp":"2015-07-15T02:02:02.655Z","type":"core2","host":"sjagannath","path":"/opt/logstash-1.4.2/bin/sam.json"}{"message":"{ ","@version":"1","@timestamp":"2015-07-15T02:02:02.655Z","type":"core2","host":"sjagannath","path":"/opt/logstash-1.4.2/bin/sam.json"}{"message":"\"css\":\"ddq\", ","@version":"1","@timestamp":"2015-07-15T02:02:02.656Z","type":"core2","host":"sjagannath","path":"/opt/logstash-1.4.2/bin/sam.json"}{"message":"\"eeqw\": \"fewq\"","@version":"1","@timestamp":"2015-07-15T02:02:02.656Z","type":"core2","host":"sjagannath","path":"/opt/logstash-1.4.2/bin/sam.json"}{"message":"}","@version":"1","@timestamp":"2015-07-15T02:02:02.656Z","type":"core2","host":"sjagannath","path":"/opt/logstash-1.4.2/bin/sam.json"}{"message":"","@version":"1","@timestamp":"2015-07-15T02:02:02.656Z","type":"core2","host":"sjagannath","path":"/opt/logstash-1.4.2/bin/sam.json"}

ฉันต้องการทราบว่าสามารถแยกวิเคราะห์วิธีที่ถูกต้องด้วยคู่ค่าคีย์ในไฟล์อินพุตของฉันได้อย่างไร


person sharat    schedule 15.07.2015    source แหล่งที่มา


คำตอบ (2)


ฉันพบสิ่งนี้ และแก้ไขให้เหมาะกับวัตถุประสงค์ของคุณ การกำหนดค่าต่อไปนี้ควรทำสิ่งที่คุณต้องการอย่างแน่นอน:

input {   
file     {
    codec => multiline
    {
        pattern => "^\}"
        negate => true
        what => previous               
    }
    path => ["/absoute_path/json.json"]
    start_position => "beginning"
    sincedb_path => "/dev/null"
}
}

filter {
mutate    {
    replace => [ "message", "%{message}}" ]
    gsub => [ "message","\n",""]
    gsub => [ "message","},",""]
}
if [message] =~ /^{.*}$/     {
    json { source => message }
}
}

ฉันลองใช้ json ที่คุณให้มาและผลลัพธ์ที่ได้คือสองเหตุการณ์ เริ่มต้นด้วย foo = bar และ spam = eggs ที่สองด้วย css = ddq และ eeqw = fewq

person hurb    schedule 15.07.2015
comment
ฉันทำงานบางส่วน แต่ฉันสามารถอ่านได้เฉพาะข้อมูล json แรกเท่านั้นไม่ใช่ข้อมูลที่สอง (ด้วย css) มีอะไรหายไปหรือเปล่า? - person sharat; 17.07.2015
comment
อาจไม่มีการขึ้นบรรทัดใหม่ในตอนท้ายของไฟล์ json ของคุณ Logstash จะไม่อ่านบรรทัดสุดท้ายจนกว่าจะขึ้นบรรทัดใหม่เสร็จ - person hurb; 17.07.2015
comment
โอเค สมมติว่าฉันไม่มีตัวคั่นด้วยลูกน้ำ ตัวกรองจะมีลักษณะอย่างไร? ฉันลอง gsub =› [ message,},] แต่มันใช้งานไม่ได้ - person sharat; 20.07.2015
comment
ลองใช้ gsub ตัวที่สอง: gsub => [ "message","}{","{"] ควรอ่านข้อมูลของคุณอย่างถูกต้องโดยไม่มีตัวคั่นด้วยเครื่องหมายจุลภาค - person hurb; 20.07.2015

ตามความเข้าใจของฉัน คุณต้องการวางเอกสาร son ที่สมบูรณ์ของคุณในบรรทัดเดียวหากคุณต้องการใช้ตัวแปลงสัญญาณ json_lines:

{"foo":"bar","spam" : "eggs"}
{"css":"ddq","eeqw": "fewq"}

ในกรณีของคุณ คุณมีปัญหากับโครงสร้างเนื่องจากคุณมี ',' ระหว่างอ็อบเจ็กต์ son ไม่ใช่วิธีที่ง่ายที่สุดในการจัดการกับมัน ดังนั้นถ้าเป็นไปได้ให้เปลี่ยนแหล่งที่มาเป็นตัวอย่างของฉัน หากเป็นไปไม่ได้ วิธีการหลายบรรทัดอาจช่วยคุณได้ ตรวจสอบข้อมูลนี้เพื่อใช้อ้างอิง: input json to logstash - config problems?

person Jettro Coenradie    schedule 15.07.2015
comment
ที่จริงแล้ว การเปลี่ยนแหล่งที่มาอาจเป็นแนวทางหนึ่ง อย่างไรก็ตาม หากเป็นไปไม่ได้ โปรดดูคำตอบของฉัน - person hurb; 15.07.2015