Skip to content

ডেবিয়ান বা উবুন্টুতে Prometheus, Node Exporter ও Grafana সেটআপ

ডেবিয়ান বা উবুন্টু সার্ভারে মনিটরিং স্ট্যাক দাঁড় করানোর ধাপে ধাপে গাইড। লেখার সময় (আগস্ট ২০২৬) এগুলোই ছিল সর্বশেষ স্টেবল ভার্সন: Prometheus 3.13.1, Node Exporter 1.12.1, Grafana 13.1.1। শুরুর আগে রিলিজ পেজগুলো একবার দেখে নেবেন, ততদিনে নতুন ভার্সন চলে আসতে পারে।

সঙ্গে আপস্ট্রিমের তিনটি লেখা খুলে রাখলে কাজে দেবে: Prometheus কনফিগারেশন রেফারেন্স, Node Exporter-এর কালেক্টরের তালিকা, কোনটির পেছনে কতটা খরচ যাচ্ছে সেটিসহ, আর Grafana-র নিজের ডেবিয়ান ইনস্টল ডকুমেন্টেশন

আর্কিটেকচার

+----------------+   scrapes :9100   +----------------+
|  Node Exporter | <---------------- |   Prometheus   |
|   :9100        |                   |   :9090        |
+----------------+                   +--------+-------+
                                              |
                                              | PromQL queries :9090
                                              v
                                     +----------------+
                                     |    Grafana     |
                                     |   :3000        |
                                     +----------------+
                                              |
                                              v
                                        Browser / user

যা যা লাগবে

  • sudo অ্যাক্সেসসহ একটি ডেবিয়ান বা উবুন্টু সার্ভার
  • curl আর tar ইনস্টল থাকতে হবে
  • টানেলের জন্য SSH অ্যাক্সেস। 9090, 9100 ও 3000 পোর্ট ইন্টারনেটের জন্য বন্ধ রাখুন; তিনটি সার্ভিসই লুপব্যাকে চলবে।

পর্ব ১: Prometheus ইনস্টল

ধাপ ১: prometheus সিস্টেম ইউজার তৈরি

bash
sudo useradd --no-create-home --shell /bin/false prometheus

ধাপ ২: ডিরেক্টরি তৈরি

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

ধাপ ৩: Prometheus ডাউনলোড

bash
cd /tmp
curl -LO https://github.com/prometheus/prometheus/releases/download/v3.13.1/prometheus-3.13.1.linux-amd64.tar.gz
tar -xvf prometheus-3.13.1.linux-amd64.tar.gz

ধাপ ৪: বাইনারি ইনস্টল

bash
sudo cp prometheus-3.13.1.linux-amd64/prometheus /usr/local/bin/
sudo cp prometheus-3.13.1.linux-amd64/promtool /usr/local/bin/
sudo chown prometheus:prometheus /usr/local/bin/prometheus /usr/local/bin/promtool

ধাপ ৫: কনসোল টেমপ্লেট ইনস্টল ও মালিকানা নির্ধারণ

bash
sudo cp -r prometheus-3.13.1.linux-amd64/consoles /etc/prometheus
sudo cp -r prometheus-3.13.1.linux-amd64/console_libraries /etc/prometheus
sudo chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus

ধাপ ৬: কনফিগ ফাইল তৈরি

bash
sudo tee /etc/prometheus/prometheus.yml > /dev/null <<EOF
global:
  scrape_interval: 10s

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']
EOF

Node Exporter-এর স্ক্র্যাপ জব যোগ করব পর্ব ৩-এ, ইনস্টল হয়ে যাওয়ার পর।

ধাপ ৭: systemd সার্ভিস তৈরি

