ELK Stack – பகுதி 3

Logstash

Logstash  என்பது  நிகழ்வுகளைப் பெற உதவும் ஒரு  தரவுக் குழாய் (data pipeline)  ஆகும். இது ரூபி மொழியில் எழுதப்பட்ட பல்வேறு வகையான செருகு நிரல்களை(plugins)  வைத்து இயங்குகிறது. எனவே தான் இது “Plugin based events processing data pipeline” என்று அழைக்கப்படுகிறது. இந்த தரவுக் குழாய் 3 வகையான நிலைகளில் தரவுகளைக் கையாள்கிறது.  இது பின்வருமாறு:Logstash  என்பது  நிகழ்வுகளைப் பெற உதவும் ஒரு  தரவுக் குழாய் (data pipeline)  ஆகும். இது ரூபி மொழியில் எழுதப்பட்ட பல்வேறு வகையான செருகு நிரல்களை(plugins)  வைத்து இயங்குகிறது. எனவே தான் இது “Plugin based events processing data pipeline” என்று அழைக்கப்படுகிறது. இந்த தரவுக் குழாய் 3 வகையான நிலைகளில் தரவுகளைக் கையாள்கிறது.  இது பின்வருமாறு:

முதலில் பல்வேறுபட்ட மூலங்களிலிருந்து (different sources) வரும் நிகழ்ச்சிகளை(events) Logstash என்பது பெற்றுக்கொள்ளும். இதன் பெயர் வேண்டுமானால் LogStash என்று இருக்கலாம். அதற்காக இது logs-ஐ மட்டும் பெற்றுக்கொள்ளும் கருவி என்று கிடையாது. Files, sockets, script outputs போன்ற பல்வேறுபட்ட வடிவங்களில் வரும் அனைத்து நிலைத் தரவுகளையும் பெற்றுக்கொள்ளும். இவ்வாறு வேறுபட்ட மூலங்களிலிருந்து வரும் நிகழ்வுகளை எடுப்பதற்கு வெவ்வேறு வகையான செருகு நிரல்கள் logstash – வுடன் இணைந்து செயல்படுகின்றன. இவை உள்ளீட்டுக்கான செருகு நிரல்கள் (Input plugins) என்று அழைக்கப்படுகின்றன. எடுத்துக்காட்டுக்கு file, irc, jdbc, kafka, github exec, eventlog, http, imap போன்றவை files, servers, webhooks, message queues, shell command outputs போன்ற பல்வேறுபட்ட மூலங்களிலிருந்து நிகழ்ச்சிகளை எடுக்க உதவுகின்றன. நிகழ்ச்சி என்று நான் குறிப்பிடுவது அதிலுள்ள தகவல்களை மட்டுமே! இதுவே முதல் நிலை ஆகும்.  அடுத்ததாக இவ்வாறு பெற்றுக்கொண்ட தகவல்களை நமக்குத் தேவைப்படுகின்ற விதங்களில் மாற்றி(data Processing) வடிவமைக்கின்றன. இந்நிலையில்தான் எதன் அடிப்படையில் தகவல்கள் பிரிக்கப்பட வேண்டும், எவை மாற்றப்பட வேண்டும், எவை நீக்கப்பட வேண்டும் போன்ற தகவல்களெல்லாம் கொடுக்கப்படுகின்றன. இதுவே இரண்டாம் நிலை.கடைசியாக வடிவமைக்கப்பட்ட தரவுகளை பல்வேறுபட்ட சேமிப்புக் கிடங்குகளில் கொண்டு சேர்க்கின்றன(destination). அவ்வாறு கொண்டு சேர்ப்பதற்கு பல்வேறு செருகு நிரல்கள் உள்ளன. இவை வெளியீட்டுக்கான செருகு நிரல்கள் (Output plugins) என்று அழைக்கப்படுகின்றன. எடுத்துக்காட்டுக்கு csv, datalog, email, irc, jira, exec, kafka, elasticsearch  போன்றவை files, servers, message queues, storage engine, databases போன்ற பல்வேறுபட்ட கடைநிலை சேருமிடங்களில் கொண்டு சேர்க்கின்றன. இதுவே மூன்றாம் நிலை.இப்போது இவை அனைத்தையும் எவ்வாறு செயல்வடிவில் செய்வது என்று காணலாம்.

