آموزش مانیتورینگ MongoDB با Grafana روی Ubuntu 20.04

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

how-to-monitor-mongodb-with-grafana-and-prometheus-on-ubuntu-20-04

فهرست مطالب

مانیتورینگ پایگاه داده برای جلوگیری از مشکلات عملکرد یا حافظه حیاتی است. ابزارهایی مانند Prometheus و Grafana به شما کمک می‌کنند تا عملکرد پایگاه داده MongoDB خود را به‌طور مؤثر نظارت کنید. Prometheus یک پلتفرم open-source برای جمع‌آوری و ذخیره‌سازی metrics به‌صورت time-series است. Grafana نیز یک ابزار open-source برای visualization و تحلیل داده‌هاست که امکان ایجاد داشبوردهای تعاملی و تنظیم هشدارها را فراهم می‌کند. در این آموزش، شما را با مراحل نصب Prometheus، پیکربندی MongoDB Exporter و ایجاد داشبورد Grafana برای مانیتورینگ MongoDB روی Ubuntu 20.04 آشنا می‌کنیم. این راهنما برای مبتدیان و حرفه‌ای‌ها طراحی شده است.

پیش‌نیازهای مانیتورینگ MongoDB

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

  • یک سرور Ubuntu 20.04 با کاربر sudo غیرروت و فایروال فعال. اطمینان حاصل کنید که سرور شما برای میزبانی برنامه‌ها بهینه شده است.
  • دامنه‌ای معتبر (FQDN) با Nginx و SSL certificate فعال. می‌توانید از ابزارهای رایگان مانند Let’s Encrypt برای دریافت گواهی SSL استفاده کنید.
  • Grafana نصب‌شده و ایمن‌شده با SSL و reverse proxy. اطمینان حاصل کنید که Grafana روی سرور شما فعال است.
  • MongoDB نصب‌شده و در حال اجرا روی سرور شما.

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

گام 1: نصب و پیکربندی Prometheus

Prometheus یک ابزار مانیتورینگ open-source است که metrics را به‌صورت time-series ذخیره می‌کند. در این گام، Prometheus را نصب و به‌عنوان سرویس پیکربندی می‌کنیم.

نصب Prometheus

ابتدا لیست بسته‌های سیستم را به‌روزرسانی کنید:

sudo apt update

سپس دایرکتوری‌های پیکربندی و داده برای Prometheus ایجاد کنید:

sudo mkdir -p /etc/prometheus
sudo mkdir -p /var/lib/prometheus

فایل فشرده Prometheus را دانلود کنید (اینجا از نسخه 2.31.0 استفاده می‌کنیم):

wget https://github.com/prometheus/prometheus/releases/download/v2.31.0/prometheus-2.31.0.linux-amd64.tar.gz

فایل را استخراج کنید:

tar -xvf prometheus-2.31.0.linux-amd64.tar.gz

به دایرکتوری استخراج‌شده بروید:

cd prometheus-2.31.0.linux-amd64

فایل‌های باینری prometheus و promtool را به /usr/local/bin/ منتقل کنید:

sudo mv prometheus promtool /usr/local/bin/

فایل‌های کنسول و کتابخانه را به /etc/prometheus/ منتقل کنید:

sudo mv consoles/ console_libraries/ /etc/prometheus/

فایل پیکربندی prometheus.yml را به دایرکتوری مناسب منتقل کنید:

sudo mv prometheus.yml /etc/prometheus/prometheus.yml

برای بررسی نسخه نصب‌شده Prometheus:

prometheus --version

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

prometheus, version 2.31.0 (branch: HEAD, revision: b41e0750abf5cc18d8233161560731de05199330)
  build user:       root@0aa1b7fc430d
  build date:       20220714-15:13:18
  go version:       go1.18.4
  platform:         linux/amd64

اجرای Prometheus به‌عنوان سرویس

برای اجرای Prometheus به‌عنوان سرویس، ابتدا گروه و کاربر prometheus را ایجاد کنید:

