نصب Grafana را روی Ubuntu 22.04

به اشتراک بگذارید

how-to-install-and-secure-grafana-on-ubuntu-22-04

فهرست مطالب

Grafana یک ابزار open-source قدرتمند برای visualization و monitoring داده‌هاست که با منابع داده‌ای مانند Prometheus، InfluxDB، Graphite و ElasticSearch یکپارچه می‌شود. این ابزار به شما امکان می‌دهد داشبوردهای تعاملی بسازید، هشدارها و اعلان‌ها تنظیم کنید و با قابلیت‌های sharing داخلی، همکاری با تیم خود را آسان کنید. در این آموزش، شما را با مراحل نصب Grafana روی Ubuntu 22.04، ایمن‌سازی آن با SSL certificate و reverse proxy با Nginx، و تنظیم احراز هویت GitHub برای مدیریت بهتر تیم آشنا می‌کنیم. این راهنما برای مبتدیان و حرفه‌ای‌ها طراحی شده تا به‌راحتی Grafana را راه‌اندازی کنید.

پیش‌نیازهای نصب Grafana روی Ubuntu 22.04

قبل از شروع، باید موارد زیر را آماده کنید:

  • یک سرور Ubuntu 22.04 با کاربر sudo غیرروت و فایروال فعال. اطمینان حاصل کنید که سرور شما برای میزبانی برنامه‌ها بهینه شده است.
  • دامنه‌ای معتبر (FQDN) که به سرور شما اشاره کند، با Nginx و SSL certificate فعال. می‌توانید از ابزارهای رایگان مانند Let’s Encrypt برای دریافت گواهی SSL استفاده کنید.
  • حساب GitHub و عضویت در یک سازمان GitHub برای تنظیم احراز هویت (اختیاری).

با آماده‌سازی این پیش‌نیازها، می‌توانید نصب و ایمن‌سازی Grafana را با اطمینان آغاز کنید.

گام 1: نصب Grafana روی Ubuntu 22.04

برای نصب Grafana، از مخزن APT رسمی آن استفاده می‌کنیم تا به‌روزرسانی‌ها ساده‌تر شوند. ابتدا کلید GPG Grafana را دانلود و به فرمت باینری تبدیل کنید:

wget -q -O - https://packages.grafana.com/gpg.key | gpg --dearmor | sudo tee /usr/share/keyrings/grafana.gpg > /dev/null

گزینه -q خروجی wget را مخفی می‌کند و -O فایل را به ترمینال ارسال می‌کند. > /dev/null خروجی را برای امنیت پنهان می‌کند.

مخزن Grafana را به منابع APT اضافه کنید:

echo "deb [signed-by=/usr/share/keyrings/grafana.gpg] https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list

کش APT را به‌روزرسانی کنید:

sudo apt update

حالا Grafana را نصب کنید:

sudo apt install grafana

پس از نصب، سرویس Grafana را راه‌اندازی کنید:

sudo systemctl start grafana-server

برای اطمینان از اجرای صحیح، وضعیت سرویس را بررسی کنید:

sudo systemctl status grafana-server

خروجی شبیه این خواهد بود:

● grafana-server.service - Grafana instance
     Loaded: loaded (/lib/systemd/system/grafana-server.service; disabled; vendor preset: enabled)
   Active: active (running) since Tue 2022-09-27 14:42:15 UTC; 6s ago
     Docs: http://docs.grafana.org
 Main PID: 4132 (grafana-server)
    Tasks: 7 (limit: 515)
...

عبارت active (running) نشان می‌دهد سرویس به‌درستی اجرا شده است.

برای شروع خودکار Grafana هنگام بوت:

sudo systemctl enable grafana-server

خروجی تأیید می‌کند که systemd لینک‌های لازم را ایجاد کرده:

Synchronizing state of grafana-server.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable grafana-server
Created symlink /etc/systemd/system/multi-user.target.wants/grafana-server.service → /usr/lib/systemd/system/grafana-server.service.

Grafana حالا نصب شده و آماده استفاده است. در ادامه، اتصال به آن را ایمن می‌کنیم.

گام 2: تنظیم Reverse Proxy با Nginx

برای ایمن‌سازی اتصال به Grafana، از SSL certificate استفاده می‌کنیم تا داده‌ها رمزنگاری شوند. ابتدا Nginx را به‌عنوان reverse proxy تنظیم می‌کنیم.

فایل پیکربندی Nginx را که قبلاً برای دامنه خود تنظیم کرده‌اید باز کنید:

sudo nano /etc/nginx/sites-available/your_domain

بلوک location زیر را پیدا کنید:

...
location / {
    try_files $uri $uri/ =404;
}
...

از آنجا که Nginx برای SSL تنظیم شده و ترافیک وب از آن عبور می‌کند، درخواست‌ها را به پورت پیش‌فرض Grafana (3000) هدایت می‌کنیم.

خط try_files را حذف کنید و با این جایگزین کنید:

...
location / {
    proxy_set_header Host $http_host;
    proxy_pass http://localhost:3000;
}
...

این تنظیم درخواست‌ها را به پورت درست هدایت می‌کند و نام سرور را در هدر می‌فرستد.

