मूल रूप से 10 सितंबर, 2015 को 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 को फ़ाइल में डेटा के बारे में कुछ नहीं पता—आपको प्रारूप और विभिन्न फ़ील्ड को कैसे संभालना है, इस पर किसी भी अन्य विशिष्टता को निर्दिष्ट करने की आवश्यकता है:
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 75 से अधिक (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 पर जाएं और बातचीत शुरू करने के लिए सेल्स चैट पर क्लिक करें। टिप्पणी करने या प्रश्न पूछने के लिए फीडबैक टैब का उपयोग करें।
Rackspace Cloud की सेवा शर्तें देखने के लिए यहां क्लिक करें।