ஒரு கோப்பிலிருந்து தரவுகளை உள்ளெடுத்தல்

earthquakes எனும் csv கோப்பில் இருக்கும் அனைத்துத் தகவல்களையும் எவ்வாறு logstash-க்குள் செலுத்துவது, பின்னர் அதனை எவ்வாறு வடிவமைப்பது, கடைசியாக elasticsearch எனும் search engine-க்குள் எவ்வாறு கொண்டு சேர்ப்பது என்று பார்க்கப்போகிறோம். இவை அனைத்தையும் செய்வதற்கு நாம் ஏதேனும் ஒரு பெயரைத் தொடர்ந்து .conf எனும் கோப்பினை உருவாக்கி அதில் பின்வருமாறு நிரல்களை எழுத வேண்டும்.

Config File

இங்கு earthquakes.conf எனும் பெயரில் நான் கோப்பினை உருவாக்கியுள்ளேன்.

இங்கு input{}, filter{}, outout{} எனும் functions, logstash-ல் உள்ள 3 நிலைகளில் நடத்தப்பட வேண்டிய வேலையைச் செய்கின்றன.

Input {}

இங்கு logstash-ஆனது csv கோப்பிலிருந்து தகவல்களைப் பெறவிருப்பதால் fileஎனும் உள்ளீட்டுக்கான செருகு நிரலைப் பயன்படுத்தியுள்ளது.  அதன் path, type, start_position எனும் 3 parameters இதன் வேலையைச் சுலபமாக்குகின்றன.

  • path என்பது கோப்பு இருக்கின்ற இடத்தின் பாதையை குறிக்கிறது.
  • type என்பது நாம் வழங்கியுள்ள eqs என்பதனை தன்  மதிப்பாகப் பெற்றுள்ளது. இதுவே நாம் பின்னர்  தரவுகளை தேடுவதற்கும் எடுப்பதற்கும் உதவும் ஒரு அடிப்படை மதிப்பாக அமையும்.
  • start_position என்பது beginning / end எனும் இரண்டு மதிப்புகளில் ஒன்றினைப் பெற்று விளங்கும். சமீபத்திய தகவல்களிலிருந்து துவங்க விரும்பினால் end எனவும், பழமையான தகவல்களிலிருந்து துவங்க விரும்பினால் begining எனவும் கொடுக்கலாம்.
  • இவற்றின் அடிப்படையில் logstash-ஆனது தரவுகளை உள் எடுக்க ஆரம்பிக்கும்.

Filter {}

இது நமக்கு வேண்டிய வடிவங்களில் உள்ளெடுக்கப்பட்ட தரவுகளைப்பொருள்படும்படிப் பிரித்து நேர்த்தியாக வடிவமைக்கப்படுகிறது. எந்தவகையான மூலத்திலிருந்து தரவுகளைப் பெறுகின்றோமோ அதற்கேற்றார் போன்றfilter plugin பயன்படுத்தப்படும். இங்கு நாம் csv கோப்பிலிருந்துதகவல்களைப் பெற்றுள்ளதால் csv { } filter-ஐப் பயன்படுத்தியுள்ளோம்.இதேபோன்று பிற வடிவிலான தரவுகளுக்காக json { }, xml { } போன்ற வகையானfilters-ம் உள்ளன.

  • csv-ன் separator எனும் பண்பானது, கோப்பில் உள்ளcomma-வின் அடிப்படையில் தரவுகள் பிரிக்கப்பட வேண்டும் என்பதைக்குறிக்கின்றது.
  • columns எனும் பண்பின் மதிப்புகளாக இடம்பெற்றுள்ளfields மட்டுமே வெளியீட்டினுள் செலுத்தப்படும். அதாவது இதில்பட்டியலிடப்பட்டுள்ள fields மட்டும்தான் ES-க்குள் செல்லும்.
  • convert மூலம் இவை அனைத்தும் float எனும் தரவகைக்குமாற்றப்படுகின்றன. ஏனெனில் Kibana வரைபடம் வரைவதற்கு இந்தத் தரவு வகைதான் பொருத்தமானதாக அமையும். இதுபோன்ற மாற்றங்கள் அனைத்தும் mutate { } எனும் filter-க்குள் கொடுக்கப்படவேண்டும்.
  • mutate { }- ஆனது convert, copy, rename, replace, update, lowercase போன்ற வகையான மாற்றங்களை நிகழ்த்த உதவும் filter ஆகும்.

