Computer >> Máy Tính >  >> Lập trình >> Cơ sở dữ liệu

Sử dụng Logstash để tải dữ liệu CSV vào Elasticsearch

Được xuất bản lần đầu vào ngày 10 tháng 9 năm 2015, tại ObjectRocket.com/blog

Bạn có phiên bản Elasticsearch® hoàn toàn mới, nhưng tất cả dữ liệu hữu ích của bạn mà bạn muốn tìm kiếm đều nằm trong CSV không có vấn đề gì. Logstash® giúp biến hầu hết mọi dữ liệu thành thứ gì đó có thể dễ dàng tìm kiếm được trong chỉ mục Elasticsearch.

Sử dụng Logstash để tải dữ liệu CSV vào Elasticsearch

Để bắt đầu, bạn cần một số dữ liệu và môi trường tương tự như Unix® để sử dụng các ví dụ này. Windows® hoạt động tốt với một số điều chỉnh nhỏ. Trong trường hợp này, chúng tôi muốn xuất dữ liệu từ Davis Vantage Pro2® của chúng tôi phong hóa, trong .CSV và tạo một chỉ mục mới với nó.

Chúng tôi bắt đầu với vài triệu dòng tương tự như những dòng này, được lưu trữ trong một tệp cục bộ:

$ 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

Lưu ý: Để thử nghiệm này hoạt động, bạn cần có ít nhất một nguồn dữ liệu.

Sau khi có dữ liệu, bạn có thể bắt đầu. Trước tiên, hãy đảm bảo rằng bạn đã cài đặt phiên bản Java:

$ java -version
openjdk version "1.8.0_51"

Bất kỳ Máy ảo Java nào (JVM) phù hợp với điều này — OpenJDK®, Oracle®, v.v.

$ 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

Bây giờ, đã đến lúc tạo tệp cấu hình.

Đầu tiên, xác định một input phần mà bạn nói với Logstash tìm dữ liệu ở đâu:

input {
    file {
        path => "/home/erik/weather.csv"
        start_position => beginning

    }
}

Điều này chỉ cho Logstash nơi để xem và chúng tôi muốn tải từ đầu tệp. Tiếp theo, chúng ta cần một bộ lọc — Logstash có sẵn rất nhiều plugin bộ lọc theo mặc định. Ví dụ này sử dụng một vài để phân tích cú pháp dữ liệu. Cho đến nay, Logstash không biết gì về dữ liệu trong tệp — bạn cần chỉ định định dạng và bất kỳ chi tiết cụ thể nào khác về cách xử lý các trường khác nhau:

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"]
    }
}

Các cột này có thể tự giải thích, nhưng sau đây là chi tiết hơn. Đầu tiên, ví dụ loại bỏ message trường, là một mục nhập chứa toàn bộ hàng. Bạn sẽ không cần nó vì bạn đang tìm kiếm các thuộc tính cụ thể. Thứ hai, nó chỉ định rằng time trường chứa ISO8601-formatted date để Elasticsearch biết đó không phải là một chuỗi đơn giản. Cuối cùng, nó sử dụng hàm mutate để chuyển đổi TempOut giá trị thành một số dấu phẩy động.

Bây giờ, hãy sử dụng mã sau để nhập dữ liệu và phân tích cú pháp sau khi lưu trữ trong Elasticsearch:

output {
    elasticsearch {
        protocol => "https"
        host => ["iad1-20999-0.es.objectrocket.com:20999"]
        user => "erik"
        password => "mysupersecretpassword"
        action => "index"
        index => "eriks_weather_index"
    }
    stdout { }
}

Cuối cùng, hãy định cấu hình máy chủ lưu trữ và cổng, dữ liệu xác thực và tên của chỉ mục để lưu trữ nó.

Được rồi, hãy khởi động nó. Nếu nó đang hoạt động, nó sẽ trông giống như sau:

$ bin/logstash -f conf/logstash.conf -v
Logstash startup completed

Nó đã hoạt động? Hỏi 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

Các tài liệu ở đó, vì vậy hãy truy vấn một tài liệu:

$ curl -u erik:mysupersecretpassword 'https://iad1-20999-0.es.objectrocket.com:20999/eriks_weather_index/_search?q=TempOut:>75&pretty&terminate_after=1'

Điều này yêu cầu Elasticsearch tìm tài liệu bằng TempOut lớn hơn 75 (Tempout:>75 ), để định dạng nó cho tiêu dùng của con người (khá) và để trả về không nhiều hơn một kết quả cho mỗi phân đoạn (terminate_after=1 ). Nó sẽ trả về một cái gì đó như thế này:

{
  "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"}
    } ]
   } 
}

Thành công. Logstash là một con dao Quân đội Thụy Sĩ tuyệt vời để biến bất kỳ dữ liệu nào bạn có thành thứ mà bạn có thể dễ dàng chơi trong Elasticsearch, vì vậy hãy vui vẻ!

Truy cập www.rackspace.com và nhấp vào Trò chuyện bán hàng để bắt đầu cuộc trò chuyện. Sử dụng Phản hồi để đưa ra bất kỳ nhận xét hoặc đặt câu hỏi nào.

Nhấp vào đây để xem Điều khoản dịch vụ của Rackspace Cloud.