किबाना - सैंपल डेटा लोड हो रहा है

हमने देखा है कि लॉगस्टैश से इलास्टिक्सर्च में डेटा कैसे अपलोड किया जाता है। हम यहां लॉगस्टैश और इलास्टिक्स खोज का उपयोग करके डेटा अपलोड करेंगे। लेकिन उस डेटा के बारे में जिसमें तारीख, देशांतर और अक्षांश हैं जिनका हमें उपयोग करने की आवश्यकता है, हम आगामी अध्यायों में सीखेंगे। हम यह भी देखेंगे कि अगर हमारे पास CSV फ़ाइल नहीं है, तो सीधे किबाना में डेटा कैसे अपलोड करें।

इस अध्याय में, हम निम्नलिखित विषयों को शामिल करेंगे -

  • लॉगस्टैश अपलोड डेटा का उपयोग करना, इलास्टिक्स खोज में दिनांक, देशांतर और अक्षांश क्षेत्र
  • बल्क डेटा अपलोड करने के लिए देव टूल्स का उपयोग करना

एलिस्टिक्स खोज में फ़ील्ड वाले डेटा के लिए लॉगस्टैश अपलोड का उपयोग करना

हम सीएसवी प्रारूप के रूप में डेटा का उपयोग करने जा रहे हैं और कागले डॉट कॉम से लिया गया है जो डेटा के साथ काम करता है जिसे आप विश्लेषण के लिए उपयोग कर सकते हैं।

यहां उपयोग की जाने वाली डेटा होम मेडिकल साइट Kaggle.com से ली गई है।

सीएसवी फ़ाइल के लिए निम्नलिखित क्षेत्र उपलब्ध हैं -

["Visit_Status","Time_Delay","City","City_id","Patient_Age","Zipcode","Latitude","Longitude",
"Pathology","Visiting_Date","Id_type","Id_personal","Number_Home_Visits","Is_Patient_Minor","Geo_point"]

Home_visits.csv इस प्रकार है -

लॉगस्टैश के साथ प्रयोग करने के लिए निम्नलिखित फ़ाइल है -

input {
   file {
      path => "C:/kibanaproject/home_visits.csv"
      start_position => "beginning"
      sincedb_path => "NUL"
   }
}
filter {
   csv {
      separator => ","
      columns =>
      ["Visit_Status","Time_Delay","City","City_id","Patient_Age",
      "Zipcode","Latitude","Longitude","Pathology","Visiting_Date",
      "Id_type","Id_personal","Number_Home_Visits","Is_Patient_Minor","Geo_point"]
   }
   date {
      match => ["Visiting_Date","dd-MM-YYYY HH:mm"]
      target => "Visiting_Date"
   }
   mutate {convert => ["Number_Home_Visits", "integer"]}
   mutate {convert => ["City_id", "integer"]}
   mutate {convert => ["Id_personal", "integer"]}
   mutate {convert => ["Id_type", "integer"]}
   mutate {convert => ["Zipcode", "integer"]}
   mutate {convert => ["Patient_Age", "integer"]}
   mutate {
      convert => { "Longitude" => "float" }
      convert => { "Latitude" => "float" }
   }
   mutate {
      rename => {
         "Longitude" => "[location][lon]"
         "Latitude" => "[location][lat]"
      }
   }
}
output {
   elasticsearch {
      hosts => ["localhost:9200"]
      index => "medicalvisits-%{+dd.MM.YYYY}"
   }
   stdout {codec => json_lines }
}

डिफ़ॉल्ट रूप से, लॉगस्टैश सब कुछ इलास्टिक्स खोज में स्ट्रिंग के रूप में अपलोड करने पर विचार करता है। अपनी CSV फ़ाइल को इंसिड करें, दिनांक फॉर्मेट प्राप्त करने के लिए आपको तारीख फ़ील्ड की आवश्यकता है।

For date field −

date {
   match => ["Visiting_Date","dd-MM-YYYY HH:mm"]
   target => "Visiting_Date"
}

भू स्थान के मामले में, इलास्टिक्स खोज को उसी तरह समझा जाता है -

"location": {
   "lat":41.565505000000044,
   "lon": 2.2349995750000695
}

