تصور کن توی دنیایی زندگی میکنی که پر از دادههای پراکنده و بینظمه. هر شرکتی کلی اطلاعات از مشتریها، محصولات و تراکنشها داره، ولی هیچ راهی برای هماهنگ کردن این دادهها وجود نداره. تیمهای IT و DevOps همیشه سردرگم و خستهان و هر روز با حجم زیادی از دادههای نامنظم سروکله میزنن. اینجا بود که نیاز به ابزاری مثل LogStash به شدت احساس شد. اگه LogStash نبود، همه ما توی دریای دادههای بیسروته غرق میشدیم و تحلیلها و گزارشها هیچوقت درست و حسابی از آب در نمیاومد.
LogStash یکی از ابزارهای خفن مجموعه ELK (Elasticsearch، LogStash، Kibana) است که برای جمعآوری، پردازش و انتقال دادهها استفاده میشه. این ابزار قدرتمند میتونه دادهها رو از منابع مختلف جمعآوری کنه، اونا رو پردازش و فیلتر کنه و در نهایت به مقصدی مثل Elasticsearch ارسال کنه.
در سال ۲۰۰۹، یه برنامهنویس به اسم جردن سسکین به خاطر مشکلاتی که توی مدیریت و تحلیل دادههای لاگ سیستمها داشت، تصمیم گرفت یه ابزار جدید بسازه. این ابزار باید میتونست دادههای مختلف رو از منابع مختلف جمعآوری و پردازش کنه و به صورت منسجم به یه مقصد مشخص ارسال کنه. نتیجه این تلاشها، پیدایش LogStash بود. هدف اصلی این ابزار، سادهسازی فرآیند مدیریت دادهها و بهبود عملکرد سیستمهای IT بود.
"دادهها، زبان جهان امروز هستند."
LogStash میتونه دادهها رو از منابع مختلفی مثل فایلهای لاگ، پایگاههای داده، APIها و حتی سرویسهای ابری جمعآوری کنه. بعدش میتونه این دادهها رو به فرمتی قابل استفاده تبدیل کنه و به مقصدی مثل Elasticsearch یا سایر پایگاههای داده ارسال کنه. برخی از کاربردهای اصلی LogStash عبارتند از:
استفاده از LogStash مزایا و معایب خاص خودش رو داره. در این بخش، به بررسی نقاط قوت و ضعف این ابزار میپردازیم تا بتونی تصمیم بهتری در مورد استفاده از اون بگیری. LogStash به خاطر انعطافپذیری و قابلیتهای پردازش داده، ابزار قدرتمندی است، اما ممکنه مصرف منابع بالایی داشته باشه و پیکربندی اون برای تازهکارها کمی پیچیده به نظر برسه.
برای نصب LogStash، اول باید بسته نرمافزاری اون رو دانلود و نصب کنی. میتونی از دستورات زیر برای نصب استفاده کنی:
sudo apt-get install apt-transport-https
این دستور برای نصب ابزار apt-transport-https استفاده میشه که برای دسترسی به مخازن HTTPS نیاز داریم.
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
این دستور مخزن LogStash رو به لیست منابع سیستم اضافه میکنه.
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
این دستور کلید GPG مخزن رو دانلود و به سیستم اضافه میکنه تا صحت بستهها تأیید بشه.
sudo apt-get update
sudo apt-get install logstash
دستورات بالا برای بهروزرسانی لیست بستهها و نصب LogStash استفاده میشه.
بعد از نصب، باید LogStash رو پیکربندی کنی. فایل پیکربندی LogStash به نام logstash.conf شناخته میشه و شامل سه بخش اصلیه:
در ادامه مرحله به مرحله به فرایند پیکربندی LogStash میپردازیم :
input {
file {
path => "/var/log/mylog.log"
start_position => "beginning"
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "mylogs-%{+YYYY.MM.dd}"
}
}
حالا که با مفهوم کلی LogStash آشنا شدیم، بیایید به بررسی اجزای اصلی اون بپردازیم. LogStash از چهار بخش اصلی تشکیل شده: ورودیها (Inputs)، فیلترها (Filters)، و خروجیها (Outputs). هر کدوم از این بخشها نقش مهمی در جمعآوری، پردازش و انتقال دادهها ایفا میکنن. در ادامه به بررسی جزئیات هر یک از این بخشها میپردازیم.
یکی از دلایلی که Logstash خیلی قدرتمنده، تواناییش توی جمعآوری لاگها و رویدادها از منابع مختلفه. با بیش از 50 پلاگین ورودی برای پلتفرمها، دیتابیسها و برنامههای مختلف، Logstash میتونه برای جمعآوری و پردازش دادهها از این منابع و ارسال اونا به سیستمهای دیگه برای ذخیرهسازی و تحلیل تعریف بشه.
ورودیهای رایج شامل فایل، beats، syslog، http، tcp، ssl (پیشنهادی)، udp و stdin هستن، ولی میتونی دادهها رو از خیلی منابع دیگه هم دریافت کنی.
ورودیها نقطه شروع هر پیکربندی هستن. اگه یه ورودی تعریف نکنی، Logstash به صورت خودکار یه ورودی stdin ایجاد میکنه. از اونجا که میتونی ورودیهای متعددی ایجاد کنی، مهمه که اونا رو نوعبندی و تگگذاری کنی تا بتونی به درستی اونا رو توی فیلترها و خروجیها مدیریت کنی.
این ورودی پیامهای ماشین رو به Logstash ارسال میکنه. پلاگین ورودی Logstash به صورت پیشفرض تنها از rsyslog RFC3164 پشتیبانی میکنه. فیلدهای دیگهای هم برای پیکربندی پلاگین وجود داره، از جمله فیلد grok_pattern. با یه الگوی grok مناسب، syslog غیر-RFC3164 هم پشتیبانی میشه. از نسخه 3.4.1، فیلدهای grok_pattern و syslog هر دو قابل پیکربندی هستن.
الگوی grok پیشفرض به این شکل است:
"<%{POSINT:priority}>%{SYSLOGLINE}"
اگه Logstash فقط یه لوله ساده بین تعدادی ورودی و خروجی بود، میتونستی به راحتی اون رو با سرویسهایی مثل IFTTT یا Zapier جایگزین کنی. خوشبختانه برای ما، اینطور نیست. Logstash از تعدادی پلاگین فیلتر بسیار قدرتمند پشتیبانی میکنه که بهت امکان میده رویدادها رو دستکاری، اندازهگیری و ایجاد کنی. این قدرت فیلترهاست که Logstash رو به ابزاری بسیار انعطافپذیر و با ارزش تبدیل میکنه.
مثل ورودیها، Logstash از تعدادی پلاگین خروجی پشتیبانی میکنه که بهت امکان میده دادههات رو به مکانها، خدمات و فناوریهای مختلف ارسال کنی. میتونی log رو با استفاده از خروجیهایی مثل فایل، CSV و S3 ذخیره کنی، اونا رو به پیامهایی با RabbitMQ و SQS تبدیل کنی، یا به خدمات مختلفی مثل HipChat، PagerDuty یا IRC ارسال کنی. تعداد ترکیبات ورودی و خروجی توی Logstash اون رو به یه مبدل رویداد واقعاً همهکاره تبدیل میکنه.
رویدادهای Logstash میتونن از منابع متعددی بیایند، بنابراین مهمه که بررسی کنی آیا یه رویداد باید توسط یه خروجی خاص پردازش بشه یا نه. اگه یه خروجی تعریف نکنی، Logstash به صورت خودکار یه خروجی stdout ایجاد میکنه.
input {
file {
path => "/var/log/apache2/access.log"
start_position => "beginning"
}
}
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "apache-logs-%{+YYYY.MM.dd}"
}
}
input {
syslog {
port => 514
}
}
filter {
grok {
match => { "message" => "%{SYSLOGLINE}" }
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "syslogs-%{+YYYY.MM.dd}"
}
}
input {
http_poller {
urls => {
myapi => "http://api.example.com/data"
}
request_timeout => 60
schedule => { every => "5m" }
codec => "json"
}
}
filter {
mutate {
add_field => { "[@metadata][index]" => "api-data-%{+YYYY.MM.dd}" }
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "%{[@metadata][index]}"
}
}
در دنیای مدیریت دادهها و لاگها، ابزارهای متنوعی وجود دارند که هر کدام ویژگیها و کاربردهای خاص خودشان را دارند. در اینجا به بررسی و مقایسه LogStash با چند ابزار مشابه میپردازیم تا ببینیم چه مزایا و معایبی نسبت به هم دارند.
Fluentd یک ابزار سبک و سریع برای جمعآوری لاگهاست که از منابع متعددی پشتیبانی میکند. برخلاف LogStash، ابزار Fluentd به عنوان یک ابزار کمتر شناختهشده محسوب میشود اما برای کاربرانی که به دنبال یک ابزار ساده و کارآمد هستند، گزینه مناسبی است.
Filebeat یک ابزار سبک و مناسب برای جمعآوری لاگهاست. این ابزار به راحتی میتواند دادههای لاگها را به LogStash یا Elasticsearch ارسال کند. برخلاف LogStash، ابزار Filebeat قابلیتهای پردازش دادههای محدودی دارد و بیشتر برای جمعآوری لاگها استفاده میشود.
Graylog یک ابزار پیشرفته برای تحلیل و مانیتورینگ لاگهاست. این ابزار قابلیتهای بسیار زیادی دارد اما راهاندازی و پیکربندی آن پیچیدهتر از LogStash است. Graylog برای کاربرانی که نیاز به تحلیلهای پیشرفته دارند، گزینه مناسبی است.
در جدول زیر، LogStash با ابزارهای مشابه مانند Fluentd، Filebeat و Graylog مقایسه شده است. این جدول به شما کمک میکند تا بفهمید کدام ابزار برای نیازهای خاص شما مناسبتر است و در چه مواردی هر یک از این ابزارها برتری دارند.
پارامتر | LogStash | Fluentd | Filebeat | Graylog |
---|---|---|---|---|
کاربرد اصلی | جمعآوری، پردازش و انتقال دادهها | جمعآوری و انتقال لاگها | جمعآوری لاگها | تحلیل و مانیتورینگ لاگها |
پشتیبانی از منابع | گسترده (بیش از 50 پلاگین) | گسترده (منابع متعدد) | محدود (منابع مشخص) | گسترده (منابع متعدد) |
سهولت استفاده | نسبتاً آسان | بسیار آسان | بسیار آسان | پیچیده |
انعطافپذیری | بالا | بالا | محدود | بسیار بالا |
مصرف منابع | زیاد | کم | کم | متوسط |
قابلیت پردازش داده | بالا | متوسط | محدود | بسیار بالا |
مناسب برای | شرکتهای بزرگ و پروژههای پیچیده | پروژههای کوچک و متوسط | جمعآوری لاگها | تحلیلهای پیشرفته |
توسعهپذیری | بالا (با پلاگینها) | بالا (با پلاگینها) | محدود | بسیار بالا (با پلاگینها) |
پشتیبانی و جامعه | بزرگ و فعال | در حال رشد | کوچک | بزرگ و فعال |
یه ابزار جمعآوری، پردازش و انتقال دادههاست که میتونه دادهها رو از منابع مختلف جمعآوری و به مقاصد مختلف ارسال کنه.
ELK Stack مجموعهای از سه ابزار Elasticsearch، LogStash و Kibana است که برای جستجو، تحلیل و نمایش دادهها استفاده میشه.
میتونی با استفاده از دستورات نصب، بسته نرمافزاری LogStash رو دانلود و نصب کنی. بعدش با پیکربندی فایلهای مربوطه، میتونی LogStash رو برای جمعآوری و پردازش دادهها آماده کنی.
LogStash میتونه دادهها رو از منابع مختلفی مثل فایلهای لاگ، پایگاههای داده، APIها و سرویسهای ابری جمعآوری کنه.
با استفاده از فایل پیکربندی logstash.conf که شامل بخشهای input، filter و output است، میتونی LogStash رو برای جمعآوری و پردازش دادهها پیکربندی کنی.
"هر دادهای که نمیتونی اون رو تحلیل کنی، فقط یه هزینه اضافیه.
LogStash ابزاری قدرتمند و انعطافپذیر برای جمعآوری، پردازش و انتقال دادههاست. با استفاده از این ابزار، میتونی دادههای خودت رو به صورت منسجم و قابل تحلیل جمعآوری کنی و به مقصد دلخواه ارسال کنی. با اینکه LogStash ممکنه در ابتدا پیچیده به نظر برسه، اما با کمی تمرین و مطالعه میتونی از تمام قابلیتهای اون بهرهمند بشی و عملکرد سیستمهای خودت رو بهبود بدی. استفاده از LogStash در شرکتهای معروف نشون دهنده قدرت و قابلیتهای این ابزار هست و میتونه بهت توی مدیریت بهتر دادهها کمک کنه.
امیدوارم این مقاله تونسته باشه تو رو با LogStash و کاربردهای اون به خوبی آشنا کنه و پاسخگوی سوالاتت باشه. حالا نوبت توئه که این ابزار رو امتحان کنی و از قابلیتهای بینظیر اون بهرهمند بشی.