Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> ฐานข้อมูล

การใช้ Logstash เพื่อโหลดข้อมูล CSV ลงใน Elasticsearch

เผยแพร่ครั้งแรกเมื่อวันที่ 10 กันยายน 2015 ที่ ObjectRocket.com/blog

คุณมีอินสแตนซ์ Elasticsearch® ใหม่ล่าสุดหรือไม่ แต่ข้อมูลที่เป็นประโยชน์ทั้งหมดที่คุณต้องการค้นหาอยู่ใน CSV ไฟล์?ไม่มีปัญหา. Logstash® ทำให้การเปลี่ยนข้อมูลเกือบทั้งหมดเป็นสิ่งที่ค้นหาได้ง่ายในดัชนี Elasticsearch

การใช้ Logstash เพื่อโหลดข้อมูล CSV ลงใน 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