مقدمه
مدیریت گزارش کارآمد وب سرور برای حفظ عملکرد وب سایت شما، عیب یابی مشکلات و به دست آوردن بینش در مورد رفتار کاربر بسیار مهم است. آپاچی یکی از محبوب ترین وب سرورها است. گزارش های دسترسی و خطا تولید می کند که حاوی اطلاعات ارزشمندی است. برای مدیریت و تجزیه و تحلیل موثر این گزارشها، میتوانید از Logstash برای پردازش و ارسال آنها به OpenSearch مدیریتشده DigitalOcean برای نمایهسازی و تجسم استفاده کنید.
در این آموزش، ما شما را از طریق نصب Logstash در Droplet، پیکربندی آن برای جمعآوری گزارشهای Apache و ارسال آنها به Managed OpenSearch برای تجزیه و تحلیل راهنمایی میکنیم.
پیش نیازها
- Droplet/s با نصب وب سرور آپاچی.
- Cluster OpenSearch مدیریت شده
مرحله 1 – نصب Logstash
Logstash را می توان با استفاده از فایل های باینری یا از طریق مخازن بسته نصب کرد. برای مدیریت راحت تر و به روز رسانی، استفاده از مخازن بسته به طور کلی توصیه می شود.
در این بخش، ما شما را از طریق نصب Logstash بر روی Droplet خود با استفاده از APT و YUM Package Manager راهنمایی می کنیم.
بیایید سیستم عامل را شناسایی کنیم:
cat /etc/os-release
برای سیستم های مبتنی بر APT (Ubuntu/Debian)
کلید امضای عمومی را دانلود و نصب کنید:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elastic-keyring.gpg
ممکن است لازم باشد قبل از ادامه، بسته apt-transport-https را در دبیان نصب کنید:
sudo apt-get install apt-transport-https
تعریف مخزن را در /etc/apt/sources.list.d/elastic-8.x.list ذخیره کنید:
echo "deb [signed-by=/usr/share/keyrings/elastic-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-8.x.list
برای اضافه کردن مخزن Logstash از روش echo که در بالا توضیح داده شد استفاده کنید. از add-apt-repository استفاده نکنید زیرا یک ورودی deb-src را نیز اضافه می کند، اما ما یک بسته منبع ارائه نمی دهیم. اگر ورودی deb-src را اضافه کرده باشید، خطای زیر را مشاهده خواهید کرد:
Unable to find expected entry 'main/source/Sources' in Release file (Wrong sources.list entry or malformed file)
فقط ورودی deb-src را از فایل /etc/apt/sources.list حذف کنید و نصب باید طبق انتظار انجام شود.
به روز رسانی sudo apt-get را اجرا کنید و مخزن برای استفاده آماده است. شما می توانید آن را با:
sudo apt-get update && sudo apt-get install logstash
برای سیستم های مبتنی بر YUM (CentOS/RHEL)
کلید امضای عمومی را دانلود و نصب کنید:
sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
موارد زیر را در فایل /etc/yum.repos.d/logstash.repo خود اضافه کنید. میتوانید از «تی» برای بهروزرسانی و ایجاد فایل استفاده کنید.
sudo tee /etc/yum.repos.d/logstash.repo > /dev/null <<EOF
[logstash-8.x]
name=Elastic repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF
مخزن شما آماده استفاده است. شما می توانید آن را با:
sudo yum install logstash
برای اطلاعات بیشتر، لطفاً به راهنمای نصب Logstash مراجعه کنید.
مرحله 2 – پیکربندی Logstash برای ارسال گزارش ها به OpenSearch
خط لوله Logstash از سه مرحله اصلی تشکیل شده است: ورودی، فیلتر و خروجی. خطوط لوله Logstash از پلاگین ها استفاده می کنند. می توانید از افزونه های انجمن استفاده کنید یا پلاگین های خود را ایجاد کنید.
- ورودی: این مرحله داده ها را از منابع مختلف جمع آوری می کند. Logstash از افزونههای ورودی متعددی برای مدیریت منابع داده مانند فایلهای گزارش، پایگاههای داده، صفهای پیام و خدمات ابری پشتیبانی میکند.
- فیلتر: این مرحله داده های جمع آوری شده در مرحله ورودی را پردازش و تبدیل می کند. فیلترها میتوانند دادهها را اصلاح، غنیسازی و ساختار بدهند تا آنها را مفیدتر و تحلیل کنند.
- خروجی: این مرحله داده های پردازش شده را به مقصد ارسال می کند. مقصدها میتوانند شامل پایگاههای داده، فایلها و ذخیرههای داده مانند OpenSearch باشند.
مرحله 3 – افزونه Open Search Output را نصب کنید
پلاگین خروجی OpenSearch با اجرای دستور زیر قابل نصب است:
/usr/share/logstash/bin/logstash-plugin install logstash-output-opensearch
اطلاعات بیشتر را می توانید در این مخزن logstash-output-opensearch-plugin پیدا کنید.
حالا بیایید یک خط لوله ایجاد کنیم:
یک فایل جدید در مسیر /etc/logstash/conf.d/ به نام apache_pipeline.conf ایجاد کنید و مطالب زیر را کپی کنید.
input {
file {
path => "/var/log/apache2/access.log"
start_position => "beginning"
sincedb_path => "/dev/null"
tags => "apache_access"
}
file {
path => "/var/log/apache2/error.log"
start_position => "beginning"
sincedb_path => "/dev/null"
tags => "apache_error"
}
}
filter {
if "apache_access" in [tags] {
grok {
match => { "message" => "%{HTTPD_COMBINEDLOG}" }
}
mutate {
remove_field => [ "message","[log][file][path]","[event][original]" ]
}
} else {
grok {
match => { "message" => "%{HTTPD24_ERRORLOG}" }
}
}
}
output {
if "apache_access" in [tags] {
opensearch {
hosts => "https://<OpenSearch-Hostname>:25060"
user => "doadmin"
password => "<your_password>"
index => "apache_access"
ssl_certificate_verification => true
}
} else {
opensearch {
hosts => "https://<OpenSearch-Hostname>:25060"
user => "doadmin"
password => "<your_password>"
index => "apache_error"
ssl_certificate_verification => true
}
}
}
<OpenSearch_Host> را با نام میزبان سرور OpenSearch خود و <OpenSearch_Password> را با رمز عبور OpenSearch خود جایگزین کنید.
بیایید پیکربندی بالا را تجزیه کنیم.
- INPUT: برای پیکربندی یک منبع برای رویدادها استفاده می شود. افزونه ورودی فایل در اینجا استفاده می شود.
- path => “/var/log/apache2/access.log” : مسیر فایل لاگ دسترسی آپاچی را مشخص می کند که Logstash از آن بخواند.
مطمئن شوید که سرویس Logstash به مسیر ورودی دسترسی دارد.
- start_position => “beginning”: مشخص می کند که Logstash باید از کجا شروع به خواندن فایل log کند. “شروع” نشان می دهد که Logstash باید پردازش فایل را از ابتدا شروع کند نه از پایان
- sincedb_path => “/dev/null”: مسیر فایل sincedb را مشخص می کند. فایلهای Sincedb توسط Logstash برای پیگیری موقعیت فعلی در فایلهای گزارش استفاده میشوند و به آن امکان میدهند در صورت راهاندازی مجدد یا خرابی، از همان جایی که متوقف شده است، از سر بگیرد.
- tags => “apache_access”: یک برچسب به رویدادهای خوانده شده از این ورودی اختصاص می دهد. تگها برای شناسایی و فیلتر کردن رویدادها در Logstash مفید هستند، که اغلب در مراحل پاییندستی در مراحل خروجی یا فیلتر کردن پیکربندی استفاده میشوند. ما از برچسب ها برای دومی استفاده می کنیم
- FILTER: برای پردازش رویدادها استفاده می شود.
شروع با شرطی ها:
(if "apache_access" in [tags]):
این بررسی می کند که آیا تگ apache_access در قسمت [tags] رویدادهای گزارش ورودی وجود دارد یا خیر. ما از این شرطی برای اعمال فیلتر GROK مناسب برای دسترسی آپاچی و گزارش های خطا استفاده می کنیم.
- فیلتر Grok (برای گزارش های دسترسی آپاچی):
grok {
match => { "message" => "%{HTTPD_COMBINEDLOG}" }
}
فیلتر grok %{HTTPD_COMBINEDLOG} یک الگوی از پیش تعریف شده در Logstash است که برای تجزیه فرمت گزارش دسترسی ترکیبی آپاچی استفاده میشود. این فیلدهایی مانند آدرس IP، مهر زمانی، روش HTTP، URI، کد وضعیت و غیره را از قسمت پیام رویدادهای دریافتی استخراج میکند.
- Mutate Filter Remove (اختیاری): پس از تجزیه لاگ های آپاچی، از mutate-remove برای حذف برخی فیلدها استفاده می کنیم.
mutate {
remove_field => [ "message","[log][file][path]","[event][original]" ]
}
- شرط دیگر: اگر تگ apache_access در [tags] نباشد، بلوک else اجرا میشود. این بلوک else حاوی فیلتر GROK دیگری برای لاگ های خطای آپاچی است.
grok {
match => { "message" => "%{HTTPD24_ERRORLOG}" }
}
این فیلتر %{HTTPD24_ERRORLOG} پیامهایی را که با فرمت گزارش خطای آپاچی مطابقت دارند، تجزیه میکند. فیلدهای مربوط به گزارش های خطا مانند مهر زمانی، سطح گزارش، پیام خطا و غیره را استخراج می کند.
الگوهای GROK را میتوانید در: https://github.com/logstash-plugins/logstash-patterns-core/tree/main/patterns پیدا کنید.
- OUTPUT: افزونه خروجی رویدادها را به یک مقصد خاص ارسال می کند.
بلوک خروجی با یک شرط if شروع می شود. ما در اینجا از شرط شرطی استفاده می کنیم
if "apache_access" in [tags] {}
اگر شرطی برای مسیریابی گزارشها به OpenSearch به دو نمایه جداگانه، apache_error و apache_access استفاده میشود.
بیایید افزونه OpenSearch Output را بررسی کنیم:
hosts => "https://XXX:25060" Your Open search Hostname
user => "doadmin" Your Open search Username
password => "XXXXX" OpenSearch Password
index => "apache_error" Index name in OpenSearch
ssl_certificate_verification => true Enabled SSL certificate verification
مرحله 4 – Logstash را شروع کنید
پس از پیکربندی خط لوله، سرویس Logstash را راه اندازی کنید:
systemctl enable logstash.service
systemctl start logstash.service
systemctl status logstash.service
مرحله 5 – عیب یابی
اتصال را بررسی کنید
با آزمایش اتصال میتوانید تأیید کنید که Logstash میتواند به OpenSearch متصل شود:
curl -u your_username:your_password -X GET "https://your-opensearch-server:25060/_cat/indices?v"
<your-opensearch-server> را با نام میزبان سرور OpenSearch و <your_username>، <your_password> را با اعتبار OpenSearch خود جایگزین کنید.
بلع داده ها
اطمینان حاصل کنید که داده ها به درستی در OpenSearch نمایه شده اند:
curl -u your_username:your_password -X GET "http://your-opensearch-server:25060/<your-index-name>/_search?pretty"
<your-opensearch-server> را با نام میزبان سرور OpenSearch و <your_username>، <your_password> را با اعتبار OpenSearch خود جایگزین کنید. به طور مشابه، <your-index-name> با نام ایندکس.
فایروال و پیکربندی شبکه
اطمینان حاصل کنید که قوانین فایروال و تنظیمات شبکه به ترافیک بین Logstash و OpenSearch در پورت 25060 اجازه می دهد.
Logs
گزارشهای مربوط به Logstash را میتوانید در /var/log/logstash/logstash-plain.log پیدا کنید.
نتیجه
در این راهنما، راهاندازی Logstash را برای جمعآوری و ارسال گزارشهای Apache به OpenSearch انجام دادیم. در اینجا خلاصه ای سریع از آنچه پوشش دادیم آورده شده است:
نصب Logstash: ما نحوه استفاده از مدیران بسته APT یا YUM را، بسته به توزیع لینوکس، برای نصب Logstash در Droplet توضیح دادیم.
پیکربندی Logstash: ما فایل پیکربندی Logstash را ایجاد و تنظیم کردیم تا مطمئن شویم که لاگ های آپاچی به درستی تجزیه شده و به OpenSearch ارسال می شوند.
تأیید در OpenSearch: ما یک الگوی فهرست را در داشبوردهای OpenSearch تنظیم می کنیم تا تأیید کنیم که گزارش های شما به درستی ایندکس شده اند و برای تجزیه و تحلیل قابل مشاهده هستند.
با تکمیل این مراحل، اکنون باید یک راه اندازی کاربردی داشته باشید که در آن Logstash لاگ های آپاچی را جمع آوری کرده و به OpenSearch ارسال می کند.