bash
sudo tee /etc/systemd/system/prometheus.service > /dev/null <<EOF
[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target

[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus \\
  --config.file=/etc/prometheus/prometheus.yml \\
  --storage.tsdb.path=/var/lib/prometheus \\
  --web.listen-address=127.0.0.1:9090 \\
  --web.console.templates=/etc/prometheus/consoles \\
  --web.console.libraries=/etc/prometheus/console_libraries \\
  --storage.tsdb.retention.time=365d
ExecReload=/bin/kill -HUP \$MAINPID

[Install]
WantedBy=multi-user.target
EOF

ExecReload লাইনটার জন্যই পর্ব ৩-এ systemctl reload prometheus কাজ করবে। এটি না দিলে systemd "Job type reload is not applicable" বলে রিলোড করতেই চাইবে না, তখন পুরো সার্ভিস রিস্টার্ট করা ছাড়া উপায় থাকবে না। \$MAINPID-এর আগে ব্যাকস্ল্যাশটা খেয়াল করুন। এই heredoc-এ কোট নেই, তাই ব্যাকস্ল্যাশ না দিলে ফাইল লেখার সময়ই শেল ভেরিয়েবলটা ফাঁকা করে বসিয়ে দিত।

ধাপ ৮: Prometheus চালু ও সক্রিয় করা

bash
sudo systemctl daemon-reload
sudo systemctl enable --now prometheus

ধাপ ৯: যাচাই

bash
sudo systemctl status prometheus
curl -s http://localhost:9090/-/healthy

নিজের কম্পিউটার থেকে SSH টানেল খুলে চালু রাখুন:

bash
ssh -N -L 9090:127.0.0.1:9090 -L 3000:127.0.0.1:3000 user@server

user@server-এর জায়গায় নিজের SSH ঠিকানা দিন। এরপর নিজের ব্রাউজারে http://localhost:9090 খুলুন।

Prometheus-এর ডাউনলোড পরিষ্কার করা

bash
rm -rf /tmp/prometheus-3.13.1.linux-amd64*

পর্ব ২: Node Exporter ইনস্টল

ধাপ ১: node_exporter সিস্টেম ইউজার তৈরি

bash
sudo useradd --no-create-home --shell /bin/false node_exporter

ধাপ ২: Node Exporter ডাউনলোড

bash
cd /tmp
curl -LO https://github.com/prometheus/node_exporter/releases/download/v1.12.1/node_exporter-1.12.1.linux-amd64.tar.gz
tar -xvf node_exporter-1.12.1.linux-amd64.tar.gz

ধাপ ৩: বাইনারি ইনস্টল

bash
sudo cp node_exporter-1.12.1.linux-amd64/node_exporter /usr/local/bin/
sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter

ধাপ ৪: systemd সার্ভিস তৈরি

bash
sudo tee /etc/systemd/system/node_exporter.service > /dev/null <<EOF
[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target

[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter --web.listen-address=127.0.0.1:9100

[Install]
WantedBy=multi-user.target
EOF

ধাপ ৫: Node Exporter চালু ও সক্রিয় করা

bash
sudo systemctl daemon-reload
sudo systemctl enable --now node_exporter

ধাপ ৬: যাচাই

bash
curl -s http://localhost:9100/metrics | head

Node Exporter-এর ডাউনলোড পরিষ্কার করা

bash
rm -rf /tmp/node_exporter-1.12.1.linux-amd64*

পর্ব ৩: Prometheus-কে Node Exporter-এর দিকে তাক করানো

ধাপ ১: স্ক্র্যাপ জব যোগ করা

bash
sudo vim /etc/prometheus/prometheus.yml

scrape_configs-এর নিচে এটুকু বসান:

yaml
  - job_name: "node_exporter"
    static_configs:
      - targets: ['localhost:9100']

ধাপ ২: কনফিগ যাচাই

bash
promtool check config /etc/prometheus/prometheus.yml

ধাপ ৩: Prometheus রিলোড

bash
sudo systemctl reload prometheus

ধাপ ৪: টার্গেট চালু আছে কি না দেখা

SSH টানেল দিয়ে http://localhost:9090/targets খুলুন। prometheus আর node_exporter, দুটি জবেই State = UP দেখানোর কথা।

পর্ব ৪: Grafana ইনস্টল

অফিসিয়াল উপায় হলো APT রিপো। apt-get update প্যাকেজের তালিকা হালনাগাদ করে; নতুন সংস্করণ ইনস্টল করতে apt-get install --only-upgrade grafana চালাতে হয়। সূত্র: https://grafana.com/docs/grafana/latest/setup-grafana/installation/debian/

ধাপ ১: প্রয়োজনীয় প্যাকেজ ইনস্টল

bash
sudo apt-get install -y apt-transport-https wget gnupg

ধাপ ২: GPG কী ইমপোর্ট

bash
sudo mkdir -p /etc/apt/keyrings
sudo wget -O /etc/apt/keyrings/grafana.asc https://apt.grafana.com/gpg-full.key
sudo chmod 644 /etc/apt/keyrings/grafana.asc

ধাপ ৩: স্থিতিশীল রিপোজিটরি যোগ

bash
echo "deb [signed-by=/etc/apt/keyrings/grafana.asc] https://apt.grafana.com stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list

ধাপ ৪: প্যাকেজ তালিকা হালনাগাদ

bash
sudo apt-get update

ধাপ ৫: Grafana OSS ইনস্টল

bash
sudo apt-get install -y grafana

ধাপ ৬: Grafana চালু ও সক্রিয় করা

bash
sudo mkdir -p /etc/systemd/system/grafana-server.service.d
printf '[Service]\nEnvironment=GF_SERVER_HTTP_ADDR=127.0.0.1\n' | sudo tee /etc/systemd/system/grafana-server.service.d/listen.conf
sudo systemctl daemon-reload
sudo systemctl enable grafana-server
sudo systemctl restart grafana-server

ধাপ ৭: যাচাই

bash
sudo systemctl status grafana-server

SSH টানেল দিয়ে http://localhost:3000 খুলুন। ডিফল্ট লগইন admin / admin, প্রথমবার ঢুকলেই পাসওয়ার্ড বদলাতে বলবে।

পর্ব ৫: Grafana-র ঐচ্ছিক কনফিগ (নিজস্ব ডোমেইন / HTTPS)

ব্যক্তিগত ব্যবহারের জন্য SSH টানেলই যথেষ্ট। পাবলিক ড্যাশবোর্ড চাইলে grafana.example.com সার্ভারের দিকে পয়েন্ট করুন এবং nginx-এ TLS টার্মিনেট করুন। Grafana লুপব্যাক HTTP-তেই থাকবে, আপস্ট্রিম পোর্টে HTTPS চালু করবেন না।

ধাপ ১: grafana.ini সম্পাদনা

bash
sudo vim /etc/grafana/grafana.ini
ini
[server]
http_addr = 127.0.0.1
http_port = 3000
domain = grafana.example.com
root_url = https://grafana.example.com/
enforce_domain = true
protocol = http

ধাপ ২: Grafana রিস্টার্ট

bash
sudo systemctl restart grafana-server

ধাপ ৩ (ঐচ্ছিক): Nginx রিভার্স প্রক্সি

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

server {
    listen 80;
    listen [::]:80;

    server_name grafana.example.com;

    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://127.0.0.1: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 $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://127.0.0.1:3000;
    }
}

nginx ও Certbot ইনস্টল করে ওপরের কনফিগ /etc/nginx/sites-available/grafana.example.com-এ রাখুন। সব জায়গায় উদাহরণের ডোমেইন বদলে নিজেরটি দিন:

bash
sudo apt-get install -y nginx certbot python3-certbot-nginx
sudo ln -s /etc/nginx/sites-available/grafana.example.com /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d grafana.example.com
sudo certbot renew --dry-run

nginx-এর জন্য 80 ও 443 পোর্ট খুলুন, 3000 নয়। Certbot TLS কনফিগ ও রিনিউয়াল টাইমার বসায়। Grafana-এর লগইন চালু রাখুন এবং ডোমেইন প্রকাশের আগে SSH টানেল দিয়ে ডিফল্ট পাসওয়ার্ড বদলান।

পর্ব ৬: Grafana-কে Prometheus-এর সঙ্গে যুক্ত করা

ধাপ ১: ডেটা সোর্স যোগ করা

Grafana-তে যান: Connections > Data sources > Add data source > Prometheus।

URL-এ দিন:

http://localhost:9090

Save & test চাপুন। "Successfully queried the Prometheus API." দেখানোর কথা।

ধাপ ২: Node Exporter ড্যাশবোর্ড ইমপোর্ট

Dashboards > New > Import-এ যান, তারপর ড্যাশবোর্ড আইডি বসান:

1860

জিজ্ঞেস করলে আপনার Prometheus ডেটা সোর্সটা বেছে দিন, তারপর Import চাপুন। এটি কমিউনিটির "Node Exporter Full" ড্যাশবোর্ড, কিছু না করেই সিপিইউ, মেমোরি, ডিস্ক আর নেটওয়ার্ক সব দেখিয়ে দেয়।

সার্ভিস চালানোর চিটশিট

service          start                 status                enable
---------------  --------------------  --------------------  -------------------------------
prometheus       systemctl start       systemctl status       systemctl enable prometheus
node_exporter    systemctl start       systemctl status       systemctl enable node_exporter
grafana-server   systemctl start       systemctl status       systemctl enable grafana-server

সার্ভিস না থামিয়ে কনফিগ রিলোড করতে:

bash
sudo systemctl reload prometheus
sudo systemctl restart grafana-server

এরপর কী

একটি সার্ভার দিয়ে শুরু, এখানেই শেষ নয়। পরের ধাপ সাধারণত দুটি। এক, অ্যালার্ট বসানো (Alertmanager, যাতে ডিস্ক ভরে গেলে রাত তিনটায়ই জেনে যান, সকাল নয়টায় এসে চমকে না ওঠেন)। দুই, মেশিনে আসলে যা চলছে তার জন্য আরেকটা এক্সপোর্টার। সেই মেশিনে যদি ওয়েবসাইট থাকে, তাহলে ডকার আর রেডিস দিয়ে ওয়ার্ডপ্রেস সেলফ-হোস্টিং এই একই সেটআপের বাকি অর্ধেক।

বড় স্কেলে মনিটরিং আমার কাজের বড় একটি অংশ: Grafana আর Prometheus দিয়ে অবজারভেবিলিটি। এর মধ্যে এমন একটি বেঞ্চমার্কিং সেটআপও আছে যেটা পনেরো মিনিটে এক কোটি রিকোয়েস্ট ছুঁড়েছে। কথা বলতে চাইলে জানাবেন।

আনইনস্টল

Prometheus সরানো

bash
sudo systemctl disable --now prometheus
sudo rm -f /usr/local/bin/prometheus /usr/local/bin/promtool
sudo rm -rf /etc/prometheus /var/lib/prometheus /etc/systemd/system/prometheus.service
sudo userdel prometheus
sudo systemctl daemon-reload

Node Exporter সরানো

bash
sudo systemctl disable --now node_exporter
sudo rm -f /usr/local/bin/node_exporter /etc/systemd/system/node_exporter.service
sudo userdel node_exporter
sudo systemctl daemon-reload

Grafana সরানো

bash
sudo systemctl stop grafana-server
sudo apt-get remove -y grafana
sudo rm -i /etc/apt/sources.list.d/grafana.list