Output {}

கடைசியாக தகவல்களை ES-க்குள் செலுத்த வேண்டும் என்பதற்காக அதற்கானelasticsearch { } எனும் plugin-ஐப் பயன்படுத்தியுள்ளோம். அதன் action, hosts, index, workers எனும் 4 parameters இதற்கு உதவியுள்ளது.

  • action என்பது எப்போதும் ‘index’ எனும் மற்றொரு parameter-ஐ அதன் மதிப்பாகப் பெற்றிருக்கும். இதற்கு delete எனும் மற்றொரு மதிப்பிணையும் வழங்கலாம். index என்பது ஒரு database-ஐ உருவாக்குவதற்கும், deleteஎன்பது ஏற்கனவே இருக்கும் ஒன்றை ஆழிப்பதற்கும் பயன்படும்.
  • hosts என்பது எங்கு உருவாக்க வேண்டும் என்பதனைக் குறிக்கிறது. இது elasticsearch இயங்கிக்கொண்டிருக்கும் hostname அல்லது IP முகவரியைக் கொண்டிருக்கும்.
  • index என்பது earthquakes எனும் பெயர் கொண்ட ஒரு database-ஐ உருவாக்கியுள்ளது. ஒவ்வொரு நாளும் இப்பெயரின் தொடர்ச்சியில் அந்நாளின் தேதியிட்டு தரவுகளை செலுத்திக்கொண்டே செல்லும். “earthquakes” எனும் பெயர் கொண்ட index என்பது ஒரு database போன்று செயல்படும். Input plugin-ல் உள்ள eqs எனும் பெயர் கொண்ட type என்பது அதிலுள்ள tablesபோன்று செயல்படும். ஒரு index-ல் எத்தனை type வேண்டுமானாலும் செலுத்தலாம். தற்போதைக்கு earthquakes-ல் உள்ள ஒரே type, ‘eqs’ ஆகும்.
  • கடைசியாக stdout{ } எனும் plugin-ஐப் பயன்படுத்தி console-லிலும் அவற்றை வெளியிடுமாறு கொடுத்துள்ளோம்.

கட்டளை

sudo /usr/share/logstash/bin/logstash -f earthquakes.conf

எனும் கட்டளை earthquakes கோப்பில் உள்ள அனைத்து நிகழ்வுகளையும் வேண்டிய மாற்றம் செய்து ElasticSearch Engine-க்குள் செலுத்தி விடும்.

Twitter போன்ற நிகழ்கால தரவுகளை உள்ளெடுத்தல்

இதன் Configuration file பின்வருமாறு. இதை இப்போது தங்களாலேயே புரிந்து கொள்ள முடியும். “#Ganesh Chathurthi” என்று tweet செய்தவர்களை எடுத்து logstash வழியே Elastic Search-க்குள் செலுத்தியுள்ளேன். twitter { } -க்கான input plugin இங்கு பயன்படுத்தப்பட்டு வேண்டிய தகவல்கள் உள்ளெடுக்கப்பட்டுள்ளன. அவை எவ்வித மாற்றமும் செய்யப்படாமல், ‘twitter_elastic_example’ எனும் index பெயரில் elastic search-க்குள் செலுத்தப்பட்டுள்ளன.

3 Comments

  1. Karunakaran

    வணக்கம் நித்யா,
    hadoop framework கும் இதே வேலையை தான் செய்கிறதா,ஆம் எனில் ELK stack இன் அவசியம் என்ன.

    Reply
  2. tshrinivasan

    Hadoop is for historical data. ELK is for real-time data too like twitter data.

    Reply
    1. Karunakaran

      நன்றி திரு.ஸ்ரீனி

      Reply

Leave a Reply

%d bloggers like this: