افزودن فیلترهای Logstash برای بهبود گزارش گیری متمرکز – به زبان ساده


Logstash ابزاری قدرتمند برای متمرکز سازی و تحلیل log-ها به حساب میآید که کمک میکند دیدی کلی از محیط خود داشته باشیم و مشکلات سرورها را به سرعت تشخیص دهیم. یک روش برای افزایش کارآیی مجموعه ELK (اختصار Elasticsearch، Logstas و Kibana)، گردآوری log-های مهم اپلیکیشن و سازماندهی دادههای log با بهکارگیری فیلترها است. بدین ترتیب میتوان دادهها را به سهولت مورد تحلیل قرار داده و روی آنها کوئری اجرا کرد. ما فیلترهای خود را بر مبنای الگوهای Grok میسازیم که دادههای موجود در log-ها را به صورت تکههای مفیدی از اطلاعات درمیآورد.
اگر میخواهید با مراحل نصب مجموعه ELK بیشتر آشنا شوید، میتوانید از راهنمای «نصب مجموعه ELK روی سرور اوبونتو» استفاده کنید. در این مقاله به طور عمده روی شیوه استفاده از فیلترها روی log-های اپلیکیشنهای رایج مختلف تمرکز کردهایم.
پیشنیازها
برای مطالعه این راهنما باید یک سرور Logstash عملیاتی داشته باشید که دادههای log را از یک ارسالکننده مانند Filebeat دریافت کند. اگر Logstash را برای دریافت log-ها راهاندازی نکردهاید، میتوانید از راهنمایی که در بخش فوق معرفی کردیم به این منظور استفاده کنید.
فرضیات در مورد سرور ELK
- Logstash در مسیر opt/Logstash/ نصب شده است.
- فایلهای پیکربندی Logstash در مسیر etc/logstash/conf.d قرار دارند.
- یک فایل ورودی به نام 02beats-input.conf داریم.
- یک فایل خروجی به نام 03elasticsearch-output.conf داریم.
همچنین ممکن است لازم باشد با اجرای دستور زیر یک دایرکتوری به نام patterns روی سرور Logstash خود بسازید:
sudo mkdir -p /opt/logstash/patterns sudo chown logstash: /opt/logstash/patterns
فرضیات سرور کلاینت
- فرض میکنیم Filebeat را روی هر یک از سرورهای اپلیکیشن خود نصب کردهاید تا syslog/auth.log را به سرور Logstash ارسال کنند. اگر چنین نیست میتوانید از بخش راهاندازی Filebeat در مقالهای که در بخش پیشنیازها معرفی کردیم به این منظور استفاده کنید.
اگر تنظیمات شما فرق دارد، میتوانید بر اساس تنظیمات خود این راهنما را تغییر دهید.
Grok چیست؟
Grok از طریق تجزیه الگوهای متنی، با استفاده از عبارتهای منظم (regular expressions) اقدام به انتساب آنها به شناسههای مختلف میکند.
ساختار یک الگوی grok به صورت {PATTERN:IDENTIFIER}% است. فیلتر Logstash شامل یک دنباله از الگوهای grok است که بخشهای مختلف یک پیام log را با شناسههای مختلف تطبیق داده و به آنها انتساب میدهند و بدین ترتیب log ها سازماندهی میشوند.
شیوه استفاده از این راهنما
در هر بخش اصلی این راهنما که در ادامه میآید، جزییات پیکربندی اضافی که برای گردآوری و فیلتر کردن log-ها برای اپلیکیشن مفروض ضروری هستند ارائه شده است. در مورد هر اپلیکیشن میخواهیم که log-ها را گردآوری کرده و فیلتر کنیم و به این منظور باید تغییرات پیکربندی هم در مورد سرور کلاینت (Filebeat) و هم سرور Logstash اعمال کنید.
بخش فرعی الگوهای Logstash
اگر یک بخش فرعی برای الگوهای Logstash وجود داشته باشد شامل الگوهای grok خواهد بود که میتوان در مسیر opt/logstash/patterns/ روی سرور Logstash به یک فایل جدید اضافه کرد. بدین ترتیب امکان استفاده از الگوهای جدید در فیلترهای Logstash پدید میآید.
بخش فرعی فیلتر Logstash
بخش فرعی فیلتر Logstash شامل یک فیلتر است که میتوان بین فایلهای پیکربندی ورودی و خروجی به یک فایل جدید در مسیر etc/logstash/conf.d/ روی سرور Logstash اضافه کرد. این فیلتر شیوه تجزیه فایلهای log مربوطه را از سوی سرور Logstash تعیین میکند. به خاطر داشته باشید که پس از افزودن یک فیلتر جدید برای بارگذاری تغییرات باید سرور Logstash ریاستارت شود.
بخش فرعی کاوشگر (Prospector) برای Filebeat
کاوشگر Filebeat برای تعیین این که کدام log-ها باید به Logstash ارسال شوند، مورد استفاده قرار میگیرد. پیکربندیهای اضافی کاوشگرها را میتوان به فایل etc/filebeat/filebeat.yml/ دقیقاً پس از کاوشگرهای موجود در بخش prospectors اضافه کرد:
filebeat: # List of prospectors to fetch data. prospectors: - - /var/log/secure - /var/log/messages document_type: syslog - paths: - /var/log/app/*.log document_type: app-access ...
در مثال فوق، خط هایلایت شده آخر، نماینده کاوشگری است که همه فایلهای log. موجود در مسیر /var/log/app/ را با نوع app-access به Logstash ارسال میکند. پس از ایجاد هر نوع تغییر، Filebeat باید مجدداً بارگذاری شود تا همه تغییرات اعمال شوند.
دقت کنید که اینک شیوه استفاده از این راهنما را میدانید و در ادامه صرفاً شیوه گردآوری و نمایش log-ها را نمایش میدهیم.
اپلیکیشن Nginx
در این بخش روش گردآوری و فیلتر کردن log-های اپلیکیشن Nginx را بررسی میکنیم.
الگوهای Logstash برای Nginx
الگوهای log در Nginx در میان الگوهای پیشفرض Logstash قرار ندارند و از این رو باید آنها را به صورت دستی اضافه کنیم.
در سرور ELK یک فایل الگوی جدید به نام nginx میسازیم:
sudo vi /opt/logstash/patterns/nginx
سپس خطوط زیر را در آن وارد میکنیم:
NGINXACCESS %{IPORHOST:clientip} %{NGUSER:ident} %{NGUSER:auth} \[%{HTTPDATE:timestamp}\] "%{WORD:verb} %{URIPATHPARAM:request} HTTP/%{NUMBER:httpversion}" %{NUMBER:response} (?:%{NUMBER:bytes}|-) (?:"(?:%{URI:referrer}|-)"|%{QS:referrer}) %{QS:agent}
اینک فایل را ذخیره کرده و خارج شوید. الگوی NGINXACCESS دادهها را تجزیه کرده و به شناسههای مختلفی مانند clientip، ident، auth و غیره انتساب میدهد.
سپس مالکیت این فایل الگو را به Logstash تغییر دهید:
sudo chown logstash: /opt/logstash/patterns/nginx
فیلتر Logstash برای Nginx
روی سرور ELK یک فایل پیکربندی فیلتر جدید به نام 11-nginx-filter.conf ایجاد کنید:
sudo vi /etc/logstash/conf.d/11-nginx-filter.conf
سپس فیلتر زیر را اضافه کنید:
filter { if [type] == "nginx-access" { grok { match => { "message" => "%{NGINXACCESS}" } } } }
فایل را ذخیره کرده و خارج شوید. دقت کنید که این فیلتر تلاش میکند تا پیامهای از نوع nginx-access را با الگوی NGINXACCESS که در بخش فوق تعریف کردیم تطبیق دهد.
اینک Logstash را ریاستارت میکنیم تا پیکربندی مجدداً بارگذاری شود:
sudo service logstash restart
کاوشگر Filebeat برای Nginx
روی سرورهای Nginx فایل پیکربندی filebeat.yml را برای ویرایش باز کنید:
sudo vi /etc/filebeat/filebeat.yml
کاوشگر زیر را در بخش Filebeat اضافه کنید تا log-های دسترسی Nginx را با نوع nginx-access به سرور Logstash ارسال کند:
- paths: - /var/log/nginx/access.log document_type: nginx-access
فایل را ذخیره کرده و خارج شوید. Filebeat را مجدداً بارگذاری کنید تا تغییرات اعمال شوند:
sudo service filebeat restart
اینک log-های Nginx گردآوری و فیلتر میشوند.
اپلیکیشن وبسرور Apache HTTP
الگوهای log در آپاچی در الگوهای پیشفرض Logstash موجود هستند و از این رو راهاندازی فیلتر برای آن تقریباً آسان است.
دقت کنید که اگر از توزیعهای مبتنی بر RedHat مانند CentOS استفاده میکنید، log-ها به جای /var/log/apache2 که در این مثال بررسی شده است، در مسیر /var/log/httpd قرار دارند.
فیلتر Logstash برای آپاچی
روی سرور ELK یک فایل پیکربندی جدید به نام 12-apache.conf ایجاد کنید:
sudo vi /etc/logstash/conf.d/12-apache.conf
سپس فیلتر جدیدی به آن اضافه کنید:
filter { if [type] == "apache-access" { grok { match => { "message" => "%{COMBINEDAPACHELOG}" } } } }
فایل را ذخیره کرده و خارج شوید. دقت کنید که این فیلتر تلاش میکند تا پیامهای از نوع apache-access را با الگوی COMBINEDAPACHELOG که الگوی پیشفرض Logstash است تطبیق دهد.
اینک Logstash را ریاستارت کنید تا پیکربندی مجدداً بارگذاری شود:
sudo service logstash restart
کاوشگر Filebeat برای آپاچی
روی سرورهای آپاچی خود فایل پیکربندی به نام filebeat.yml را برای ویرایش باز کنید:
sudo vi /etc/filebeat/filebeat.yml
کاوشگر زیر را در بخش Filebeat اضافه کرده و log-های آپاچی از نوع apache-access را به سرور Logstash خود ارسال کنید:
- paths: - /var/log/apache2/access.log document_type: apache-access
فایل را ذخیره کرده و خارج شوید. Filebeat را ریاستارت کنید تا تغییرات اعمال شوند.
sudo service filebeat restart
اینک log-های آپاچی گردآوری شده و فیلتر میشوند.
سخن پایانی
امکان جمعآوری و تجزیه log-ها از هر نوعی در ELK وجود دارد. شما میتوانید این موضوع را با نوشتن فیلترها و الگوهایی برای فایلهای log دیگر امتحان کنید. هر نکتهای که به نظرتان میرسد را میتوانید در بخش نظرات با ما و دیگر خوانندگان فرادرس در میان بگذارید. اگر با کیبانا آشنایی ندارید، میتوانید از راهنمای «شیوه استفاده از داشبوردها و بصریسازیهای Kibana» استفاده کنید.
اگر این مطلب برایتان مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای برنامهنویسی
- نصب مجموعه ELK روی سرور اوبونتو 14.۰4 — از صفر تا صد
- ابزارها و راهکارهای مدیریت وبسایتها
- گزارشگیری (Logging) متمرکز در توزیع نهایی وب اپلیکیشن ها — راهنمای جامع
- آموزش استیمول سافت | کامل، رایگان و پروژه محور — به زبان ساده
==
کاربرد filebeat دقیقا چی هستش؟
چه تفاوتی با خود logstash داره؟
امکانش هست خیلی خلاصه این موارد رو توضیح بدین؟