মূলত ১০ সেপ্টেম্বর, ২০১৫-এ ObjectRocket.com/blog-এ প্রকাশিত
আপনার কাছে একটি নতুন Elasticsearch® ইনস্ট্যান্স আছে, কিন্তু আপনার সব উপকারী ডেটা যা আপনি খুঁজতে চান সেগুলো একটি CSV ফাইলে আছে? কোনো সমস্যা নেই। Logstash® প্রায় যেকোনো ডেটাকে Elasticsearch ইন্ডেক্সে সহজে সার্চযোগ্য বানাতে পারে।
শুরু করতে, আপনাকে কিছু ডেটা এবং এই উদাহরণগুলি ব্যবহারের জন্য 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" এই কাজের জন্য যেকোনো 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 এখনও ফাইলের ডেটা সম্পর্কে কিছুই জানে না—আপনাকে ফরম্যাট এবং বিভিন্ন ফিল্ড কীভাবে হ্যান্ডল করতে হবে তার rész নির্দিষ্ট করতে হবে:
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-ফরম্যাটেড তারিখ রয়েছে যাতে Elasticsearch বুঝতে পারে এটি একটি সাধারণ স্ট্রিং নয়। চূড়ান্ত, এটি TempOut মানকে একটি ফ্লোটিং-পয়েন্ট নম্বরে রূপান্তর করতে mutate ফাংশন ব্যবহার করে।
এখন, 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 ৭৫-এর চেয়ে বড় (Tempout:>75) ডকুমেন্ট খুঁজতে, মানব পাঠযোগ্য ফরম্যাটে ফরম্যাট করুন (pretty), এবং প্রতি শার্ডে একটির চেয়ে বেশি ফলাফল ফেরত দেবেন না (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 আপনার আশেপাশে পড়ে যেকোনো ডেটাকে এমন কিছুতে রূপান্তর করার জন্য একটি চমৎকার সুইস আর্মি নাইফ যা আপনি Elasticsearch-এ সহজে খেলতে পারেন, তাই মজা করুন!
www.rackspace.com ভিজিট করুন এবং Sales Chat-এ ক্লিক করুন কথা বলা শুরু করতে। Feedback ট্যাব ব্যবহার করুন যেকোনো মন্তব্য বা প্রশ্নের জন্য।
The Rackspace Cloud Terms of Service দেখতে এখানে ক্লিক করুন।