آموزش elk stack به صورت کاملا کاربردی و اصولی
در قسمت قبل به سوال شما مبنی بر اینکه elk چیست پاسخ دادیم و همچنین آموزش دادیم که چگونه به نصب آن اقدام نمایید. حال در این مقاله قصد داریم تا برای تسلط بیشتر شما آموزش elk stack را به صورت کامل و جامع پیش ببریم؛ با ما همراه باشید.
آموزش elk stack
برای این آموزش، نمونهای از لاگهای آپاچی را آماده کردهایم که روزانه بهروزرسانی میشوند.
یک فایل پیکربندی Logstash جدید در آدرس زیر ایجاد کنید:
/etc/logstash/conf.d/apache-01.conf: sudo vim /etc/logstash/conf.d/apache-01.conf
کانفیگ Logstash زیر را وارد کنید
input { file { path => "/home/ubuntu/apache-daily-access.log" start_position => "beginning" sincedb_path => "/dev/null" } } filter { grok { match => { "message" => "%{COMBINEDAPACHELOG}" } } date { match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ] } geoip { source => "clientip" } } output { elasticsearch { hosts => ["localhost:9200"] } }
Logstash را استارت کنید:
sudo service logstash start
اگر همه چیز درست باشد ، یک لیست Logstash جدید در Elasticsearch ایجاد میشود که میتوان الگوی آن را در Kibana تعریف کرد. در Kibana، به Management → Kibana Index Patterns بروید. اگر مراحل نصب و اجرای Metricbeat را دنبال کرده باشید، کیبانا باید ایندکس Logstash و همراه با شاخص Metricbeat را نمایش دهد.
آموزش elk stack ؛ ورود logstash
“logstash-*” را به عنوان الگو وارد کنید و در مرحله بعد @timestamp را به عنوان قسمت Time Filter خود انتخاب کنید.
گزینه Create index pattern را بزنید تا دادهها تجزیهوتحلیل شوند. سپس به تب Discover در Kibana بروید تا دادهها را ببینید.
شما اولین pipline داده ELK خود را با استفاده از Elasticsearch، Logstash و Kibana راهاندازی کردهاید. همانطور که قبلا ذکر شد، این تنها یک نمونه محیطی از نصب ELK است. سیستمها و پلتفرمهای دیگری نیز وجود دارند که در مقالات دیگر انها را پوشش خواهیم داد.
Logstash چیست؟
Logstash به عنوان یک ابزار open source توسعه یافته برای مدیریت حجم زیادی از دادهها از چندین منبع استفاده میشوند. Logstash پس از ادغام با ELK، وظیفه پردازش پیامهای بهبود آنها و… را دارد. سپس آنها را به یک مقصد مشخص برای ذخیرهسازی ارسال مینماید.
Logstash همچنان یک جزء حیاتی از stack باقی مانده است. نسخه جدید یک موتور اجرایی کاملاً جدید که در نسخه 7.0 در دسترس قرار گرفته است که در نهایت به مطمئنتر کردن گزارش با ELK نسبت به آنچه قبلا بود کمک میکند.
آموزش elk stack ؛ آشنایی با پیکربندی Logstash
رویدادهایی که توسط Logstash جمعآوری و پردازش میشوند سه مرحله را طی میکنند: جمعآوری، پردازش و ارسال. اینکه کدام داده جمع آوری شود، چگونه پردازش شود و به کجا ارسال شود، در یک فایل پیکربندی Logstash که pipeline را تعریف میکند، انجام میشوند.
هر یک از این مراحل در فایل پیکربندی Logstash با آنچه پلاگین نامیده میشود تعریف میشود. پلاگین ورودی برای مرحله جمعآوری دادهها، پلاگین فیلتر برای مرحله پردازش و پلاگین خروجی برای مرحله ارسال. هر دو پلاگین ورودی و خروجی از codecs پشتیبانی میکنند که به شما امکان میدهند دادههای خود را رمزگذاری یا رمزگشایی کنید.
افزونه ورودی در Logstash
یکی از چیزهایی که Logstash را بسیار قدرتمند میکند، توانایی آن در جمع آوری گزارشها و رویدادها از منابع مختلف است. با استفاده از بیش از 50 افزونه ورودی برای پلتفرمها، پایگاههای داده و برنامههای مختلف، میتوان Logstash را برای جمعآوری و پردازش دادهها از این منابع و ارسال آنها به سیستمهای دیگر برای ذخیرهسازی و تجزیه و تحلیل تعریف کرد.
رایجترین ورودیهای مورد استفاده عبارتند از: file، beats، syslog، http، tcp، udp، stdin. لازم به ذکر است که شما میتوانید دادهها را از منابع دیگر نیز دریافت کنید.
آموزش elk stack ؛ پلاگین فیلتر چیست؟
Logstash از تعدادی افزونه فیلتر بسیار قدرتمند پشتیبانی میکند که شما را قادر میسازد لاگها را دستکاری و پردازش کنید. قدرت این فیلترها است که Logstash را به ابزاری بسیار همه کاره و ارزشمند برای تجزیه دادهها تبدیل میکند. فیلترها را میتوان با دستورات شرطی ترکیب کرد تا در صورت رعایت یک معیار خاص، یک عمل انجام شود.
پلاگین خروجی
در این قسمت از آموزش elk stack میخواهیم شما را با پلاگین خروجی آشنا کنیم. مانند ورودی، Logstash از تعدادی افزونه خروجی پشتیبانی میکند که به شما امکان میدهد دادههای خود را به مکانها، خدمات و فناوریهای مختلف منتقل کنید. میتوانید events را با استفاده از خروجیهایی مانند File، CSV و S3 ذخیره، آنها را با RabbitMQ و SQS به پیام تبدیل یا به سرویسهای مختلفی مانند HipChat، PagerDuty یا IRC ارسال کنید. تعداد ترکیب ورودیها و خروجیها در Logstash آن را تبدیل به یک ترانسفورماتور events واقعا همه کاره میکند.
Logstash Codecs چیست ؟
Codecs هم در ورودی و هم در خروجی قابل استفاده هستند. Codecs ورودی روشی مناسب برای رمزگشایی دادههای شما قبل از ورود به ورودی ارائه میدهند. Codecs خروجی روشی مناسب برای رمزگذاری دادههای شما قبل از خروج از خروجی ارائه میدهند.
رایجترین Codecs ها
Codecs پیشفرض: برای متن ساده و بدون محدودیت بین events است
codec json: برای رمزگذاری events JSON در ورودیها و رمزگشایی پیامهای json در خروجیها است.
codec json_lines: به شما امکان میدهد رویدادهای json را که با \n محدود شدهاند دریافت و رمزگذاری کنید یا پیامهای JSON را که با \n محدود شدهاند در خروجیها رمزگشایی کنید.
“rubydebug” که در پیدا کردن مشکل بسیار مفید است، به شما امکان میدهد رویدادهای Logstash را به عنوان objects در داده خروجی دریافت کنید.
پیکربندی logstash
امیدواریم که تا به این قسمت، آموزش elk stack برای شما مفید بوده باشد. حال بیایید دیگر بخشهای Logstash را نیز با هم بررسی نماییم.
Logstash دارای یک DSL با پیکربندی ساده است که به شما امکان میدهد ورودی ها، خروجی ها و فیلترهای توضیح داده شده در بالا را به همراه گزینه های خاص آنها مشخص کنید. ترتیب اهمیت دارد؛ به ویژه در اطراف فیلترها و خروجی ها. زیرا پیکربندی اساساً به کد تبدیل میشود و سپس اجرا میشود. هنگام نوشتن تنظیمات خود این را در نظر داشته باشید.
منظور از ورودی در پیکربندی لاگ استش چیست؟
بخش ورودی در فایل پیکربندی، افزونه ورودی را برای استفاده تعریف میکند. هر افزونه گزینه های پیکربندی خاص خود را دارد که قبل از استفاده باید در مورد آنها تحقیق کنید.
input { file { path => "/var/log/apache/access.log" start_position => "beginning" } }
در اینجا ما از افزونه ورودی فایل استفاده می کنیم. ما مسیر فایلی را که میخواهیم اطلاعات آن را جمعآوری کنیم وارد کردیم.
فیلتر
قسمت فیلتر در فایل پیکربندی مشخص می کند که می خواهیم از چه پلاگین فیلتری استفاده کنیم یا به عبارت دیگر چه پردازشی را می خواهیم روی لاگ ها اعمال کنیم. هر افزونه گزینه های پیکربندی خاص خود را دارد که قبل از استفاده باید در مورد آنها تحقیق کنید.
filter { grok { match => { "message" => "%{COMBINEDAPACHELOG}" } } date { match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ] } geoip { source => "clientip" } }
در این مثال ما در حال پردازش لاگ های دسترسی آپاچی هستیم
فیلتر grok که رشته گزارش را تجزیه می کند و event را با اطلاعات مربوطه پر می کند.
فیلتر date برای تجزیه فیلد تاریخ که رشته ای به عنوان فیلد timestamp است (هر pipeline
Logstash به یک timestamp نیاز دارد، بنابراین این یک فیلتر ضروری است).
فیلتر geoip برای پر کردن فیلد client ip با داده های جغرافیایی. استفاده از این فیلتر، فیلدهای جدیدی را بر اساس فیلد clientip به رویداد اضافه می کند.
آموزش elk stack؛ مفهوم خروجی در پیکربندی Logstash
قسمت خروجی در فایل پیکربندی مقصدی را که می خواهیم لاگ ها را به آن ارسال کنیم را مشخص می کند. مانند قبل، هر افزونه گزینه های پیکربندی خاص خود را دارد که قبل از استفاده باید در مورد آنها تحقیق کنید.
output { elasticsearch { hosts => ["localhost:9200"] } }
با کنار هم گذاشتن همه، فایل پیکربندی Logstash باید به صورت زیر باشد:
input { file { path => "/var/log/apache/access.log" start_position => "beginning" } } filter { grok { match => { "message" => "%{COMBINEDAPACHELOG}" } } date { match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ] } geoip { source => "clientip" } } output { elasticsearch { hosts => ["localhost:9200"] } }