برای پشتیبانی از اتصالات WebSocket در Grafana Live، این نقشه را خارج از بلوک server اضافه کنید:

map $http_upgrade $connection_upgrade {
  default upgrade;
  '' close;
}

سپس این بلوک location را به server اضافه کنید:

...
location /api/live {
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    proxy_set_header Host $http_host;
    proxy_pass http://localhost:3000;
}
...

هدرهای Upgrade و Connection باید صراحتاً ارسال شوند تا سرور از تغییر پروتکل به WebSocket آگاه شود.

پیکربندی نهایی به این شکل است:

map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
}

server {
    ...

    root /var/www/your_domain/html;
    index index.html index.htm index.nginx-debian.html;

    server_name your_domain www.your_domain;

    location / {
        proxy_set_header Host $http_host;
        proxy_pass http://localhost:3000;
    }

    location /api/live {
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_set_header Host $http_host;
        proxy_pass http://localhost:3000;
    }

    ...
}

توجه: اگر از ابزارهای گواهی SSL استفاده کرده‌اید، ممکن است فایل شما شامل خطوط اضافی باشد.

فایل را ذخیره کنید و ببندید (در nano: CTRL+X، Y، ENTER).

برای بررسی صحت پیکربندی:

sudo nginx -t

خروجی باید این باشد:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

تغییرات را اعمال کنید:

sudo systemctl reload nginx

با مرورگر به https://your_domain بروید تا صفحه ورود Grafana را ببینید. اگر دسترسی ندارید، مطمئن شوید فایروال پورت 443 را باز کرده و مراحل را بازبینی کنید.

گام 3: تغییر اعتبارنامه‌های پیش‌فرض

برای افزایش امنیت، باید اعتبارنامه‌های پیش‌فرض Grafana را تغییر دهید، زیرا همه نصب‌ها از نام کاربری و رمز یکسان استفاده می‌کنند.

به https://your_domain بروید. صفحه ورود با لوگوی Grafana، فیلدهای Email or username و Password، دکمه Log in و لینک Forgot your password? ظاهر می‌شود.

در هر دو فیلد admin را وارد کنید و روی Log in کلیک کنید.

در صفحه بعدی، از شما خواسته می‌شود رمز پیش‌فرض را تغییر دهید. رمز جدید را در فیلدهای New password و Confirm new password وارد کنید.

روی Submit کلیک کنید تا تغییرات ذخیره شود یا Skip را بزنید (در این صورت، دفعه بعد دوباره خواسته می‌شود).

برای امنیت بیشتر، Submit را انتخاب کنید. به داشبورد Welcome to Grafana هدایت می‌شوید.

اکنون حساب شما ایمن است. در گام بعدی، از ثبت‌نام‌های ناخواسته جلوگیری می‌کنیم.

گام 4: غیرفعال کردن ثبت‌نام و دسترسی ناشناس

Grafana به‌طور پیش‌فرض به کاربران اجازه می‌دهد حساب بسازند یا داشبوردها را بدون ورود ببینند. این برای داده‌های عمومی مناسب است، اما برای داده‌های حساس خطرناک است.

فایل پیکربندی Grafana را باز کنید:

sudo nano /etc/grafana/grafana.ini

در بخش [users]، دستور allow_sign_up را پیدا کنید:

...
[users]
# disable user signup / registration
;allow_sign_up = true
...

تنظیم true دکمه Sign Up را به صفحه ورود اضافه می‌کند. برای افزایش امنیت، نقطه‌ویرگول را حذف کنید و به false تغییر دهید:

...
[users]
# disable user signup / registration
allow_sign_up = false
...

سپس در بخش [auth.anonymous]، دستور enabled را پیدا کنید:

...
[auth.anonymous]
# enable anonymous access
;enabled = false
...

تنظیم true دسترسی ناشناس به داشبوردها را باز می‌کند. برای محدود کردن به کاربران ثبت‌شده، نقطه‌ویرگول را حذف کنید و به false تنظیم کنید:

...
[auth.anonymous]
# enable anonymous access
enabled = false
...

فایل را ذخیره کنید و ببندید.

Grafana را ری‌استارت کنید:

sudo systemctl restart grafana-server

وضعیت سرویس را بررسی کنید:

sudo systemctl status grafana-server

خروجی باید active (running) را نشان دهد.

به https://your_domain بروید، روی آواتار در گوشه پایین چپ کلیک کنید و Sign out را انتخاب کنید. بررسی کنید که دکمه Sign Up وجود ندارد و بدون اعتبار نمی‌توانید وارد شوید.

گام 5 (اختیاری): ایجاد اپلیکیشن OAuth در GitHub

برای ساده‌سازی ورود تیم، می‌توانید Grafana را برای احراز هویت از طریق GitHub پیکربندی کنید تا اعضای سازمان مجاز وارد شوند.

با حساب GitHub مرتبط با سازمان خود وارد شوید و به صفحه تنظیمات سازمان بروید.

در بخش تنظیمات توسعه‌دهندگان، گزینه‌ای برای ایجاد اپلیکیشن OAuth پیدا کنید.

