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 ها