راهنمای نصب و راه‌اندازی Elastic Stack

تذکر: این راهنما برای سیستم عامل‌های بر پایه‌ی لینوکس نوشته شدهپیش‌نیازها:Ubuntu 20.04sudo accesJava11(openJDK11)معرفی:مجموعه‌ی Elastic Stack (در گذشته ELK Stack) مجموعه‌ای از نرم‌افزارهای متن-بازه(open-source) که توسط Elastic تولید و توسعه داده شده و به شما اجازه می‌ده انواع log fi‍leهای تولید شده با هر قالبی توسط هر منبعی رو جمع‌آوری، جستجو، تحلیل و بررسی و در اَشکالِ مختلفِ قابلِ درک، نمایش بدید. روشی که با عنوان "گزارش‌گیری متمرکز" (centralized logging) شناخته می‌شه.روش centralized logging می‌تونه در زمانِ تشخیصِ یک مشکلِ رخ داده در serverها یا applicationها، با ایجادِ امکانِ جستجو در بین تمام log fileها در یک نقطه‌ی متمرکز، به ما کمک کنه. همچنین امکان شناسایی مشکلاتی رو که بین چندین server گسترش یافته، از طریق یک جستجوی مرتبط بین logهای تولید شده توسط اون‌ها، در یک بازه‌ی زمانی مشخص، برای ما فراهم می‌کنه.مجموعه‌ی Elastic Stack شامل چهار component زیره:ـ Kibana: یک web interface برای جستجو و نمایش گزارشات.ـ Elasticsearch: یک موتورجستجوی توزیع‌شده‌ی RESTful که تمام داده‌های جمع‌آوری شده رو ذخیره می‌کنه.ـ Logstash: جزء پردازش کننده داده‌ها در Elastic Stack که داده‌های ورودی رو پردازش کرده و به Elasticsearch ارسال می‌کنه.ـ Beats: یک حمل‌کننده‌ی داده‌ی (data shipper) سبُک و تک منظوره که می‌تونه داده‌ها رو از صدها و یا هزاران ماشین مختلف به سوی Logstash یا Elasticsearch ارسال کنه.شرح: Stack سه سطحی Elastic Stack (Beats و Logstash در یک سطح قرار دارند)قدم اول: نصب و پیکربندی Elasticsearchاجزاء(componentهای) Elasticsearch در repositoryهای پیش‌فرض Ubuntu موجود نیستند. بنابراین ابتدا باید از طریق دستور apt منابع اونها رو به بسته های سیستم‌عامل اضافه کنیم. لازم به ذکره که تمام بسته های مربوطه، توسط کلید Elasticsearch در اصطلاح sign شده‌ن تا از سیستم شما در برابر کدها یا نرم افزارهای تقلبی محافظت کنن.در ابتدا نیاز داریم با اجرای دستور زیر کلید عمومیِ Elasticsearch GPG رو در APT وارد کنیم:wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -در مرحله بعد لیست منبع Elastic رو به‌ فهرست sources.list.d اضافه می‌کنیم. جایی که APT برای جستجوی منابع جدید به اون مراجعه می‌کنه:echo &quotdeb https://artifacts.elastic.co/packages/7.x/apt stable main&quot | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.listو بعد با استفاده از دستورات زیر باید repository رو بروزرسانی کرده و نرم‌افزار رو نصب کنیم:sudo apt-get update sudo apt-get install elasticsearchحالا Elasticsearch نصب شده و آماده‌ست برای پیکربندی. از اونجایی که فایل پیکربندی یک فایل متنیه، ما از nano text editor برای ویرایش اون استفاده می‌کنیم:sudo nano /etc/elasticsearch/elasticsearch.ymlنکته مهم: از اونجا که فایل پیکربندی از نوع YAML است، در استفاده از جای‌خالی(space) بسیار دقت کنید!!فایل elasticsearch.yml امکانات متنوعی رو برای پیکربندی در اختیار ما قرار می‌ده. مثل تنظیماتی برای gateway, discovery, network, memory, path, node, cluster و .. . بیشتر این گزینه ها از پیش تنظیم شده‌ن ولی ما می‌تونیم بسته به نیازمون اونها رو تغییر بدیم.سرویس Elasticsearch به صورت خودکار آغاز به کار نمی‌کنه، بنابراین باید اون رو به صورت دستی فعال کنیمsudo systemctl enable --now elasticsearch.serviceسرویس Elasticsearch به ترافیک درگاه 9200 توجه می‌کنه. پس برای بررسی صحت راه‌اندازی سرویس این درخواست HTTP رو اجرا می‌کنیم:curl -X GET &quotlocalhost:9200&quotو انتظار می‌ره که چنین پاسخی دریافت کنین:{ "name" : "Elasticsearch", "cluster_name" : "elasticsearch", "cluster_uuid" : "qqhFHPigQ9e2lk-a7AvLNQ", "version" : { "number" : "7.7.1", "build_flavor" : "default", "build_type" : "deb", "build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f", "build_date" : "2020-03-26T06:34:37.794943Z", "build_snapshot" : false, "lucene_version" : "8.5.1", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search"}قدم دوم: نصب و پیکربندی داشبورد Kibanaبراساس توصیه‌ی رسمی، باید بلافاصله بعد از Elasticsearch، نرم‌افزار Kibana رو نصب کنیم. از این طریق می‌تونیم اطمینان حاصل کنیم که وابستگی‌های componentها با ترتیب درستی اضافه شده و در جای صحیح قرار میگیرن.چون قبلا repository رو بروز کردیم، با استفاده از دستور زیر Kibana رو نصب می‌کنیم:sudo apt install kibanaدر مرحله بعد باید فایل kibana.yml رو در آدرس etc/kibana/kibana.yml/ ویرایش کرده و تغییرات زیر رو اعمال کنیم:server.port: 5601 server.host: &quotlocalhost&quot elasticsearch.host: [&quothttp://localhost:9200&quot]و در نهایت برای فعالسازی و راه‌اندازی اون، دستورات زیر رو اجرا می‌کنیم:sudo systemctl enable kibana sudo systemctl start kibanaو تمام. برای بررسی اولیه‌ی kibana یک ‌browser باز کرده و آدرس http://localhost:5601 رو مشاهده کنید.قدم سوم: نصب و پیکربندی Logstashبا وجود اینکه برای Beats امکان ارسال داده‌ها به Elasticsearch به صورت مستقیم هم وجود داره،‌ اما بسیار معموله که برای پردازش داده‌ها در بین راه، از ‌Logstash استفاده کنیم. این کار به ما این امکان رو می‌ده که در جمع‌آوری داده‌ها از منابع مختلف، انعطاف بیشتری داشته باشیم و بتونیم داده‌ها رو در یک قالب و شکل مشترک منتقل کرده و در نهایت به راحتی اون‌ها رو برای ذخیره در یک پایگاه‌داده‌ی(database) دیگه استخراج کنیم.برای نصب Logstash از دستور زیر استفاده می‌کنیم:sudo apt install logstashبعد از نصب می‌ریم سراغ پیکربندی. فایل‌های پیکربندی Logstash در مسیر etc/logstash/conf.d/ قرار دارند. برای کسب اطلاعات بیشتر در مورد نحوه پیکربندی، می‌تونید صفحه‌ی مرجع پیکربندی Logstash رو که توسط Elastic ارائه شده، با دقت بیشتری مطالعه کنید.نرم‌افزار Logstash قابلیت‌های بسیار زیادی برای سفارشی‌سازی داره. برای درک بیشتر، بهتره Logstash رو یک دنباله‌ی خطی از ماژول‌های پردازشی(pipeline) در نظر بگیرید که از یک سو داده‌ها رو دریافت می‌کنه،‌ با یک یا چند روش اونها رو پردازش می‌کنه و در نهایت محصول رو به مقصد(در اینجا Elasticsearch) ارسال می‌کنه.یک دنباله‌ی پردازشیِ Logstash، دارای حداقل دو مولفه‌ی اجباری ورودی و خروجی(input,output) و یک یا چند مولفه‌ی اختیاری پالایشه(filter). همونطور که از اسامی مشخصه،‌ ماژول input، داده رو از یک منبع دریافت می‌کنه،‌ ماژول‌های filter داده رو پردازش می‌کنن و در نهایت ماژول output داده رو به مقصد می‌فرسته. یک مثال ساده برای پیکربندی logstash می‌تونه مثل زیر باشد:ابتدا یک فایل در مسیر فایل‌های پیکربندی Logstash با نام دلخواه ایجاد می‌کنیم:sudo nano /etc/logstash/conf.d/from-beats-to-elastic.confمقادیر زیر رو در فایل نوشته و ذخیره می‌کنیم:input { beats { port => &quot5044&quot } } filter { grok { match => {&quotmessage&quot => &quot% COMBINEDAPACHELOG}&quot} } } output { stdout {codec => rubydebug} }برای بررسی صحت فایل پیکربندی، می‌تونیم از دستور زیر استفاده کنیم:sudo -u logstash /usr/share/logstash/bin/logstash --path.settings /etc/logstash -tدر صورتی که مشکلی در فایل‌های پیکربندی نباشه، بعد از لحظاتی پیغام زیر مشاهده می‌شه:Config Validation Result: OK. Exiting Logstashو در نهایت، برای فعالسازی و راه‌اندازی اون از دستورات زیر استفاده می‌کنیم:sudo systemctl start logstash sudo systemctl enable logstashقدم چهارم: نصب و پیکربندی Beats (در اینجا Filebeat)مجموعه‌ی Elastic Stack از چندین حاملِ‌داده‌ی (data shipper) متنوع با نام Beats، برای جمع‌آوری داده از منابع مختلف و ارسال اون‌ها به Logstash یا Elasticsearch استفاده می‌کنه. انواع Beats را می‌تونید در زیر مشاهده کنید: ـ Filebeat: جمع‌آوری و انتقال فایل‌های گزارش (log file) ـ Metricbeat: جمع‌آوری داده‌های اندازه‌ای(metrics) از سیستم‌ها و سرویس‌های شما ـ Packetbeat: جمع‌آوری و آنالیز داده‌های شبکه ـ Winlogbeat: جمع‌آوری داده‌های رویدادهای ویندوزی ـ Auditbeat: جمع‌آوری داده های چارچوب حسابرسی لینوکس(Linux audit framework) و نظارت بر یکپارچگی فایل‌ها ـ Heartbeat:نظارت بر سرویس‌ها از نظر دردسترس‌بودن با استفاده از یک نوع جستجو و کاوش فعالدر این راهنما ما از Filebeat برای انتقال فایل‌های log به Elastic Stack استفاده می‌کنیم.برای نصب Filebeat از دستور زیر استفاده می‌کنیم:sudo apt install filebeatدر مرحله بعد برای پیکربندی Filebeat فایل filebeat.yml را ویرایش می‌کنیم:sudo nano /etc/filebeat/filebeat.ymlنرم‌افزار Filebeat از خروجی‌های بیشماری پشتیبانی می‌کنه اما ما معمولاً داده‌ها رو یا مستقیماً به سمت Elasticsearch و یا برای پردازش اضافی به سمت Logstash ارسال می‌کنیم. چون در این راهنما ما از Logstash استفاده کردیم، خروجی‌های مربوط به Elasticsearch را غیرفعال کرده و بعد، بخش خروجی‌های Logstash را فعال می‌کنیم.برای این کار باید خطوط بلااستفاده در فایل پیکربندی Filebeat رو comment کرده و خطوط مورد استفاده رو uncomment کنیم:#output.elasticsearch: #hosts: [&quotlocalhost:9200&quot] … output.logstash: hosts: [&quotlocalhost:5044&quot]عملکرد Filebeat را می‌تونیم با استفاده از ماژول‌های Filebeat بهبود ببخشیم. در این راهنما ما از ماژول system استفاده می‌کنیم که logهای تولید شده توسط system logging service، مربوط به توزیع‌های رایج لینوکس رو جمع‌آوری و تجزیه می‌کند.برای فعال کردن ماژول‌ system از دستور زیر استفاده می‌کنیم:sudo filebeat modules enable systemو برای بررسی فعال شدن ماژول، دستور زیر رو اجرا می‌کنیم:sudo filebeat modules listاگه همه چیز درست پیش رفته باشه باید خروجی زیر رو مشاهده کنیم:Enabled:systemDisabled:apache2auditdelasticsearchicingaiiskafkakibanalogstashmongodbmysqlnginxosquerypostgresqlredistraefik...در مرحله بعد، باید ورودی‌های Filebeat که داده‌ها رو قبل از ارسال از طریق logstash به Elasticsearch تجزیه(parse) می‌کنن تنظیم کنیم.برای این کار دستور زیر را اجرا می کنیم:sudo filebeat setup --pipelines --modules systemحالا باید الگوی شاخص Elasticsearch رو در Filebeat بارگذاری کنیم:sudo filebeat setup --index-management -E output.logstash.enabled=false -E 'output.elasticsearch.hosts=[&quotlocalhost:9200&quot]'شاخص Elasticsearch مجموعه اسنادیه که دارای ویژگی‌های مشابه هستن. این شاخص‌ها با یک نام مشخص می‌شن. در لحظه‌ی ایجادِ یک شاخصِ جدید، الگویِ شاخص به طور خودکار بروزرسانی می‌شه.بعد از اجرای دستور بالا خروجی زیر مشاهده می‌شه:Index setup finished.بسته نرم افزاری Filebeat با نمونه داشبوردهای Kibana همراهه که به ما امکان می‌ده داده‌های Filebeat رو در Kibana نمایش بدیم. برای استفاده از این داشبوردها، باید الگویِ شاخص اون‌ها رو ایجاد کرده و داشبوردها رو در Kibana بارگذاری کنیم.با بارگذاری داشبوردها، Filebeat برای بررسیِ اطلاعاتِ نسخه، به Elasticsearch متصل می‌شه. برای بارگذاری داشبورد هنگام فعال بودنِ Logstash ، باید اول خروجیِ Logstash رو غیرفعال کرده و خروجیِ Elasticsearch رو از طریق دستور زیر فعال کنیم:sudo filebeat setup -E output.logstash.enabled=false -E output.elasticsearch.hosts=['localhost:9200'] -E setup.kibana.host=localhost:5601پس از اجرای دستور باید چنین خروجی رو مشاهده کنیم:Overwriting ILM policy is disabled. Set `setup.ilm.overwrite:true` for enabling.Index setup finished.Loading dashboards (Kibana must be running and reachable)Loaded dashboardsSetting up ML using setup --machine-learning is going to be removed in 8.0.0. Please use the ML app instead.See more: https://www.elastic.co/guide/en/elastic-stack-overview/current/xpack-ml.htmlLoaded machine learning job configurationsLoaded Ingest pipelinesحالا می‌تونیم Filebeat رو راه اندازی و فعال کنیم:sudo systemctl start filebeat sudo systemctl enable filebeatبرای بررسی اینکه Elasticsearch واقعاً این داده‌ها رو دریافت می‌کنه، با استفاده از دستور زیر شاخص Filebeat رو جستجو می‌کنیم:curl -XGET 'http://localhost:9200/filebeat-*/_search?pretty'و انتظار داریم چنین خروجی‌ای دریافت کنیم:{ { "took" : 4, "timed_out" : false, "_shards" : { "total" : 2, "successful" : 2, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 4040, "relation" : "eq" }, "max_score" : 1.0, "hits" : [ { "_index" : "filebeat-7.7.1-2020.06.04", "_type" : "_doc", "_id" : "FiZLgXIB75I8Lxc9ewIH", "_score" : 1.0, "_source" : { "cloud" : { "provider" : "digitalocean", "instance" : { "id" : "194878454" }, "region" : "nyc1" }, "@timestamp" : "2020-06-04T21:45:03.995Z", "agent" : { "version" : "7.7.1", "type" : "filebeat", "ephemeral_id" : "cbcefb9a-8d15-4ce4-bad4-962a80371ec0", "hostname" : "june-ubuntu-20-04-elasticstack", "id" : "fbd5956f-12ab-4227-9782-f8f1a19b7f32" },...قدم پنجم: کار با داشبورد Kibanaدر یک browser آدرس http://localhost:5601 رو مشاهده کنید.در صفحه پیش رو، در منویِ Discover، الگویِ شاخصِ از پیش‌تعریف‌شده‌ی *-filebeat رو انتخاب کنید تا داده‌های ارسالی Filebeat رو مشاهده کنید. به طور پیش‌فرض، در اینجا همه‌ی اطلاعاتِ ثبت شده در 15 دقیقه‌ی گذشته رو می‌تونیم ببینیم. در بخش پایینی هم یک هیستوگرام، مربوط به رویدادهای ورود به سیستم و برخی دیگر از پیام‌های ورود به سیستم رو مشاهده می‌کنیم.در اینجا، می تونیم دربین داده‌های log جستجو و مرور کنیم و همچنین داشبورد خودمون رو سفارشی کنیم. با استفاده از پنل سمت چپ می‌تونیم به صفحه داشبورد بریم و داشبورد Filebeat System را جستجو کنیم. در قدم بعد، می تونیم داشبوردهای نمونه‌ای رو که با ماژول سیستم Filebeat سازگار هستند انتخاب کنیم.در پایان:در این راهنما، سعی کردم با بیان ساده و تا حدودی فنی، به مختصرترین شکل ممکن، تعریف کنم چطور Elastic Stack رو برای جمع‌آوری و تجزیه و تحلیلِ فایل‌های log مربوط به سیستم، نصب و پیکربندی کنید. یادتون باشه که می‌تونید تقریباً هر نوع اطلاعاتِ ورودی به سیستم، یا داده‌های index شده رو با استفاده از Beats به Logstash ارسال کنید، اما اگر داده‌ها با ماژول‌هایِ پالایشِ Logstash، تجزیه و ساختاربندی بشن مفیدتر می‌شن، چون با این کار، داده‌ها به قالبی سازگار و قابل خوندن توسط Elasticsearch تبدیل می‌شن.این راهنما با استفاده از مطالعه‌ی سایت‌های مختلف که در زیر لیست اون‌ها اومده، به همراهِ بهره‌گیری از تجربه‌ی شخصیِ پیاده‌سازیِ Elastic Stack، نوشته شده و ممکنه کامل نباشه یا دارای ایراداتی در نوع پیاده‌سازی یا تنظیمات باشه. خوشحال می‌شم اگر نظری، انتقادی یا پیشنهادی دارید حتماً با من درمیون بذارید.منابع:https://www.elastic.co/https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-elastic-stack-on-ubuntu-20-04https://linuxconfig.org/install-elk-on-ubuntu-20-04-focal-fossa-linuxhttps://phoenixnap.com/kb/how-to-install-elk-stack-on-ubuntuhttps://www.elastic.co/guide/en/logstash/7.0/config-examples.htmlhttps://www.elastic.co/guide/en/logstash/current/configuration-file-structure.htmlhttps://www.elastic.co/guide/en/beats/filebeat/current/logstash-output.htmlhttps://www.elastic.co/guide/en/logstash/current/plugins-inputs-beats.html