sudo groupadd --system prometheus
sudo useradd -s /sbin/nologin --system -g prometheus prometheus

مالکیت و مجوزهای دایرکتوری‌ها را تنظیم کنید:

sudo chown -R prometheus:prometheus /etc/prometheus/ /var/lib/prometheus/
sudo chmod -R 775 /etc/prometheus/ /var/lib/prometheus/

فایل سرویس systemd را ایجاد کنید:

sudo nano /etc/systemd/system/prometheus.service

محتوای زیر را اضافه کنید:

[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target

[Service]
User=prometheus
Group=prometheus
Restart=always
Type=simple
ExecStart=/usr/local/bin/prometheus \
    --config.file=/etc/prometheus/prometheus.yml \
    --storage.tsdb.path=/var/lib/prometheus/ \
    --web.console.templates=/etc/prometheus/consoles \
    --web.console.libraries=/etc/prometheus/console_libraries \
    --web.listen-address=0.0.0.0:9090

[Install]
WantedBy=multi-user.target

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

سرویس Prometheus را شروع کنید:

sudo systemctl start prometheus

سرویس را برای شروع خودکار فعال کنید:

sudo systemctl enable prometheus

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

sudo systemctl status prometheus

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

● prometheus.service - Prometheus
     Loaded: loaded (/etc/systemd/system/prometheus.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2022-08-05 18:06:05 UTC; 13s ago
   Main PID: 7177 (prometheus)
      Tasks: 6 (limit: 527)
     Memory: 21.0M
     CGroup: /system.slice/prometheus.service
             └─7177 /usr/local/bin/prometheus --config.file=/etc/prometheus/prometheus.yml --storage.tsdb.path=/var/lib/prometheus/ --web.console.template>

برای دسترسی به کنسول وب Prometheus، به http://your_server_ip:9090 بروید. اگر فایروال فعال است، پورت 9090 را باز کنید:

sudo ufw allow 9090

اکنون Prometheus نصب و آماده است. در گام بعدی، MongoDB Exporter را پیکربندی می‌کنیم.

گام 2: پیکربندی MongoDB Exporter

Prometheus با scrape کردن targets، metrics را جمع‌آوری می‌کند. در این گام، MongoDB Exporter را نصب و به‌عنوان target برای Prometheus پیکربندی می‌کنیم.

نصب MongoDB Exporter

ابتدا دایرکتوری برای exporter ایجاد کنید و به آن بروید:

mkdir mongodb-exporter
cd mongodb-exporter

فایل باینری MongoDB Exporter را دانلود کنید:

wget https://github.com/percona/mongodb_exporter/releases/download/v0.7.1/mongodb_exporter-0.7.1.linux-amd64.tar.gz

فایل را استخراج کنید:

tar xvzf mongodb_exporter-0.7.1.linux-amd64.tar.gz

فایل باینری را به /usr/local/bin/ منتقل کنید:

sudo mv mongodb_exporter /usr/local/bin/

فعال‌سازی احراز هویت MongoDB

برای مانیتورینگ، یک کاربر با نقش clusterMonitor در MongoDB ایجاد می‌کنیم. به MongoDB متصل شوید:

mongo

به دیتابیس admin بروید:

use admin

کاربر را با نقش clusterMonitor ایجاد کنید:

db.createUser({user: "test",pwd: "testing",roles: [{ role: "clusterMonitor", db: "admin" },{ role: "read", db: "local" }]})

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

Successfully added user: {
        "user" : "test",
        "roles" : [
                {
                        "role" : "clusterMonitor",
                        "db" : "admin"
                },
                {
                        "role" : "read",
                        "db" : "local"
                }
        ]
}

از MongoDB خارج شوید:

exit

متغیر محیطی MONGODB_URI را با اعتبارنامه تنظیم کنید:

export MONGODB_URI=mongodb://test:testing@localhost:27017

بررسی کنید که متغیر درست تنظیم شده:

env | grep mongodb

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

MONGODB_URI=mongodb://mongodb_exporter:password@localhost:27017

ایجاد سرویس برای MongoDB Exporter

برای اجرای MongoDB Exporter به‌عنوان سرویس، به دایرکتوری systemd بروید و فایل سرویس را ایجاد کنید:

cd /lib/systemd/system/
sudo nano mongodb_exporter.service

محتوای زیر را اضافه کنید:

[Unit]
Description=MongoDB Exporter
User=prometheus

[Service]
Type=simple
Restart=always
ExecStart=/usr/local/bin/mongodb_exporter

[Install]
WantedBy=multi-user.target

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

سیستم daemon را به‌روزرسانی کنید:

sudo systemctl daemon-reload

سرویس را شروع کنید:

sudo systemctl start mongodb_exporter.service

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

sudo systemctl status mongodb_exporter.service

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

● mongodb_exporter.service - MongoDB Exporter
     Loaded: loaded (/lib/systemd/system/mongodb_exporter.service; disabled; vendor preset: enabled)
     Active: active (running) since Fri 2022-08-05 18:18:38 UTC; 1 weeks 3 days ago
   Main PID: 7352 (mongodb_exporte)
      Tasks: 5 (limit: 527)
     Memory: 14.2M
     CGroup: /system.slice/mongodb_exporter.service
             └─7352 /usr/local/bin/mongodb_exporter

برای بررسی metrics، به دایرکتوری اصلی بروید و پورت 9216 را تست کنید:

cd ~
sudo curl http://localhost:9216/metrics

خروجی شامل metrics مانند نسخه MongoDB و جزئیات اتصالات خواهد بود.

پیکربندی MongoDB Exporter به‌عنوان Target

برای scrape کردن metrics توسط Prometheus، فایل پیکربندی را ویرایش کنید:

cd /etc/prometheus/
sudo nano prometheus.yml

خطوط زیر را به بخش scrape_configs اضافه کنید:

scrape_configs:
  - job_name: "prometheus"
    static_configs:
            - targets: ["localhost:9090", "localhost:9216"]

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

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

sudo systemctl restart prometheus

به http://your_server_ip:9090/targets بروید تا بررسی کنید که Prometheus در حال scrape کردن پورت 9216 است.

گام 3: ایجاد داشبورد MongoDB در Grafana

در این گام، Prometheus را به‌عنوان data source به Grafana اضافه می‌کنیم و داشبورد MongoDB Overview را وارد می‌کنیم.

به Grafana (https://your_domain:3000) وارد شوید. در منوی سمت چپ، روی آیکون تنظیمات (gear) کلیک کنید و Data Sources را انتخاب کنید.

روی Add data source کلیک کنید و Prometheus را انتخاب کنید.

در فیلد URL، آدرس Prometheus را وارد کنید:

http://your_server_ip:9090/

روی Save & test کلیک کنید تا Prometheus به‌عنوان data source اضافه شود.

برای وارد کردن داشبورد MongoDB Overview، در منوی سمت چپ روی آیکون + (Create) کلیک کنید و Import را انتخاب کنید.

شناسه داشبورد 7353 را وارد کنید و روی Load کلیک کنید.

در صفحه گزینه‌ها، نام داشبورد و پوشه را به‌صورت پیش‌فرض نگه دارید و Prometheus را به‌عنوان data source انتخاب کنید. سپس روی Import کلیک کنید.

داشبورد شما ایجاد می‌شود و metrics بلادرنگ MongoDB مانند عملیات دستورات، اتصالات، و عملیات صف را نمایش می‌دهد.

نتیجه‌گیری

در این آموزش، یک داشبورد Grafana برای مانیتورینگ metrics MongoDB با استفاده از Prometheus روی Ubuntu 20.04 راه‌اندازی کردید. Prometheus را نصب کردید، MongoDB Exporter را پیکربندی کردید و داشبورد Grafana را برای visualization داده‌ها تنظیم کردید. حالا می‌توانید عملکرد پایگاه داده خود را به‌صورت بصری نظارت کنید. برای کاوش بیشتر، داشبوردهای دیگر Grafana یا منابع آموزشی MongoDB را بررسی کنید.