اگر اپلیکیشن OAuth ندارید، پیام عدم وجود اپلیکیشن می‌بینید. در غیر این صورت، لیست اپلیکیشن‌های موجود را مشاهده می‌کنید.

گزینه ثبت اپلیکیشن جدید را انتخاب کنید و جزئیات زیر را وارد کنید:

  • Application name: نامی برای شناسایی اپلیکیشن.
  • Homepage URL: آدرس Grafana، مثل https://your_domain.
  • Application Description: توضیحی کوتاه از هدف اپلیکیشن.
  • Application callback URL: آدرس بازگشت پس از احراز هویت، تنظیم کنید به https://your_domain/login/github.

کاربران Grafana این اطلاعات را می‌بینند، پس مقادیر معنادار وارد کنید.

اپلیکیشن را ثبت کنید.

به صفحه اطلاعات اپلیکیشن هدایت می‌شوید که شامل Client ID است. گزینه ایجاد Client Secret جدید را انتخاب کنید و هر دو مقدار را یادداشت کنید.

هشدار: Client ID و Client Secret را در مکانی امن نگه دارید، زیرا می‌توانند برای حملات استفاده شوند.

گام 6 (اختیاری): پیکربندی Grafana برای احراز هویت GitHub

برای تکمیل احراز هویت GitHub، فایل پیکربندی Grafana را ویرایش کنید:

sudo nano /etc/grafana/grafana.ini

بخش [auth.github] را پیدا کنید و نقطه‌ویرگول‌ها را از همه خطوط جز موارد زیر حذف کنید:

  • ;allowed_domains =
  • ;team_ids =
  • ;role_attribute_path =
  • ;role_attribute_strict = false
  • ;allow_assign_grafana_admin = false

تغییرات زیر را اعمال کنید:

  • enabled و allow_sign_up را به true تنظیم کنید تا احراز هویت GitHub فعال شود و اعضای سازمان حساب بسازند.
  • client_id و client_secret را به مقادیر GitHub وارد کنید.
  • allowed_organizations را به نام سازمان خود تنظیم کنید.

پیکربندی کامل شبیه این است:

...
[auth.github]
enabled = true
allow_sign_up = true
client_id = your_client_id_from_github
client_secret = your_client_secret_from_github
scopes = user:email,read:org
auth_url = https://github.com/login/oauth/authorize
token_url = https://github.com/login/oauth/access_token
api_url = https://api.github.com/user
;allowed_domains =
;team_ids =
allowed_organizations = your_organization_name
;role_attribute_path =
;role_attribute_strict = false
;allow_assign_grafana_admin = false
...

برای فعال کردن ریدایرکت‌ها پشت reverse proxy، root_url را در بخش [server] تنظیم کنید:

...
[server]
root_url = https://your_domain
...

فایل را ذخیره کنید و ببندید.

Grafana را ری‌استارت کنید:

sudo systemctl restart grafana-server

وضعیت سرویس را بررسی کنید:

sudo systemctl status grafana-server

خروجی active (running) را نشان می‌دهد.

به https://your_domain بروید. اگر وارد شده‌اید، روی آواتار در گوشه پایین چپ کلیک کنید و Sign out را انتخاب کنید.

در صفحه ورود، دکمه Sign in with GitHub با لوگوی GitHub ظاهر می‌شود.

روی آن کلیک کنید تا به GitHub هدایت شوید، با حساب خود وارد شوید و احراز هویت را تأیید کنید.

توجه: حساب GitHub باید عضو سازمان مجاز باشد و ایمیل Grafana با ایمیل GitHub مطابقت کند. در غیر این صورت، پیام خطای عضویت نامعتبر دریافت می‌کنید.

با حساب موجود وارد می‌شوید. اگر حسابی وجود نداشته باشد، Grafana حساب جدیدی با مجوز Viewer ایجاد می‌کند.

برای تغییر مجوزهای پیش‌فرض کاربران جدید:

sudo nano /etc/grafana/grafana.ini

دستور auto_assign_org_role را در بخش [users] پیدا کنید، نقطه‌ویرگول را حذف کنید و یکی از مقادیر زیر را تنظیم کنید:

  • Viewer: فقط مشاهده داشبوردها.
  • Editor: مشاهده، ویرایش و افزودن داشبوردها.
  • Admin: دسترسی کامل.

این آموزش Viewer را تنظیم می‌کند:

...
[users]
...
auto_assign_org_role = Viewer
...

فایل را ذخیره کنید و Grafana را ری‌استارت کنید:

sudo systemctl restart grafana-server

وضعیت را بررسی کنید:

sudo systemctl status grafana-server

اکنون Grafana برای احراز هویت اعضای سازمان GitHub آماده است.

نتیجه‌گیری

در این آموزش، Grafana را روی Ubuntu 22.04 نصب کردید، با SSL و Nginx ایمن کردید و احراز هویت GitHub را برای مدیریت تیم تنظیم کردید. این راهنما شما را برای ایجاد داشبوردهای حرفه‌ای آماده کرده است. برای یادگیری بیشتر، مستندات رسمی Grafana یا منابع monitoring دیگر را کاوش کنید.