কম্পিউটার

ইলাস্টিকসার্চে CSV ডেটা লোড করতে Logstash ব্যবহার করে

মূলত 10 সেপ্টেম্বর, 2015, ObjectRocket.com/blog-এ প্রকাশিত হয়

আপনার কাছে কি একেবারে নতুন Elasticsearch® উদাহরণ আছে, কিন্তু আপনার সমস্ত দরকারী ডেটা যা আপনি অনুসন্ধান করতে চান তা CSV-তে থাকে ফাইল?কোন সমস্যা নেই। Logstash® ইলাস্টিকসার্চ ইনডেক্সে প্রায় যেকোনো ডেটাকে সহজেই অনুসন্ধানযোগ্য কিছুতে পরিণত করে।

ইলাস্টিকসার্চে CSV ডেটা লোড করতে Logstash ব্যবহার করে

শুরু করার জন্য, এই উদাহরণগুলি ব্যবহার করার জন্য আপনার কিছু ডেটা এবং Unix® এর মতো একটি পরিবেশ প্রয়োজন। Windows® কিছু ছোটখাটো সমন্বয়ের সাথে ভাল কাজ করে। এই ক্ষেত্রে, আমরা আমাদের Davis Vantage Pro2® থেকে ডেটা রপ্তানি করতে চেয়েছিলাম আবহাওয়া স্টেশন, .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"

যেকোনো জাভা ভার্চুয়াল মেশিন (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 ফাইলের ডেটা সম্পর্কে কিছুই জানে না—আপনাকে ফর্ম্যাট এবং বিভিন্ন ক্ষেত্রগুলি কীভাবে পরিচালনা করতে হয় সে সম্পর্কে অন্য কোনও নির্দিষ্টতা উল্লেখ করতে হবে:

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 রয়েছে যাতে ইলাস্টিক সার্চ জানে এটি একটি সাধারণ স্ট্রিং নয়। অবশেষে, এটি TempOut রূপান্তর করতে মিউটেট ফাংশন ব্যবহার করে একটি ফ্লোটিং-পয়েন্ট সংখ্যায় মান।

এখন, ডেটা ইনজেস্ট করতে নিম্নলিখিত কোডটি ব্যবহার করুন এবং ইলাস্টিকসার্চে সংরক্ষণ করার পরে এটি পার্স করুন:

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

এটা কি কাজ করেছিল? ইলাস্টিক সার্চকে জিজ্ঞাসা করুন:

$ 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'

এটি ইলাস্টিকসার্চকে 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 হল একটি দুর্দান্ত সুইস আর্মি নাইফ যা আপনার কাছে থাকা যেকোনো ডেটাকে এমন কিছুতে পরিণত করার জন্য যা আপনি সহজেই ইলাস্টিকসার্চের মধ্যে খেলতে পারেন, তাই মজা করুন!

www.rackspace.com এ যান এবং সেলস চ্যাট এ ক্লিক করুন সিনভার্সেশন শুরু করতে। প্রতিক্রিয়া ব্যবহার করুন৷ কোনো মন্তব্য করতে বা প্রশ্ন করতে ট্যাব করুন।

র্যাকস্পেস ক্লাউড পরিষেবার শর্তাবলী দেখতে এখানে ক্লিক করুন।


  1. পাইথন - বোকেহ ব্যবহার করে ডেটা ভিজ্যুয়ালাইজেশন

  2. স্বচ্ছ ডেটা এনক্রিপশন ব্যবহার করে একটি ওরাকল ডাটাবেস সুরক্ষিত করুন

  3. শীর্ষ পাঁচটি ইলাস্টিকসার্চ ব্যবহারের ক্ষেত্রে

  4. Filebeat এবং Elasticsearch Ingest Pipelines দিয়ে csv ফাইল পার্স করা হচ্ছে