آشنایی و نصب ابزار ELK

1 مقدمه و معرفی بسته‌ی ELKلاگ گیری از سیستم‌های حیاتی اطلاعات مفیدی را در رابطه‌ با سازش‌ها و ناسازگاری‌ّها در اختیار ما قرار می‌دهد. همچنین از اطلاعات‌ آن‌ها می‌توان در جرم‌شناسی و در هر زمینه‌ی مرتبط دیگری استفاده کرد. [1]1-1 استاندارد‌هاتمام سیستم‌هایی که دارای اطلاعات محرمانه، تصدیق‌کننده‌ی اتصال به شبکه،‌ ایجاد و یا کنترل دسترسی و یا تکلیف شناسایی را دارند باید از قابلیت logging آن سیستم استفاده کنند و باید به سوا لات زیر پاسخ دهند:1. چه فعالیتی انجام‌گرفته است؟2. چه کسی یا چه چیزی فعالیتی را کجا و یا روی کدام سیستم انجام داده است؟3. چه فعالیتی بر روی شئ انجام‌گرفته است؟4. چه زمانی فعالیت انجام‌گرفته است؟5. با چه ابزاری فعالیت انجام‌گرفته است؟6. چه وضعیتی را داشته (success or failure) ، خروجی و نتیجه چه شده است؟فعالیت‌هایی که باید log شوند:1. ایجاد، حذف، به‌روزرسانی، و خواندن اطلاعات محرمانه شامل اطلاعات احراز هویت محرمانه مانند password.2. آغاز ارتباطات شبکه‌ای3. تصدیق ارتباط شبکه‌ای4. احراز هویت و صدور اجازه برای فعالیت‌های گفته‌شده در شماره‌ی ۱،۲،۳ مانند login , logout5. اعطا کردن دست‌کاری کردن و یا فراخوانی قوانین دسترسی مانند تغییر یا اضافه کردن کاربر به سیستم، افزایش دسترسی به یک کاربر خواص، تغییر firewall rule، تغییر رمز عبور.6. تغییر پیکربندی سیستم، شبکه‌، سرویس شامل نصب‌ نرم‌افزار، patch، به‌روزرسانی نرم‌افزار.7. روند‌های یک برنامه مانند آغاز کار،‌ پایان کار،‌ دوباره‌ راه‌اندازی شدن8. فرآیند‌های برنامه مانند شکست در اجرا، غیر نرمال به انتها رسیدن، terminateشدن و به‌خصوص عدم دسترسی یک نرم‌افزار به یک منبع و یا نبود منبع کافی مانند (CPU, memory, network, network bandwidth, disk space) مشکل خوردن یک سخت‌افزار.9. تشخیص رفتار‌های عناد گونه [1] با استفاده از ابزار‌هایی مانند ips/ids و یا آنتی‌ویروس.عناصر لاگ1. نوع عمل،‌ مانند به‌روزرسانی، ایجاد،‌ خواندن، حذف، تصدیق هویت.2. متعلقاتی(سیستم‌ّهای مرتبطی ) که فعالیتی را انجام داده‌اند به‌طور مثال: نام تراکنش انجام‌شده توسط یک برنامه همراه با شناسه‌ی برنامه3. شناسایی به هر میزان که امکان دارد برای آنچه درخواست یک فعالیت را دارد مانند نام کاربری، آدرس IP، mac address4. شناسایی به هرمیزانی که امکان دارد برای آنچه فعالیتی بر روی آن انجام‌شده است5. در صورت امکان اندازه‌گیری مقادیر یک عنصر در سیستم قبل و بعد از اعمال یک فعالیت مانند به‌روزرسانی6. تاریخ و زمان اجرای یک عمل7. آیا یک عمل توسط کنترل دسترسی و احراز هویت تصدیق شده است یا رد شده است8. توصیف این‌که یک عمل چرا تصدیق شده است و یا چرا رد شده استفرمت دهی و ذخیره‌ی لاگ‌ها1. سیستم باید توانایی ذخیره گزارش لاگ‌ها را در فرمت‌های استاندارد داشته باشد.2.گزارش رویداد یا Event log در مایکروسافت ویندوز مسئول متمرکز کردن و ذخیره‌ی لاگ‌ها را دارد3. فراهم آمدن لاگ‌ها در یک فرمت مناسب داکیومنت توسط پروتکل شبکه‌ای syslog، syslog-ng یا syslog-reliable برای ارسال و ذخیره در یک مرکزیت4. لاگ‌های ذخیره شده در پایگاه داده‌ی ANSI-SQL که خود به تولید لاگ‌های حسابرسی در انطباق با داکیومنت موجود می‌نماید1-2 مجموعه ابزار‌های ELKمتمرکز کردن logها، اطلاعات مفیدی برای تشخیص مسائل به وجود آمده از برنامه‌ها و سرور‌های شما، در یک محل فراهم می‌آورد و امکان جستوجو را در میان تمامی لاگ‌ّها برای شما به وجود می‌آورد.بسته‌ی نرم‌افزاری ELK یک مجموعه‌ی بسیار مشهور از ابزار‌هایی است که عبارتنداز :ElasticsearchLogstashKibanaکه هرکدام به‌صورت جدا گاه با یکدیگر در ارتباط هستند و زمانی که این 3 نرم‌افزار باهم استفاده شوند نام مجموعه با ELK شناخته می‌شود. هرکدام از آن‌ها وظیفه‌ی خاص خود را دارد که عبارت‌اند از ابزار Elasticsearch: محل ذخیره‌ی جایگاه‌هایی است که از طرف client به آن ارسال‌شده استابزار Logstash: پردازش لاگ‌هاابزار Kibana: یک رابط کاربری را فراهم می‌آورد برای اینکه بتوان لاگ‌ّها را تشریح و مشاهده کردنحوه‌ی کارکرد و همکاری این دسته نرم‌افزاری را می‌توانید در شکل ‏1‑1 مشاهده کنیدشکل ‏1‑1 نحوه‌ی کارکرد دسته نرم‌افزار ELKدر شکل ‏1‑1 مشاهده می‌کنید که log ایجاد شده و به logstash forwarder تحویل داده می‌شود و logstash forwarder آن را به سمت logstash ارسال می‌کند وظیفه‌ی logstash پردازش logهای دریافتی است و بعد از پردازش، لاگ‌های پردازش را به سمت elastic search ارسال می‌کند و وظیفه‌ی elastic search ذخیره لاگ‌ّهای دریافتی است و در این زمان kibana ارتباطی با elastic search برای نمایش مورد نیاز‌هایش برقرار می‌کند.مواردی که ذکر شد اعم از ارتباطات و پیکربندی‌ها باید به صورت جداگانه بر روی هر نرم‌افزار تنظیم شود.در ادامه به بررسی و نصب این سه نرم‌افزار می‌پردازیم.2 نصب بسته نرم‌افزاریدر این مستند تمامی هر سه نرم‌افزار برو روی یک سیستم نصب می‌شوند، اما نکات نصب توزیع‌شده‌ی، بسته‌ی نرم‌افزاری در میان آموزش توضیح خواهد داده شد.سیستم‌عاملی که در این مستند در نظر گرفته‌شده debian 8 است، شما می‌توانید که دیگر سیستم عامل‌های سازگار را در اینجا مشاهده کنید.سخت افزار مورد نیاز برنامه به میزان انتطار شما از نرم‌افزار بستگی دارد هر چه که شما پردازش سنگین‌تری را احتیاج داشته باشید، همچنین هر چه میزان حجم لاگ دریافتی بیشتر باشد نیاز به سخت‌افزار قوی‌تری دارید اما نصب نرم‌افزار در سیتسم‌ّهای ۱ گیک رم با یک cpu دو هسته‌ای هم انجام می‌شود.[2]2-1 نصب Elasticsearchبه علت ایجاد امنیت بیشتر پیشنهاد می‌شود که با استفاده از کاربر root به نصب این نرم‌افزار پرداخته نشود بلکه در ابتدا یک کاربر را اضافه کنید و از طریق این کاربر به نصب نرم‌افزار بپردازید.در سیستم‌عامل debian پکیج sudo به‌صورت پیش‌فرض نصب نیست و شما در ابتدا باید این پکیج را نصب کنید و سپس کاربر جدید را به آن اضافه کنید.برای افزودن حساب کاربری جدید و افزودن آن به گروه sudoerفرمان‌های برنامه ‏2‑1 را اجرا کنید.apt-get install sudoadduser elkadduser elk sudoبرنامه ‏2‑1 افزودن کاربرنر‌م‌افزار elasticsearch برای مرتب‌سازی داده‌هایش و جست‌وجو درداده‌ها از جاوا استفاده می‌کند. بنابراین باید در ابتدا جاوا را بر روی سیستم نصب کنیم. برنامه ‏2‑2sudo apt-get install openjdk-7-jreبرنامه ‏2‑2 نصب جاوابعد از انجام موارد گفته‌شده نوبت به نصب elastic searchمی‌رسد که در این مستند نحوه‌ی نصب از طریق repository آموزش داده می‌شود.در ابتدا احتیاج است که کلید عضویت در elastic.co را دانلود کنیم.برای دانلود و نصب باید کلید عضویت در elastic.co را دانلود کنید، اما مشکلی که وجود دارد این است که این سایت ایران را تحریم کرده و احتیاج است که از پروکسی استفاده کنید.برای نصب کلید عضویت از برنامه ‏2‑3 استفاده کنیدwget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -برنامه ‏2‑3 دانلود کلید عضویتبرای افزودن repository موردنیاز elastic search از استفاده کنیدecho &quotdeb http://packages.elastic.co/elasticsearch/2.x/debian stable main&quot | sudo tee -a /etc/apt/sources.list.d/Elasticsearch-2.x.listبرنامه ‏2‑4 افزودن repositoryبعد از update کردن repository برای نصب elastic search از استفاده کنیدsudo apt-get install elasticsearchبرنامه ‏2‑5 نصب elasticsearch2-1-1 راه‌اندازی نرم‌افزار elasticsearchبعد از نصب نرم‌افزار نوبت به راه‌اندازی آن استدر ابتدا نرم‌افزار را در دسته‌ی سرویس‌های startupسیستم قرار دهید. برنامه ‏2‑6sudo systemctl daemon-reloadsudo systemctl enable elasticsearch.serviceبرنامه ‏2‑6 افزودن به startupسپس سرویس را restart کنید. برنامه ‏2‑7sudo systemctl start elasticsearch.serviceبرنامه ‏2‑7 restart کردن سرویسبعد از اجرای برنامه ‏2‑7 شما باید خروجی مانند شکل ‏2‑1 باشد.شکل ‏2‑1 مشاهده‌ی وضعیت سرویستوصیه) بهتر است بعد از اجرای سرویس مسیر */var/log/elasticsearch/ را بررسی کنید که هیچ گونه errorرخ‌‌نداده باشد.2-2 نصب logstashبرای نصب این نرم‌افزار احتیاج به عضویت در سایت elastic.coاست اما به دلیل این که در قسمت قبل برای elasticsearch این عضویت انجام گرفت برنامه ‏2‑3 در این زمان کافی است که فقط repository را اضافه کنیم. برنامه ‏2‑8echo &quotdeb http://packages.elastic.co/logstash/2.0/debian stable main&quot | sudo tee -a /etc/apt/sources.listبرنامه ‏2‑8 افزودن repository logstashبعد از update کردن مخازن، نصب نرم‌افزار را با استفاده از انجام دهید. برنامه ‏2‑9sudo apt-get install logstashبرنامه ‏2‑9 نصب logstash2-2-1 بررسی وضعیت مجموعه نرم‌افزاری ELK بعد از نصببرای راه اندازی سرویس و افزودن آن در startup مانند برنامه ‏2‑10 عمل کنیدsudo systemctl daemon-reloadsudo systemctl enable logstash.servicesudo systemctl start logstash.serviceبرنامه ‏2‑10 راه اندازی logstashبعد از راه اندازی بررسی کنید که سرویس بالا آمده باشدsystemctl status logstash.serviceبرنامه ‏2‑11 بررسی وضعیت logstashخروجی برنامه ‏2‑11 مانند شکل ‏2‑2 استشکل ‏2‑2 بررسی logstashتوصیه) بهتر است بعد از اجرای سرویس مسیر */var/log/logstash/ را بررسی کنید که هیچ گونه errorرخ‌‌نداده باشد.3 پیکربندی مجموعه ابزار ELKبرای شروع کار با مجموعه ابزار elk در ابتدا نیاز است که با یکسری مفاهیم مورد استفاده آشنا شویم[3] جدول ‏3‑1جدول ‏3‑1 اصطلاحاتدر شکل ‏3‑1 می‌تواند اصطلاحات elasticsearch را با RDBMS مقایسه کنید[4]شکل ‏3‑1 RDBMS vs ES3-1 پیکربندی elasticsearchبعد از آشنایی با اصطلاحات elasticsearch احتیاج است که با فرمت json هم آشنا شوید که این بحث خارج از محدوده‌ی این مستند است.ابزار Elasticsearch از فرم json برای ذخیره‌ی متن‌ها استفاده می‌کند.ابزاری که برای تنظیمات و مشاهده‌ی تنظیمات elasticsearchاستفاده می‌‌شوند عبارتنداز: دستور Curl یک ابزار ارسال url یا انتقال داده‌ّها در لینوکسافزونه Head plugin: پلاگینی که برروی elasticsearch نصب می‌شود و محیط گرافیکی برای پیکربندی فراهم می‌آوردبرای کار با ابزار curl باید با option آن یعنی PUT و GET آشنا شوید.متد GET: برای برداشتن یا درخواست از یک سرور استفاد می شودمتد PUT: برای بارگزاری در یک سرور استفاده می‌شوددر elasticsearch داکیومنت‌ها به وسیله‌ی index API ذخیره و جستوجو پذیر می‌شوند و همان طور که گفته شد داکیومنت‌ها باید دارای typeو ID باشند حال در صورتی که شما می‌خواهید یک داکیومنت را در elasticsearch ذخیره کنید باید این داکیومنت دارای یک id و type و index باشد فرم افزودن یک داکیومنت با ویژگی‌های گفته شده مانند برنامه ‏3‑1 است.PUT /{index}/{type}/{id}{&quotfield&quot: &quotvalue&quot,...}برنامه ‏3‑1 بارگذاری داکیومنت در سروربه عنوان مثال برای استفاده از curl در بارگذاری در سرور می‌توانید برنامه ‏3‑2را مشاهده کنیدcurl –X PUT http://localhost:9200/website/blog/123{&quottitle&quot: &quotMy first blog entry&quot,&quottext&quot: &quotJust trying this out...&quot,&quotdate&quot: &quot2014/01/01&quot}برنامه ‏3‑2نمونه بارگذاریبرنامه ‏3‑2 به بارگذاری یک داکیومنت در سیستم پرداخته است که اجزای آن عبارتند از:Index=websiteType=blogID=123از ویژگی‌ّهای elastic این است که در صورتی که یک داده‌ای قبلا index نشده باشد به صورت اتوماتیک برای آن یک index جدید ایجاد می‌کندزمانی که شما یک index جدید ایجاد می‌کنید یا یک index جدید ایجاد می‌شود این امکان وجود دارد که بتوان indexرا پیکربندی دوباره کرد در این مستند درباره‌ی shard و replica توضیحاتی نوشته شده است((مراجعه به قسمت اصطلاحات جدول ‏3‑1)) در برنامه ‏3‑3 می‌توانید نحوه‌ی تنظیم کردن یک index را مشاهده کنید که تعداد shard و replica را تغییر داده استاز ویژگی‌ّهای elastic این است که در صورتی که یک داده‌ای قبلا indexنشده باشد به صورت اتوماتیک برای آن یک index جدید ایجاد می‌کندبرنامه ‏3‑3 settingاز تنظیمات دیگر مورد نیاز برای یک indexمی‌توان mapping((توضیحات جدول ‏3‑1)) را هم نام برد.فرض کنید که می‌خواهید mapping یک index را مشاهده کنید در این زمان می‌توانید از برنامه ‏3‑4 استفاده کنیدcurl –XGET http://localhost:9200/website/_mappingبرنامه ‏3‑4 mappingخروجی برنامه ‏3‑4 نمایش دهنده‌ی data typeهای یک indexهستند.خروجی دستور curl واضح نیست و پیشنهاد می‌شود که از پلاگین‌ها موجود در elasticsearch و kibana استفاده شود.افزونه‌ای که در این مستند ذکر می‌شود head نام دارد که بر روی elasticsearch نصب می‌شود.برای نصب افزونه‌ی head در ابتدا وارد مسیر usr/share/elasticsearch/bin/ شوید و با وارد کردن افزونه نصب می‌شود./plugin -install mobz/elasticsearch-headبرنامه ‏3‑5 نصب افزونهبعد از نصب افزونه شما میتوانید با ورود به مرورگر و وارد کردن آدرس http://localhost:9200/_plugin/head نمای رابط کابری آن را مشاهده کنید.نکته) زمانی که شما می‌خواهید از یک سیستم دیگر به elasticsearchمتصل شوید باید در فایل تنظیمات elasticsearch تغییراتی را اعمال کنید تا این که node از دید دیگر سیستم‌ها مخفی نماند برای این کار مانند شکل ‏3‑2 network.host عمل کنید و network.host را به 0.0.0.0 تغییر دهید و از کامنت بودن خارج کنیدشکل ‏3‑2 network.hostنکته) زمانی که شما از مجموعه ELK استفاده می‌کنید و با استفاده از logstash که در ادامه به پیکربندی آن می‌پردازیم به ارسال لاگ به سمت elastic می‌پردازید خود ES[1] به ایجاد indexهایی با نام logstash و زمان ایجاد آن می‌پردازد.زمانی که با پلاگین head به elasticsearch متصل می‌شوید نمای کاربری شکل ‏3‑3 elastic head plugin را مشاهده می‌کنیدشکل ‏3‑3 elastic head pluginشما با استفاده از افزونه‌ی head می‌توانید به ایجاد، حذف و مشاهده‌ی و اعمال تنظیمات در یک فضای گرافیکی بپردازید.در شکل ‏3‑3 می‌توانید در تب overviewبه مشاهده‌ی اطلاعات در رابطه با indexها بپردازیدبرای افزودن یک index جدید وارد تب indices شده و بر روی new index کلیک کنید. شکل ‏3‑4شکل ‏3‑4 ایجاد indexبرای مشاهده‌ی documentها و جستوجو در آن‌ّها وارد تب browser شوید. شکل ‏3‑5شکل ‏3‑5 تب browserشما می‌توانید برای ساختار دهی به نتیجه‌ی query وارد تب structured query شوید شکل ‏3‑6شکل ‏3‑6 ساختار دهی به پرسو جودر تب Any requestشما می‌توانید هر گونه اطلاعاتی را upload یا download کنید. شکل ‏3‑7شکل ‏3‑7 any request3-2 پیکربندی logstashوظیفه‌ی logstash در سه بخش تقسیم می‌شود:· ابتدا دریافت‌ لاگ‌ها از فایل یا از یک سیستم دیگر· پردازش بر روی لاگ‌ّها· ارسال‌ لاگ به elasticsearchابزار Logstash تنظیمات خود را از یک فایل پیکربندی برمی‌دارد، این فایل شامل سه بخش input، filter و output است هرکدام از این سه بخش به صورت جداگانه در ادامه توضیح داده می‌شوند3-2-1 دریافت لاگ در logstashهمان گونه که گفته شد یکی از وظایف logstash دریافت لاگ است، برای این کار از تنظیماتش را از قسمت input دریافت می‌کندفرض کنید که شما بر روی یک سیستم نرم‌افزار logstashرا نصب کرده‌اید حالا می‌خواهید که فایل‌هایی از مسیر /var/log را به سمت elasticsearch ارسال کنید.در این زمان همچنین یک دسته از سیستم‌ها هستند که با استفاده از نرم‌افزار‌هایی مانند rsyslog مشغول به ارسال لاگ سمت logstash بر روی یک پورت خاص در اینجا پورت 3333 هستند، در این زمان شما می‌توانید فرم input فایل پیکربندی را مانند برنامه ‏3‑6 وارد کنیدInput{tcp {port => 3333type => &quotremote syslog&quot}file {path => &quot/var/log/syslog&quottype => &quotlocal syslog&quot}file {path => &quot/var/log/alternatives.log&quottype => &quotlocal alternatives.log&quot}file {path => &quot/var/log/user.log&quottype => &quotlocal user.log&quot}file {path => &quot/var/log/kern.log&quottype => &quotlocal kern.log&quot}file {path => &quot/var/log/messages&quottype => &quotlocal messages&quot}}برنامه ‏3‑6 فرم inputهمانگونه که در برنامه ‏3‑6 مشاهده می‌کنید بخش tcpبرای گوش دادن بر روی یک پورت tcpاستفاده می‌شود و همچنین بخش fileبرای مشخص کردن یک fileدر یک مسیر خاص. کلمه‌ی typeمشخص می‌کند که typeورودی این لاگ‌ها چیست در واقع با افزودن یک type به یک مجموعه لاگ آن‌ها را برای پردازش راحت تر و همچنین شناسایی راحت‌تر مشخص می‌کنیمهمان گونه که گفته شد اطلاعات دریافتی از طریق inputباید فیلتر شوند تا به قالب قابل فهم تبدیل شوند. در حال حاضر لاگ‌های ورودی مشخص شده‌اند و شما می‌توانید بر روی آن‌ّها پردازش‌های مورد نیاز را انجام دهید البته برای قسمت input تنظیمات بیشتری وجود دارد که خارج حوزه‌ی این مستند است شما می‌توانید با مراجعه به سایت elastic جزئیات بیشتر را مشاهده کنید.3-2-2 پردازش بر روی لاگاز علل فیلتر کردن می‌توان گفت که باعث خواناتر شدن لاگ شده و همچنین می‌توان آن را در یک پایگاه داده با جزئیات بیشتر ذخیره کرد. همچنین می‌توان موراد بیشتری مانند اطلاعات زمانی به آن اضافه کرد یا این که از آن برخی اطلاعات اضافی را حذف کرد.هدف ما این است که اطلاعات را در فرم json تبدیل کنیم، در این قسمت فقط از pluginفیلتر کننده‌ی grokنام برده می‌شود و توضیحات آن را به خود خواننده واگذار می‌کنم، اما در صورت نیاز grokها از قبل نوشته شده‌ای مبتنی بر نیاز‌های شما در اینترنت موجود است و در اینجا در یک grok نمونه برای لاگ syslog آورده شده است که کافی است شما آن را کپی کنید از آن استفاده کنید.در مشخص شده است در صورتی که type یک log که در قسمت input ((در قسمت دریافت لاگ در logstash))وارد شده است برابر با remote syslog بود فیلترینگ grok را بر روی آن اعمال کن.نکته) شما می‌توانید خروجی این فیلترینگ را در صفحه‌ی نمایش مشاهده کنید که در قسمت بعدی (output) به آن می‌پردازیمfilter {if [type] == &quotremote syslog&quot {grok {match => { &quotmessage&quot => &quot%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}&quot }add_field => [ &quotreceived_at&quot, &quot%{@timestamp}&quot ]add_field => [ &quotreceived_from&quot, &quot%{host}&quot ]}syslog_pri { }date }match => [ &quotsyslog_timestamp&quot, &quotMMM d HH:mm:ss&quot, &quotMMM dd HH:mm:ss&quot ]}}برنامه ‏3‑7 grok filter3-2-3 ارسال لاگ‌های پردازش شدهبعد از این که لاگ‌ها دریافت و فیلتر شد نیاز است که ارسال شوند توصیه می‌شود که در ابتدا خروجی فایل پیکربندی را مشاهده کنید که بتوانید فیلد‌های آن را مشاهده کنید در صورت وجود کمبود آن را برطرف کنید.برای مشاهده‌ی خروجی فایل پیکربندی در ابتدا موارد گفته شده در قسمت‌های((‏3-2-1 و ‏3-2-2)) را در یک فایل به نام دلخواه با پسوند .conf وارد کنید در این مثال نام فایل logstash_sample.conf است. در مرحله‌ی بعد نوبت به تنظیم قسمت outputنرم‌افزار logstashمی‌شود.قسمت خروجی را مانند برنامه ‏3‑8 تنظیم می‌کنیمoutput {stdout {}}برنامه ‏3‑8 outputبرای debuggingدر قسمت stdout مانند برنامه ‏3‑9 عمل کنیدoutput {stdout { codec => rubydebug }}برنامه ‏3‑9 تنظیم خروجیفایلی که در اینجا مورد استفاده قرار می‌گیرد محتوای برنامه ‏3‑10 داردinput{tcp {port => 3333type => &quotremote syslog&quot}file {path => &quot/var/log/syslog&quottype => &quotlocal syslog&quot}file {path => &quot/var/log/alternatives.log&quottype => &quotlocal alternatives.log&quot}file {path => &quot/var/log/user.log&quottype => &quotlocal user.log&quot}file {path => &quot/var/log/kern.log&quottype => &quotlocal kern.log&quot}file {path => &quot/var/log/messages&quottype => &quotlocal messages&quot}}filter {if [type] == &quotremote syslog&quot {grok {match => { &quotmessage&quot => &quot%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}&quot }add_field => [ &quotreceived_at&quot, &quot%{@timestamp}&quot ]add_field => [ &quotreceived_from&quot, &quot%{host}&quot ]}syslog_pri { }date {match => [ &quotsyslog_timestamp&quot, &quotMMM d HH:mm:ss&quot, &quotMMM dd HH:mm:ss&quot ]}}}}output {stdout { codec => rubydebug }}برنامه ‏3‑10 محتوای فایل تستبرای تست فایل محتوای برنامه ‏3‑10 مانند ادامه عمل کنیدبه محلی که logstash را نصب کرده‌اید بروید و فایل پیکربندی را در آنجا کپی کنید، به طور معمول و در این داکیومنت در مسیر /opt محل قرار گیری فایل نصبی logstash است، حالا وارد مسیر /opt/logstash/bin/ شده و مانند برنامه ‏3‑11 با استفاده از option –fو نام فایل خروجی را مشاهده کنید./opt/logstash/bin/logstash –f logstash_sample.confبرنامه ‏3‑11 اجرای فایل پیکربندیخروجی دستور برنامه ‏3‑11 مانند شکل ‏3‑8شکل ‏3‑8خروجی فایل پیکربندیبرای زمانی که می‌خواهید خروجی logstash را به elasticsearch ارسال کنید نیاز است که برنامه ‏3‑12 در قسمت outputآن را اضافه کنید.elasticsearch { hosts => [&quotlocalhost:9200&quot] }برنامه ‏3‑12 ارسال به elasticsearchبنابراین قسمت output فایل کانفیگ برابر با برنامه ‏3‑13 است.output {elasticsearch { hosts => [&quotlocalhost:9200&quot] }}برنامه ‏3‑13 send to elastic3-2-4 رابط‌کاربری kibanaبعد از نصب نرم‌افزار kibana شما می‌توانید وارد browser شده و به مشاهده‌ی لاگ‌های ذخیره شده در elastic بپردازید. پورت مورد استفاده و به صورت پیش فرض 5601 است.در ابتدا که وارد رابط کاربری kibana شدید صفحه‌ای خالی مشاهده می‌کنید.شکل ‏3‑9شکل ‏3‑9 kibanaبرای مشاهده‌ی logها در نرم‌افزار kibana در ابتدا باید index یا indexهای مورد نظر را انتخاب کنیم در ابتدا وارد تب setting شده و نام index مورد نظر را انتخاب کنید برای مشاهده‌ی indexها می‌‌توانید از روش‌های گفته شده در بخش ((‏3-1)) استفاده کنید.صورتی که از logstash استفاده می‌کنید indexها با نام اولیه‌ی logstash ایجاد می‌شوند شما می‌توانید با استفاده از کاراکتر * تمامی indexهای موجود در logstashرا انتخال کنید، مانند:شکل ‏3‑10 انتخاب indexدر مرحله‌ی بعد تمامی تیک‌های گزینه‌ها را بردارید و create را کلیک کنید مانند شکل ‏3‑11تنظیم indexشکل ‏3‑11 تنظیم indexزمانی که indexمورد نظر را ایجاد کردید وارد تب discover شوید. بعد از ورود به تب discover می‌توانبد لاگ‌هایی که ذخیره شده‌اند را همراه با fildهای موجود مشاهده کنید.شکل ‏3‑12 مشاهده‌ی لاگ‌ّهادر صورتی که به جستوجوی خواصی نیازمند هستید باید بر زبان DSL طراحی شده برای elasticsearchتسلط داشته باشید، عبارتی که می‌خواهید جستوجو کنید را در نوار جستوجوی صفحه‌ی kibana وارد کنید. شکل ‏3‑13شکل ‏3‑13 نوار جستوجوبرای نمایش بصری یک query وارد تب visualizeشوید و نوع chart خود را انتخاب کنید به عنوان نمونه در اینجا PIE chart انتخاب می‌شود. شکل ‏3‑14 نمودار‌هاشکل ‏3‑14 نمودار‌هابعد از انتخاب نمودار pie chart اسم index از شما پرسیده می‌شود و به شما می‌گوید آیا از قبل پرس و جویی ذخیره دارید یا می‌خواید یک پرس و جوی جدید ایجاد کنید،‌ در اینجا گزینه‌ی from new search را انتخاب می‌کنیم و بعد از آن index مورد نظر را انتخاب می‌کنیم.شکل ‏3‑15 new searchبعد از انتخاب index مورد نظر صفحه‌ی ظاهر می‌شود که باید در این زمان مشخص کنیم که چه بخش‌هایی باید به صورت visual نمایش داده شوند.شکل ‏3‑16 visualeحال در قسمت چپ صفحه splite را انتخاب کنید و نوع داده‌هایی که قصد تجمع آن‌ها را دارید انتخاب نمائید.که در اینجا ما قصد داریم بر اساس زمان، دیتا جمع آوری کنیم و تنظیمات را مانند شکل ‏3‑17 تنظیمات visual قرار می‌دهیم.شکل ‏3‑17 تنظیمات visualبعد از انجام موارد گفته شده در تنظیمات بر روی قسمت play آن کلیک کنید. در این زمان، نمودار به قسمت‌ّهایی تقسیم می‌شود که هر قسمت نمایش دهنده‌ی میزان لاگ در بازه‌ی زمانی مشخص شده است.شکل ‏3‑18 visual splitشکل ‏3‑18 visual splitفیلتر‌‌های دیگری هم وجود دارد که می‌توان اعمال کرد و شما در نهایت می‌توانید یک نمودار را ذخیره کنید تا در مکان‌های دیگر و در زمان‌های دیگر از آن‌ها استفاده کنید مانند شکل ‏3‑19شکل ‏3‑19 ذخیره نمودارو بعد از ذخیره‌ی نمودار آن را در dashboard خود وارد کنید.برای وارد کردن در dashboard وارد تب dashboard شده و مانند شکل ‏3‑20 بر روی علامت + کلیک کنیدشکل ‏3‑20 افزودن به داشبوردو بعد از مشاهده‌ی چارت‌های ذخیره شده یکی را انتخاب کنید تا به داشبورد شما افزوده شود. شکل ‏3‑21شکل ‏3‑21 داشبورد3-3 موارد تکمیلیمجموعه نرم‌افزاری ELK از قابلیت‌های بسیاری برخوردار است که گفتن تمامی آنها خارج از محدوده‌ی این مستند است. مطالبی که تا کنون در این مستند نوشته شده و آموزش داده شده است برای آشنایی با ابزار تا حد مناسبی کافی است، در صورت نیاز به تنظیمات اضافی با مراجعه به شبکه‌ی جهانی internet نیاز‌های خود را برطرف کنید.در روند راه اندازی دستورات مفیدی که توانست به راه اندازی کمک کند عبارتند ازدستور netstat –nlp : برای مشاهده‌ی پورت‌های بازدستور lsof -nPi:9200 : برای مشاهده‌ی وضعیت یک پورتددستور tcpdump -Xnlo port 9200 : برای مشاهده‌ی دیتای ورودی و خروجی از یک پورت خاص برو روی یک اینترفیساین دستورات در بررسی اطمینان از ارسال داده‌ها کمک شایانی داشتند.بعد این که با پیکربندی‌های نرم‌افزار‌ها اشنا شدید نکاتی را برای اتصال این مجموعه نرم‌افزاری باید در نظر داشت که عبارتنداز:در صورتی که تمام نرم‌افزار‌های بر روی یک سیستم نصب می‌شوند احتیاج نیست که از PKIها استفاده کنید.در صورتی که نرم‌افزارها بر روی سیستم‌های متفاوتی نصب هستند بهتر است که با استفاده از دستورات گفته شده مانند tcpdump و lsof به بررسی باز بودن پورت‌ها و اطمینان از ارسال داده‌ها بپردازید.در صورت که قصد ندارید که مطابق با نصب این مستند این ابزار را راه اندازی کنید باید از سازگاری نسخه‌های مختلف نرم‌افزار‌ّها مطلع شوید که می‌توانید نسخه‌های سازگار را طریق آدرس [5] موجود در فصل مراجع مشاهده فرمائید4 رفع مشکلاتدر راه‌اندازی این مجموعه نرم‌افزار مشکلاتی به جود آمدند که در ادامه آن‌ها را بررسی و نحوه‌ی برطرف شدن آن‌ها را ذکر خواهم کرد.برای نصب نرم‌افزار از طریق repository احتیاج است که از فیلتر شکن استفاده شود به این علت که تحریم هستیم.در قسمت نصب بهتر است که ابتدا اتصال را بدون استفاده از مکانیزم امن سازی PKI استفاده کنید و بعد از برقراری اتصال در صورت نیاز از PKIها استفاده کنید.برای کار و اعمال تنظیمات در مجموعه نرم‌افزار با تمامی اصطلاحات آشنا شویدسعی کنید که قبل از اتصال kibana به elasticsearch توسط head plugin برای elastic از وجود indexها اطمینان حاصل کنید.5 مراجع[1] “information-logging-standard.” .[2] “Install ELK Stack on Debian 8 |,” Atlantic.Net Community. .[3] “Glossary of terms | Elasticsearch Reference [5.1] | Elastic.” [Online]. Available: https://www.elastic.co/guide/en/elasticsearch/reference/current/glossary.html. [Accessed: 01-Jan-2017].[4] Vic Hargrave, “Managing Your Security Logs with Elasticsearch,” 13:15:43 UTC.[5] “Elastic Support Matrix · Elasticsearch | Elastic.” [Online]. Available: https://www.elastic.co/support/matrix. [Accessed: 01-Jan-2017].این مطلب، بخشی از تمرینهای درس معماری نرم‌افزار در دانشگاه شهیدبهشتی است