آشنایی با اجزای کلیدی الاستیک سرچ، لاگ استش و کیبانا
مقدمه
قبل از هر چیز باید این نکته رو بدونیم که الستیک به عنوان یک سرور برای جستجو شناخته میشه. شاید جستجو از منظر خیلی ها آسون بنظر بیاد اما ما داریم تو عصر بیگ دیتا زندگی می کنیم و تنوع و پیچیدگی کوئری ها باعث شده Search Server ها پیاده سازی بشن و بیان تو بازار.
نمای کلی معماری ELK Stack در یک مثال
بعنوان مثال فرض کنید ما قصد داریم تا ELK را بر روی CentOS 7.x Server نصب کنیم. بعدش برای ارسال Log از کلاینت های دیگه از Filebeat استفاده می کنیم که Logهای مورد نیازمون ره به ELK Stack ارسال می کنه.
اشنایی با الستیک سرچ
الستیک یا الاستیک یا elastic 🙂 که بر اساس Java توسعه داده شده، یه Search Engine هستش که در آخرین رتبه بندی دیتابیس های دنیا جزو 10 دیتابیس برتر جهان شناخته شده و رتبه 7 رو بالاتر از Redis, SQLlite, Cassandra و Hive به خودش اختصاص داده. الستیک خودشو اینطور معرفی میکنه:
یه موتور جستجوی تحلیلیِ توزیع شده بر مبنای معماری RESTful بر اساس Lucene
اولین نسخه اش 2010 اومد بیرون و نسخه Stable در حال حاضر 7.3.0 برای August 2019 هست. متن بازه و می تونه بعنوان DBaaS در محیط Cloud بر بستر وب سرویس های آمازون و گوگل ارائه بشه. از اونجایی که این دیتابیس در واقع NoSQL هست Schema-free هست و خبری از اسکیمای معین نیست. ضمنا از Secondary indexes هم پشتیبانی میکنه. همونطور که تو تعریف هم بهش اشاره شد الستیک به صورت توزیع شده طراحی شده. به همین منظور برای بخش بندی داده و ذخیره سازی دیتاهای مختلف روی چندین گره تو محیط عملیاتی مون از روش Sharding استفاده می کنه.
روش بخش بندی داده در الستیک بصورت Sharding هست.
از اونجایی که تو دسته NoSQL هاست، پشتیبانی از Foreign keys موضوعیت نداره، فاقد تراکنش هست، اما چون داریم Distributed پیش می ریم قاعدتا Concurrency رو توی معماری مون داریم و همچنین ماندگاری و دوام داده هامون یا همون Data Durability، و می تونیم دیتامون رو توی شبکه مون Persist کنیم(یاد Persist تو Spark افتادم). یه خوبی دیگه هم که الستیک داره اینه که می تونیم یه بخش یا کل ساختار دیتامون رو فقط بصورت In-memory نگه داریم و تو این بخش می تونیم از Memcached و Redis کمک بگیریم.
الستیک چطور کار میکنه؟
داده های خام از منابع مختلف وارد مخزن الستیک میشن و الستیک داده ها را به عنوان اسناد JSON ذخیره می کنه. هر Doc هم مجموعه ای از Key-Value Pair هستش و ما می تونیم روی اونها تجزیه و تحلیل دلخواهمون رو بزنیم و از Kibana هم برای مصورسازی دیتا و ساخت داشبورد های تعاملی استفاده کنیم و اونا رو به اشتراک بزاریم. الستیک از یه Data Structure به اسم Inverted Index استفاده می کنه که واسه Fast Search روی Full Text طراحی شده.
یه Inverted Index هر کلمه یکتایی رو که تو هر سند هست رو لیست می کنه و تمام اسنادی رو که هر کلمه توی اونا رخ می ده رو شناسایی می کنه.
کوئری Full Text
کوئری Full-text می تونه شامل کلمات و عبارت ساده یا چندین کلمه یا عبارت باشه. کوئری Full text، هر سندی که شامل حداقل یک نتیجه مشابه باشه را بر می گردونه که به عنوان Hit شناخته می شه. یک تطابق نتیجه یا جواب زمانی اتفاق می افته که سند مقصد شامل همه ی اصطلاحات تعریف شده در Full Text باشه و همچنین با برخی شرایط جست و جو مانند فاصله میان اصطلاحات مطابقت داشته باشه. الستیک هم بخوبی از این قابلیت پشتیبانی میکنه. الستیک همچنین از قابلیت تصحیح خودکار متن برخورداره؛ مثلا اگه تو کوئری شما اشتباه تایپی باشه و نوشته باشید “دینای بیگ دتیا”، تصحیحش میکنه و پیام میده آیا منظور شما “دنیای بیگ دیتا” است؟ مثل همون موقعی که اشتباهی تو گوگل سرچ می کنیم و گوگل بهمون عبارت درست رو ریکامند میکنه.
اصلا چرا بریم سمت الستیک؟
اینجا سعی می کنیم بصورت موردی اشاره کنیم چرا بکنیم از وطن (مثلا Splunk) مهاجرت کنیم سمت ELK؟
- سرعتش بسیار بالاست
- فیت نیازهای پردازشی جستجوی Near Real Time هستش، چرا که حدفاصل Doc Index تا Searchable بودنش بسیار کوتاه هست (حدود 1 ثانیه). همین قابلیت باعث میشه ازش در کارهای Near Real Time مثل نرم افزار های مانیتورینگ و عیب یابی استفاده کنیم.
- چون بر پایه Lucene ساختنش میشه گفت از جهت Full Text Search قدرت بالایی داره.
- چون Eventual Concistency داره و دیتاها در قالب Sharding روی گره های شبکه توزیع میشن می تونیم برای جلوگیری از مشکل در صورت خرابی سخت افزارمون ازشون Backup بگیریم.
- مشخصا مقیاس پذیری و انعطاف پذیری بالایی داره.
- چون امکان یکپارچگی با Beats و Logstash و Kibana رو داره فاز Data Consumption و Visualization خیلی ساده تر شده.
روش های دسترسی
با استفاده از API و Data Collector Engine یا Log Interpreters مثل Logstash و Amazon kinesis Firehose میشه اطلاعات را در قالب فایل های JSON به ElasticSearch ارسال کرد. بعدش الستیک میاد بدون هیچ معطلی فایل دیتا رو ذخیره می کنه و به File Cluster Index، یه دونه Searchable Key رو Append می کنه. در ادامه می تونیم عملیات جستجو و بازیابی رو روی دیتامون انجام بدیم و از Kibana برای مصورسازی دیتا و ساخت داشبورد های تعاملی استفاده کنیم.
- Java API
- JSON API
- RESTful HTTP
پشتیبانی از Map Reduce
برای افرادی که در اکوسیستم هدوپ زندگی می کنن:-) الستیک از متدهای Map Reduce User Defined پشتیبانی می کنه و یه کانکتور اختصاصی برای اتصال به هدوپ به نام ES-Hadoop Connector داره.
پشتیبانی از C در تئوری CAP
قبلا تو مقاله SQL, NoSQL اومده بودیم و مفاهیم تئوری CAP رو با ذکر نمونه هاش بررسی کرده بودیم و Consistency یکی از سه ضلع کلیدی مثلث تئوری معروف CAP بود. ایم مفهوم این صورت هست که دیتامون رو میآیم روی گره های مختلف تو شبکه مون پخش می کنیم، این بخش های مختلف دیتا، اطلاعات یکسانی رو در هر لحظه داشته باشند. در این بین الستیک از Eventual Consistency پشتیبانی می کنه، اما یعنی چطور؟ یعنی اگه هیچ بروزرسانی جدیدی روی دیتای مدنظرمون انجام نشه، در نهایت همه کلاینت هایی که واسه دسترسی به اون دیتا اومدن سمت سرور ریکوئست زدن، آخرین مقدار به روز شده را به کلاینت برمیگردونه.
الستیک در محیط Cloud
میشه از الستیک بعنوان یه Managed & Hosted Service رو بستر AWS, GCP, Alibaba Cloud استفاده کنیم و حالشو ببریم (که نمی تونیم چون تحریم هستیم، همه دنیا برای ما شاخ شدن حالا)، ولی می تونیم روی هاست خودمون هم Lunch ش کنیم و ازش استفاده کنیم کما اینکه خیلی شرکت های ایران از استک ELK دارن استفاده میکنن، آفرین بچه ها:-). الستیک همچنین سرویس Elastic Cloud Enterprise رو ارائه می کنه و همچنین می تونه بر بستر Public Cloud, Private Cloud, VM نصب بشه بیاد بالا.
مروری بر مزایای کلیدی الستیک
- متن بازه
- می تونیم به صورت Near Real Time روی دیتامون Index گذاری کنیم.
- جستجو و تحلیل روی دیتا
- مقیاس پذیری اُفقی (معلومه وقتی داریم میگیم Distributed هست)
کاربردهای کلیدی
- تحلیل لاگ،
- جستجوی Full-text،
- هوش امنیتی،
- تحلیل تجاری
- هوش عملیاتی
Logstash برای چی استفاده میشه؟
Logstash یه گام قبل کار خودشو انجام میده و میاد جمع آوری، پردازش داده ها و ارسال داده ها رو به الستیک انجام میده. Logstash که متن باز هم هست، یه پایپ لاین پردازش داده است که باهاش می تونیم داده ها رو از چندین سورس به طور همزمان Ingest کنیم و قبل از اینکه بفرستیمش سمت Elastic برای Index، روی دیتامون Transformation های مدنظرمون رو انجام بدیم.
ساخت داشبوردهای تعاملی قدرتمند با Kibana
کیبانا هم که کنار الستیک نصب میشه و عضوی از استک مشهور ELK هست، صدها مجموعه متنوع از نمودارها و استانداردهای مصورسازی رو تو خودش داره من جمله سرویس tile برای اطلاعات جغرافیایی، TimeLion برای داده های سری زمانی و میشه باهاش اینفوگرافیک های Dynamic طراحی کرد.
الستیک از چه زبان هایی پشتیبانی می کنه؟
در حال حاضر الستیک از این 8 زبان پشتیبانی میکنه.
- Python
- Net
- Java
- Ruby
- PHP
- Perl
- JavaScript
- Groovy
در ادامه باید بسته به مساله ای که دارید و خیلی فاکتورهای دیگه کدوم اِستک مناسب کار هست.
نصب الستیک سرچ به همراه کیبانا روی ویندوز!
همونطور که ابتدای مقاله گفتیم الستیک رو با جاوا زدن. واسه همین باید جاوا روی سیستم نصب باشه. حواستون باشه که ورژنش نباید کمتر از ۸ باشه. واسه اطمینان از صحت نصبش این دستور رو تو خط فرمان بزنید.
java -version
برای دانلود آخرین نسخه اش باید به این آدرس در سایت رسمیش برید. برای هر نسخه از الستیک میتونید اون رو در قالب فشرده TAR و ZIP، پکیجهای DEB و RPM و یا MSI بر حسب نیازتون دانلود کنید.
برای اجرای الستیک باید به پوشه bin برید و فایل elasticsearch.bat رو اجرا کنید. اگر همه چیز درست پیش بره با همچین صفحهای روبرو میشید.
ابتدای مقاله تو تعریف الستیک اشاره کردیم که بر مبنای معماری RESTful هست. این یعنی یه وب سرویس هست و ارتباط با اون از طریق متدهای پروتکل HTTP انجام میشه که عبارتند از:
ما می تونیم از ابزارهایی مثل cURL و Postman به الستیک وصل بشیم. اگه همه چی اوکی باشه الستیک تو localhost با پورت 9200 قابل دسترسیه. اگه یه درخواست Get بفرستید سمت localhost یه همچین خروجی می گیرید:
{
“name” : “BigDataWorld.ir”,
“cluster_name” : “elasticsearch”,
“cluster_uuid” : “4ycIOln3RYa-mJl3O-Qrww”,
“version” : {
“number” : “7.6.2”,
“build_flavor” : “default”,
“build_type” : “zip”,
“build_hash” : “ef48eb35cf30adf4db14086e8aabd07ef6fb113f”,
“build_date” : “2020-03-26T06:34:37.794943Z”,
“build_snapshot” : false,
“lucene_version” : “8.4.0”,
“minimum_wire_compatibility_version” : “6.8.0”,
“minimum_index_compatibility_version” : “6.0.0-beta1”
},
“tagline” : “You Know, for Search”
}
برای نصب کیبانا هم به این آدرس می ریم و فایل نصبی اش رو دانلود می کنیم و UnZip می کنیم. بعدش میریم به این مسیر
config/kibana.yml
و
elasticsearch.hosts
رو Uncomment می کنیم. در ادامه
bin\kibana.bat
به مسیر فوق میریم و دستور رو اجرا می کنیم. همه چی اوکی باشه می تونید برید آدرس
http://localhost:5601
و کیبانا رو چک کنید.
تا به اینجا یادگرفتیم چطوری Elasticsearch رو راهاندازی کنیم و در بخشهای آینده ان شاالله اگه عمری بود به بررسی ویژگیهاش میپردازیم.
درباره محمد حیدری
مهندس کلان داده، هلدینگ داده ورزی سداد، پژوهشگر رایانش ابری توزیع شده،پژوهشگاه دانشهای بنیادی
نوشته های بیشتر از محمد حیدری
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.