เผยแพร่ครั้งแรกเมื่อวันที่ 10 กันยายน 2015 ที่ ObjectRocket.com/blog
คุณมีอินสแตนซ์ Elasticsearch® ใหม่ล่าสุดหรือไม่ แต่ข้อมูลที่เป็นประโยชน์ทั้งหมดที่คุณต้องการค้นหาอยู่ใน CSV ไฟล์?ไม่มีปัญหา. Logstash® ทำให้การเปลี่ยนข้อมูลเกือบทั้งหมดเป็นสิ่งที่ค้นหาได้ง่ายในดัชนี Elasticsearch
ในการเริ่มต้น คุณต้องมีข้อมูลและสภาพแวดล้อมที่คล้ายกับ Unix® เพื่อใช้ตัวอย่างเหล่านี้ Windows® ทำงานได้ดีโดยมีการปรับเปลี่ยนเล็กน้อย ในกรณีนี้ เราต้องการส่งออกข้อมูลจาก Davis Vantage Pro2® ของเรา weatherstation ใน .CSV
และสร้างดัชนีใหม่ด้วย
เราเริ่มต้นด้วยสองสามล้านบรรทัดที่คล้ายกันนี้ ซึ่งจัดเก็บไว้ในไฟล์ในเครื่อง:
$ head -3 /home/erik/weather.csv
HumOut,TempIn,DewPoint,HumIn,WindDir,RainMonth,WindSpeed,RainDay,BatteryVolts,WindChill,Pressure,time,TempOut,WindSpeed10Min,RainRate
76,78.0,78.227017302825,44,109,2.0,2,0.0,1.236328125,90.87261657090625,29.543,2015-06-18T17:49:29Z,86.5,1,0.0
76,78.0,78.227017302825,44,107,2.0,2,0.0,1.236328125,90.87261657090625,29.543,2015-06-18T17:49:45Z,86.5,1,0.0
76,78.0,78.32406784157725,44,107,2.0,0,0.0,1.236328125,90.83340000000001,29.543,2015-06-18T17:50:00Z,86.59999999999999,1,0.0
หมายเหตุ: เพื่อให้การทดสอบนี้ได้ผล คุณต้องมีแหล่งข้อมูลอย่างน้อยหนึ่งแหล่ง
หลังจากที่คุณมีข้อมูลแล้ว คุณสามารถเริ่มต้นได้ ขั้นแรก ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง Java เวอร์ชันแล้ว:
$ java -version
openjdk version "1.8.0_51"
Java Virtual Machine . ใดๆ (JVM) ใช้ได้กับสิ่งนี้ ไม่ว่าจะเป็น OpenJDK®, Oracle® และอื่นๆ
$ curl -O https://download.elastic.co/logstash/logstash/logstash-1.5.4.tar.gz
$ tar xfz logstash-1.5.4.tar.gz
$ cd logstash-1.5.4
$ mkdir conf
ถึงเวลาสร้างไฟล์กำหนดค่าแล้ว
ขั้นแรก ให้กำหนด input
ส่วนที่คุณบอก Logstash หาข้อมูลได้ที่ไหน:
input {
file {
path => "/home/erik/weather.csv"
start_position => beginning
}
}
นี่เป็นเพียงการบอก Logstash จะดูได้ที่ไหนและเราต้องการโหลดจากจุดเริ่มต้นของไฟล์ ต่อไป เราจำเป็นต้องมีตัวกรอง—Logstash มีปลั๊กอินตัวกรองจำนวนมากที่พร้อมใช้งานตามค่าเริ่มต้น ตัวอย่างนี้ใช้คู่เพื่อแยกวิเคราะห์ข้อมูล จนถึงตอนนี้ Logstash ไม่รู้อะไรเลยเกี่ยวกับข้อมูลในไฟล์ คุณต้องระบุรูปแบบและข้อมูลเฉพาะอื่นๆ เกี่ยวกับวิธีการจัดการฟิลด์ต่างๆ:
filter {
csv {
columns => [
"HumOut",
"TempIn",
"DewPoint",
"HumIn",
"WindDir",
"RainMonth",
"WindSpeed",
"RainDay",
"BatteryVolts",
"WindChill",
"Pressure",
"time",
"TempOut",
"WindSpeed10Min",
"RainRate"
]
separator => ","
remove_field => ["message"]
}
date {
match => ["time", "ISO8601"]
}
mutate {
convert => ["TempOut", "float"]
}
}
คอลัมน์อธิบายได้ด้วยตนเอง แต่นี่เป็นรายละเอียดเพิ่มเติม ขั้นแรก ตัวอย่างจะลบ message
ฟิลด์ ซึ่งเป็นรายการที่มีทั้งแถว คุณไม่จำเป็นต้องใช้เพราะคุณกำลังค้นหาคุณลักษณะเฉพาะ ประการที่สอง เป็นการระบุว่า time
ฟิลด์มี ISO8601-formatted date
เพื่อให้ Elasticsearch รู้ว่าไม่ใช่สตริงธรรมดา สุดท้ายมันใช้ฟังก์ชัน mutate เพื่อแปลง TempOut
มีค่าเป็นเลขทศนิยม
ตอนนี้ ใช้รหัสต่อไปนี้เพื่อนำเข้าข้อมูลและแยกวิเคราะห์ข้อมูลหลังจากจัดเก็บไว้ใน Elasticsearch:
output {
elasticsearch {
protocol => "https"
host => ["iad1-20999-0.es.objectrocket.com:20999"]
user => "erik"
password => "mysupersecretpassword"
action => "index"
index => "eriks_weather_index"
}
stdout { }
}
สุดท้าย กำหนดค่าโฮสต์และพอร์ต ข้อมูลการตรวจสอบสิทธิ์ และชื่อของดัชนีที่จะจัดเก็บ
ตกลง มาเริ่มกันเลย หากใช้งานได้ ควรมีลักษณะดังนี้:
$ bin/logstash -f conf/logstash.conf -v
Logstash startup completed
มันทำงาน? ถาม Elasticsearch:
$ curl -u erik:mysupersecretpassword 'https://iad1-20999-0.es.objectrocket.com:20999/_cat/indices?v'
health status index pri rep docs.count store.size pri.store.size
green open eriks_weather_index 5 1 294854 95.8mb 48.5mb
เอกสารอยู่ที่นั่น โปรดสอบถาม:
$ curl -u erik:mysupersecretpassword 'https://iad1-20999-0.es.objectrocket.com:20999/eriks_weather_index/_search?q=TempOut:>75&pretty&terminate_after=1'
สิ่งนี้บอกให้ Elasticsearch ค้นหาเอกสารด้วย TempOut
มากกว่า 75 (Tempout:>75
) เพื่อจัดรูปแบบสำหรับการบริโภคของมนุษย์ (สวย) และส่งคืนผลลัพธ์ไม่เกินหนึ่งรายการต่อชาร์ด (terminate_after=1
). มันควรจะส่งคืนสิ่งนี้:
{
"took" : 4,
"timed_out" : false,
"terminated_early" : true,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 5,
"max_score" : 1.0,
"hits" : [ {
"_index" : "eriks_weather_index",
"_type" : "logs",
"_id" : "AU-yXZJIJb3HnhKvpdNC",
"_score" : 1.0,
"_source":{"@version":"1","@timestamp":"2015-06-22T10:24:23.000Z","host":"kibana","path":"/home/erik/weather.csv","HumOut":"86","TempIn":"79.7","DewPoint":"70.65179649787358","HumIn":"46","WindDir":"161","RainMonth":"2.7","WindSpeed":"0","RainDay":"0.36","BatteryVolts":"1.125","WindChill":"82.41464999999999","Pressure":"29.611","time":"2015-06-22T10:24:23Z","TempOut":75.1,"WindSpeed10Min":"0","RainRate":"0.0"}
} ]
}
}
ความสำเร็จ. Logstash เป็น Swiss Army Knife ที่ยอดเยี่ยมสำหรับเปลี่ยนข้อมูลใดๆ ที่คุณวางไว้ให้เป็นสิ่งที่คุณสามารถเล่นได้อย่างง่ายดายใน Elasticsearch ดังนั้นขอให้สนุก!
ไปที่ www.rackspace.com และคลิก แชทขาย เพื่อเริ่มต้น cinversation ใช้ คำติชม เพื่อแสดงความคิดเห็นหรือถามคำถาม
คลิกที่นี่เพื่อดูข้อกำหนดในการให้บริการของ Rackspace Cloud