इसलिए हमें यह सुनिश्चित करने की आवश्यकता है कि हमारे पास लॉरिट्यूड और लैटीट्यूड है जिस प्रारूप में इलास्टिक्स की जरूरत है। इसलिए पहले हमें देशांतर और अक्षांश को तैरने में बदलने की आवश्यकता है और बाद में इसका नाम बदल दिया जाए ताकि यह भाग के रूप में उपलब्ध होlocation json ऑब्जेक्ट के साथ lat तथा lon। उसी के लिए कोड यहाँ दिखाया गया है -

mutate {
      convert => { "Longitude" => "float" }
      convert => { "Latitude" => "float" }
   }
mutate {
   rename => {
      "Longitude" => "[location][lon]"
      "Latitude" => "[location][lat]"
   }
}

फ़ील्ड को पूर्णांक में परिवर्तित करने के लिए, निम्नलिखित कोड का उपयोग करें -

mutate {convert => ["Number_Home_Visits", "integer"]}
mutate {convert => ["City_id", "integer"]}
mutate {convert => ["Id_personal", "integer"]}
mutate {convert => ["Id_type", "integer"]}
mutate {convert => ["Zipcode", "integer"]}
mutate {convert => ["Patient_Age", "integer"]}

एक बार फ़ील्ड्स का ध्यान रखने के बाद, इलास्टिक्स में डेटा अपलोड करने के लिए निम्न कमांड चलाएँ -

  • लॉगस्टैश बिन निर्देशिका के अंदर जाएं और निम्न कमांड चलाएं।
logstash -f logstash_homevisists.conf
  • एक बार जब आप नीचे दिखाए गए अनुसार इलास्टिसर्च में लॉगस्टैश गोपनीय फ़ाइल में उल्लिखित सूचकांक को देखना चाहिए -

अब हम अपलोड किए गए इंडेक्स के ऊपर इंडेक्स पैटर्न बना सकते हैं और विज़ुअलाइज़ेशन बनाने के लिए इसका आगे उपयोग कर सकते हैं।

Bulk Data Upload करने के लिए Dev Tools का उपयोग करना

हम Kibana UI से Dev Tools का उपयोग करने जा रहे हैं। देव टूल, एलिस्टिक्स खोज में लॉगस्टैश का उपयोग किए बिना डेटा अपलोड करने में सहायक है। देव उपकरण का उपयोग करके हम किबाणा में जो डेटा चाहते हैं, उसे पोस्ट, डाल, हटा सकते हैं।

इस खंड में, हम किबाना में ही नमूना डेटा लोड करने का प्रयास करेंगे। हम इसका उपयोग नमूना डेटा के साथ अभ्यास करने और किबाना की अच्छी समझ प्राप्त करने के लिए किबाना सुविधाओं के साथ खेलने के लिए कर सकते हैं।

आइए हम निम्नलिखित url से json डेटा लेते हैं और Kibana में समान अपलोड करते हैं। इसी तरह, आप किबाना के अंदर लोड किए जाने वाले किसी भी सैंपल के जोंस डेटा को आजमा सकते हैं।

इससे पहले कि हम नमूना डेटा अपलोड करना शुरू करें, हमें इंडेक्स के साथ जोंस डेटा का उपयोग करना होगा। जब हम इसे लॉगस्टैश का उपयोग करके अपलोड करते हैं, तो लॉगस्टैश इंडेक्स को जोड़ने के लिए ध्यान रखता है और उपयोगकर्ता को उन इंडेक्स के बारे में परेशान करने की आवश्यकता नहीं होती है जो कि इलास्टिसर्च द्वारा आवश्यक हैं।

सामान्य Json डेटा

