Graylog چیه و چطور لاگ‌ها رو مدیریت و تحلیل کنیم؟

Graylog چیه و چطور لاگ‌ها رو مدیریت و تحلیل کنیم؟

Graylog یه پلتفرم رایگان و متن بازه برای جمع‌آوری ذخیره و تحلیل لاگ هاست هر لاگی که توی سرور تولید میشه رو میتونی بفرستی توی Graylog، اونجا ذخیره بشه جستجوش کنی نمودار بسازی و هشدار تنظیم کنی


چرا Graylog؟

همه لاگ ها یه جا

لاگ Nginx، MySQL، SSH سیستم و هر سرویس دیگه ای رو یه جا جمع میکنی دیگه لازم نیست برای عیب یابی به چندین سرور سر بزنی

جستجوی سریع و قدرتمند

مثل گوگل توی لاگ هات بگرد هر چیزی رو توی چند ثانیه پیدا میکنی

هشدار خودکار

اگه خطایی رخ بده یا تعداد خطاها از حدی بگذره Graylog بهت ایمیل میزنه یا توی Slack پیام میده

داشبورد و نمودار

از لاگ هات نمودار بساز. ببین کدوم خطا بیشتر تکرار میشه ترافیک سایت چه ساعتی بالاست یا کدوم IP ها بیشترین درخواست رو دارن

Stream (دسته بندی لاگ ها)

لاگ‌ها رو بر اساس نوع severity یا هر ویژگی دیگه دسته بندی کن مثلا یه Stream فقط برای خطاهای ۵۰۰ یکی برای SSH یکی برای یه سایت خاص

رایگان و متن بازه

نسخه Community کاملا رایگانه و محدودیت حجم نداره


Graylog چطور کار میکنه؟

Graylog سه بخش اصلی داره:

Graylog Server

مغز سیستم لاگ ها رو دریافت میکنه پردازش میکنه و ذخیره میکنه

Elasticsearch

لاگ ها اینجا ذخیره میشن Elasticsearch مثل یه دیتابیس فوق العاده سریع برای جستجوی متن عمل میکنه

MongoDB

تنظیمات Graylog و اطلاعات کاربران اینجا ذخیره میشه خود لاگ ها توی MongoDB نیستن


نصب Graylog روی اوبونتو

پیش‌نیازها:

آپدیت سیستم

sudo apt update && sudo apt upgrade -y

نصب Java

sudo apt install openjdk-11-jre-headless -y

نصب MongoDB:

wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -
echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
sudo apt update
sudo apt install mongodb-org -y
sudo systemctl enable mongod --now

نصب Elasticsearch:

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list
sudo apt update
sudo apt install elasticsearch -y

تنظیم Elasticsearch

sudo sed -i 's/#cluster.name: my-application/cluster.name: graylog/' /etc/elasticsearch/elasticsearch.yml
sudo sed -i 's/#network.host: 192.168.0.1/network.host: 127.0.0.1/' /etc/elasticsearch/elasticsearch.yml
sudo systemctl enable elasticsearch --now

نصب Graylog:

wget https://packages.graylog2.org/repo/packages/graylog-5.1-repository_latest.deb
sudo dpkg -i graylog-5.1-repository_latest.deb
sudo apt update
sudo apt install graylog-server -y

تنظیم Graylog:

تولید رمز عبور امن

sudo apt install pwgen -y
password_secret=$(pwgen -N 1 -s 96)
echo "password_secret = $password_secret"

هش رمز ادمین

admin_password="pass"

admin_hash=$(echo -n "$admin_password" | sha256sum | cut -d' ' -f1)


sudo sed -i "s/password_secret =/password_secret = $password_secret/" /etc/graylog/server/server.conf
sudo sed -i "s/root_password_sha2 =/root_password_sha2 = $admin_hash/" /etc/graylog/server/server.conf
sudo sed -i 's/#http_bind_address = 127.0.0.1:9000/http_bind_address = 0.0.0.0:9000/' /etc/graylog/server/server.conf

شروع Graylog:

sudo systemctl enable graylog-server --now

حالا توی مرورگر برو به:

http://SERVER-IP:9000

نام کاربری: admin

رمز عبور: همونی که بالا تنظیم کردی

فرستادن لاگ ها به Graylog

با Syslog

روی سرورهایی که می‌خوای لاگ بفرستی:

sudo nano /etc/rsyslog.conf

آخر فایل اضافه کن:

*.* @graylog-server-ip:5140;RSYSLOG_SyslogProtocol23Format


sudo systemctl restart rsyslog

با Filebeat (برای Nginx، Apache و...)

sudo apt install filebeat
sudo nano /etc/filebeat/filebeat.yml

تنظیمات:

filebeat.inputs:
- type: log
 enabled: true
 paths:
  - /var/log/nginx/access.log
  - /var/log/nginx/error.log

output.graylog:

 hosts: ["graylog-server-ip:12201"]


sudo systemctl enable filebeat --now

جستجو در Graylog

وقتی لاگ‌ها رسیدن توی سرچ بار میتونی بگردی:

همه خطاهای ۵۰۰:

status:500

خطاهای SSH:

sshd AND Failed

لاگ‌های یه IP خاص:

source:192.168.1.50

خطاهای ۲۴ ساعت اخیر:

level:error AND timestamp:[now-24h TO now]

ساخت Stream (دسته بندی)

برو به Streams > Create Stream

اسم بذار (مثلا Nginx Errors)

Rule اضافه کن (مثلا status:500 OR status:502)

ذخیره کن


حالا همه خطاهای Nginx توی یه Stream جدا هستن


ساخت هشدار (Alert)

روی Stream کلیک کن

تب Alerts > Create Alert

شرط رو بذار (مثلا تعداد خطاها در ۵ دقیقه بیشتر از ۱۰ تا بشه)

نوع Notification رو انتخاب کن (Email, Slack, Webhook)


داشبورد و نمودار

برو به Dashboards > Create Dashboard

Add Widget بزن

یه نمودار از Stream یا Search Result بساز

مثلا:

تعداد خطا در روز

Top 10 IP با بیشترین درخواست

توزیع Status Code ها

 amir

amir

برنامه نویس python, php طراح سایت