“সার্ভার ধীর” একটি অকেজো বাগ রিপোর্ট, যদি না আপনি একটি গ্রাফ খুলে দেখতে পান যে ক্র্যাশের আগে তিন দিন ধরে মেমরি বাড়ছিল। Prometheus আর Grafana ঠিক এটাই দেয়: প্রতিটি সার্ভারের CPU, RAM, ডিস্ক আর নেটওয়ার্ক, প্রতি 15 সেকেন্ডে রেকর্ড করা এবং এমন গ্রাফে আঁকা যা পেছনে স্ক্রল করে দেখা যায়। এগুলোকে নিজেদের ছোট VPS-এ রাখুন, প্রোডাকশন মেশিন পড়ে গেলেও নজর রাখা চলবে।
অংশগুলো
- node_exporter: যে সার্ভারে নজর রাখতে চান তার প্রতিটিতে চলে, পোর্ট 9100-এ সিস্টেম মেট্রিক প্রকাশ করে।
- Prometheus: মনিটরিং VPS-এ এই মেট্রিকগুলো টেনে আনে (scrape) এবং সংরক্ষণ করে।
- Grafana: HTTPS-এর পেছনে ড্যাশবোর্ড।
- ঐচ্ছিকভাবে Alertmanager বা Grafana-র সতর্কতা, কোনো সীমা পেরোলে আপনাকে বার্তা পাঠানোর জন্য।
আপনার যা লাগবে
- Micro-IP (মাসে $10, 2 vCPU, 2 GB RAM, 25 GB) এক-দুই ডজন সার্ভারে নজর রাখে। আরও হোস্ট, কাস্টম অ্যাপ মেট্রিক বা কয়েক মাসের সংরক্ষণ হলে: Small-IP।
- মনিটরিং সার্ভারের জন্য একটি ডেডিকেটেড IPv4: Grafana HTTPS-এ পরিবেশিত হয়, আর আপনার লক্ষ্য সার্ভারগুলো পোর্ট 9100-এর জন্য শুধু একটি স্থির ঠিকানাকে অনুমতি দিতে পারে।
১. প্রতিটি লক্ষ্যে node_exporter
apt install -y prometheus-node-exporter
# allow only the monitoring server to scrape it
ufw allow from 203.0.113.10 to any port 9100 proto tcp
203.0.113.10-কে আপনার মনিটরিং VPS-এর ঠিকানা দিয়ে বদলান। পোর্ট 9100 কখনো সারা বিশ্বের জন্য খোলা রাখবেন না: এটি আপনার সার্ভার সম্পর্কে অনেক কিছু ফাঁস করে।
২. মনিটরিং VPS-এ Prometheus আর Grafana
apt update && apt install -y docker.io docker-compose-v2 caddy
mkdir -p /opt/monitoring && cd /opt/monitoring
cat > prometheus.yml <<'EOF'
global:
scrape_interval: 15s
scrape_configs:
- job_name: nodes
static_configs:
- targets: ['198.51.100.21:9100', '198.51.100.22:9100']
EOF
cat > compose.yml <<'EOF'
services:
prometheus:
image: prom/prometheus
volumes: [ "./prometheus.yml:/etc/prometheus/prometheus.yml:ro", "prom:/prometheus" ]
command: [ "--config.file=/etc/prometheus/prometheus.yml", "--storage.tsdb.retention.time=15d", "--web.enable-remote-write-receiver" ]
ports: [ "127.0.0.1:9090:9090" ]
restart: unless-stopped
grafana:
image: grafana/grafana
volumes: [ "grafana:/var/lib/grafana" ]
ports: [ "127.0.0.1:3000:3000" ]
restart: unless-stopped
volumes: { prom: {}, grafana: {} }
EOF
docker compose up -d
Grafana-র সামনে HTTPS:
echo 'grafana.example.com {
reverse_proxy 127.0.0.1:3000
}' > /etc/caddy/Caddyfile && systemctl reload caddy
লগ ইন করুন (admin / admin, তারপর বদলান), http://prometheus:9090-এ Prometheus-কে ডেটা উৎস হিসেবে যোগ করুন, আর কমিউনিটির “Node Exporter Full” ড্যাশবোর্ড (ID 1860) ইমপোর্ট করুন। মোটামুটি এক মিনিটেই একটি সম্পূর্ণ সিস্টেম ড্যাশবোর্ড পেয়ে যাবেন।
NAT প্ল্যানের সার্ভার
NAT সার্ভার শুধু নিজের ব্যক্তিগত SSH পোর্টে আসা সংযোগ গ্রহণ করে, তাই Prometheus তার exporter স্ক্রেপ করতে পারে না। দিকটা উল্টে দিন: NAT মেশিনে Prometheus-কে agent মোডে চালান এবং মনিটরিং সার্ভারে ডেটা পাঠান, যা ইতিমধ্যেই রিমোট রাইট গ্রহণ করে (ওপরের --web.enable-remote-write-receiver ফ্ল্যাগ)।
# /etc/prometheus/agent.yml on the NAT server
scrape_configs:
- job_name: self
static_configs: [ { targets: ['127.0.0.1:9100'] } ]
remote_write:
- url: https://prom-push.example.com/api/v1/write
পোর্ট 9090 সরাসরি না খুলে, এই পুশ এন্ডপয়েন্টটি Caddy-র মাধ্যমে basic auth-সহ প্রকাশ করুন।
সৎ মন্তব্য
Prometheus টেনে আনার (pull) পদ্ধতিতে কাজ করে: আপনার নিয়ন্ত্রিত সার্ভারের বহরের জন্য দারুণ, আর NAT-এর পেছনের সবকিছুর জন্য অসুবিধাজনক, তাই agent-এর কৌশল। এর লোকাল স্টোরেজ বছরের পর বছর ইতিহাসের জন্য তৈরি নয়; দীর্ঘ সংরক্ষণের জন্য পরে রিমোট স্টোরেজ যোগ করবেন। আর ড্যাশবোর্ড মূল্যের অর্ধেক মাত্র: প্রথম দিনেই অন্তত তিনটি সতর্কতা সেট করুন (ডিস্ক 85%-এর বেশি, মেমরির চাপ, লক্ষ্য বন্ধ), নইলে কিছু ভেঙে যাওয়ার পরেই গ্রাফ দেখবেন।
সম্পর্কিত
- আপটাইম পর্যবেক্ষণের জন্য VPS (Uptime Kuma): বিভ্রাটের সতর্কতা আর স্ট্যাটাস পেজ
- UFW ফায়ারওয়াল কীভাবে কনফিগার করবেন
- VPS-এর কত RAM লাগে?
মন্তব্য
এখনো কোনো মন্তব্য নেই। প্রথম হোন।