[
   {"type":"act","line_id":1,"play_name":"Henry IV", 
   
   "speech_number":"","line_number":"","speaker":"","text_entry":"ACT I"},
   {"type":"scene","line_id":2,"play_name":"Henry IV",
   "speech_number":"","line_number":"","speaker":"","text_entry":"SCENE I.London. The palace."},
   {"type":"line","line_id":3,"play_name":"Henry IV",
   "speech_number":"","line_number":"","speaker":"","text_entry":
   "Enter KING HENRY, LORD JOHN OF LANCASTER, the 
   EARL of WESTMORELAND, SIR WALTER BLUNT, and others"}
]

किबाना के साथ प्रयोग किया जाने वाला जसन कोड निम्नानुसार अनुक्रमित होना चाहिए -

{"index":{"_index":"shakespeare","_id":0}}
{"type":"act","line_id":1,"play_name":"Henry IV", 
"speech_number":"","line_number":"","speaker":"","text_entry":"ACT I"}
{"index":{"_index":"shakespeare","_id":1}}
{"type":"scene","line_id":2,"play_name":"Henry IV",
"speech_number":"","line_number":"","speaker":"",
"text_entry":"SCENE I. London. The palace."}
{"index":{"_index":"shakespeare","_id":2}}
{"type":"line","line_id":3,"play_name":"Henry IV",
"speech_number":"","line_number":"","speaker":"","text_entry":
"Enter KING HENRY, LORD JOHN OF LANCASTER, the EARL 
of WESTMORELAND, SIR WALTER BLUNT, and others"}

ध्यान दें कि एक अतिरिक्त डेटा है जो कि jsonfile में जाता है -{"index":{"_index":"nameofindex","_id":key}}

किसी भी नमूना json फ़ाइल को elasticsearch के साथ संगत करने के लिए परिवर्तित करने के लिए, यहाँ हमारे पास php में एक छोटा कोड है जो उस प्रारूप में दिए गए json फ़ाइल को आउटपुट करेगा जो elasticsearch चाहता है -

PHP कोड

<?php
   $myfile = fopen("todo.json", "r") or die("Unable to open file!"); // your json
   file here
   $alldata = fread($myfile,filesize("todo.json"));
   fclose($myfile);
   $farray = json_decode($alldata);
   $afinalarray = [];
   $index_name = "todo";
   $i=0;
   $myfile1 = fopen("todonewfile.json", "w") or die("Unable to open file!"); //
   writes a new file to be used in kibana dev tool
   foreach ($farray as $a => $value) {
      $_index = json_decode('{"index": {"_index": "'.$index_name.'", "_id": "'.$i.'"}}');
      fwrite($myfile1, json_encode($_index));
      fwrite($myfile1, "\n");
      fwrite($myfile1, json_encode($value));
      fwrite($myfile1, "\n");
      $i++;
   }
?>

हमने todo json फ़ाइल से लिया है https://jsonplaceholder.typicode.com/todos और उस प्रारूप का उपयोग करने के लिए php कोड का उपयोग करें, जिसे हमें Kibana में अपलोड करना है।

नमूना डेटा लोड करने के लिए, नीचे दिखाए गए अनुसार उपकरण टैब खोलें -

हम अब ऊपर दिखाए गए अनुसार कंसोल का उपयोग करने जा रहे हैं। हम json डेटा लेंगे, जो हमें php कोड के माध्यम से चलाने के बाद मिला है।

Json डेटा अपलोड करने के लिए dev टूल्स में उपयोग की जाने वाली कमांड है -

POST _bulk

ध्यान दें कि हम जो इंडेक्स बना रहे हैं उसका नाम टूडू है

एक बार जब आप डेटा अपलोड किए गए हरे बटन पर क्लिक करते हैं, तो आप जांच कर सकते हैं कि सूचकांक बनाया गया है या नहीं यह इलास्टिसर्च में निम्नानुसार है -

आप निम्नानुसार देव उपकरण में ही जाँच कर सकते हैं -

Command −

GET /_cat/indices

यदि आप अपने सूचकांक में कुछ खोजना चाहते हैं: टूडू, आप नीचे दिखाए अनुसार कर सकते हैं -

Command in dev tool

GET /todo/_search

उपरोक्त खोज का आउटपुट निम्नानुसार है -

यह टूडिंडेक्स में मौजूद सभी रिकॉर्ड देता है। कुल रिकॉर्ड जो हमें मिल रहा है वह 200 है।

एक रिकॉर्ड टूडू इंडेक्स के लिए खोजें

हम निम्नलिखित कमांड का उपयोग कर सकते हैं -

GET /todo/_search
{
   "query":{
      "match":{
         "title":"delectusautautem"
      }
   }
}

हम उन रिकॉर्डों को प्राप्त करने में सक्षम हैं जो हमारे द्वारा दिए गए शीर्षक के साथ मेल खाते हैं।