ติดตั้ง VictoriaMetrics บน VPS ทางเลือก Prometheus

ติดตั้ง VictoriaMetrics บน VPS ทางเลือก Prometheus

มิถุนายน 2026 · อ่าน 9 นาที

VictoriaMetrics คือระบบเก็บเมตริกส์ (time-series database) ที่ออกแบบมาให้เร็วและประหยัด resource มากกว่า Prometheus — ใช้ RAM น้อยกว่า 7 เท่า คิวรี่เร็วกว่า 20 เท่า รองรับ PromQL ที่เดียว ถ้าคุณมี Grafana dashboard ชุดเดิมแล้ว ก็ไม่ต้องเปลี่ยนอะไร เพียงแค่ชี้ data source มาที่ VictoriaMetrics แทน Prometheus ก็ได้เลย บทความนี้สอนติดตั้ง VictoriaMetrics บน VPS ทั่วไป + Node Exporter สำหรับเก็บเมตริกส์เครื่อง + Grafana เพื่อดู dashboard พร้อมแสดงผลจริง

ทำไมต้อง VictoriaMetrics แทน Prometheus?

ติดตั้ง VictoriaMetrics บน VPS

# ดาวน์โหลดเวอร์ชั่นล่าสุด (แทน VERSION ด้วยเวอร์ชั่นจริง)
mkdir -p /opt/victoria && cd /opt/victoria
VER=$(curl -s https://api.github.com/repos/VictoriaMetrics/VictoriaMetrics/releases/latest | grep '"tag_name"' | head -1 | cut -d'"' -f4)
echo "Downloading VictoriaMetrics $VER"
wget -q https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/$VER/victoria-metrics-linux-amd64-$VER.tar.gz

# แตก archive
tar xzf victoria-metrics-linux-amd64-$VER.tar.gz
chmod +x victoria-metrics-prod

# สร้าง directory สำหรับเก็บข้อมูล
mkdir -p /var/lib/victoria-metrics
chown -R nobody:nogroup /var/lib/victoria-metrics

# ทดลองรันดู
./victoria-metrics-prod -storagePath=/var/lib/victoria-metrics &
sleep 2
curl http://localhost:8428/api/v1/status/tsdb
# ต้องได้ JSON response เช่น {"status":"ok","metrics":0}
kill %1

ตั้ง Systemd Service สำหรับ VictoriaMetrics

# สร้าง systemd service file
sudo tee /etc/systemd/system/victoria-metrics.service > /dev/null << 'EOF'
[Unit]
Description=VictoriaMetrics Time Series Database
After=network.target
Wants=network-online.target

[Service]
Type=simple
User=nobody
Group=nogroup
WorkingDirectory=/opt/victoria
ExecStart=/opt/victoria/victoria-metrics-prod \
  -storagePath=/var/lib/victoria-metrics \
  -httpListenAddr=127.0.0.1:8428 \
  -retention=12
Restart=on-failure
RestartSec=5s

# ขยาย max open files (ถ้า metrics เยอะ)
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
EOF

# เปิดใช้งาน service
sudo systemctl daemon-reload
sudo systemctl enable victoria-metrics
sudo systemctl start victoria-metrics

# ตรวจสถานะ
sudo systemctl status victoria-metrics

ติดตั้ง Node Exporter เพื่อเก็บ Metrics VPS

# ดาวน์โหลด Node Exporter
cd /opt/victoria
VER=$(curl -s https://api.github.com/repos/prometheus/node_exporter/releases/latest | grep '"tag_name"' | head -1 | cut -d'"' -f4 | sed 's/v//')
wget -q https://github.com/prometheus/node_exporter/releases/download/v$VER/node_exporter-$VER.linux-amd64.tar.gz

# แตกและติดตั้ง
tar xzf node_exporter-$VER.linux-amd64.tar.gz
sudo cp node_exporter-$VER.linux-amd64/node_exporter /usr/local/bin/
sudo chmod +x /usr/local/bin/node_exporter

# สร้าง systemd service สำหรับ Node Exporter
sudo tee /etc/systemd/system/node-exporter.service > /dev/null << 'EOF'
[Unit]
Description=Prometheus Node Exporter
After=network.target

[Service]
Type=simple
User=nobody
Group=nogroup
ExecStart=/usr/local/bin/node_exporter \
  --collector.textfile.directory=/var/lib/node_exporter \
  --collector.systemd \
  --web.listen-address=127.0.0.1:9100
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target
EOF

# เปิดใช้งาน Node Exporter
sudo systemctl daemon-reload
sudo systemctl enable node-exporter
sudo systemctl start node-exporter

ตั้ง VictoriaMetrics เพื่อ Scrape Metrics จาก Node Exporter

# สร้าง config file สำหรับ scraping
sudo tee /etc/victoria-metrics/prometheus.yml > /dev/null << 'EOF'
global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: 'node'
    static_configs:
      - targets: ['127.0.0.1:9100']
        labels:
          instance: my-vps
          env: production

  - job_name: 'victoria-metrics'
    static_configs:
      - targets: ['127.0.0.1:8428']
EOF

# แก้ไข VictoriaMetrics systemd service เพื่อใช้ config file
sudo systemctl edit victoria-metrics
# แล้วเพิ่มในส่วน [Service]:
# ExecStart=/opt/victoria/victoria-metrics-prod \
#   -storagePath=/var/lib/victoria-metrics \
#   -httpListenAddr=127.0.0.1:8428 \
#   -promscrape.config=/etc/victoria-metrics/prometheus.yml

# หรือแก้ไขโดยตรงผ่าน sed:
sudo sed -i 's|-storagePath|-promscrape.config=/etc/victoria-metrics/prometheus.yml -storagePath|' /etc/systemd/system/victoria-metrics.service
sudo systemctl daemon-reload
sudo systemctl restart victoria-metrics

ตั้ง Nginx Reverse Proxy สำหรับ Grafana (ถ้าใช้ Grafana แล้ว)

# ถ้าคุณมี Grafana บน port 3000 แล้ว ให้ตั้ง Nginx proxy
sudo tee /etc/nginx/sites-available/grafana > /dev/null << 'EOF'
server {
    listen 80;
    server_name grafana.yourdomain.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name grafana.yourdomain.com;

    ssl_certificate /etc/letsencrypt/live/grafana.yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/grafana.yourdomain.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_read_timeout 90s;
    }
}
EOF

# เปิดใช้งาน
sudo ln -s /etc/nginx/sites-available/grafana /etc/nginx/sites-enabled/ 2>/dev/null || true
sudo nginx -t && sudo systemctl reload nginx

# ติดตั้ง SSL ด้วย Let's Encrypt (ถ้ายังไม่มี)
sudo certbot --nginx -d grafana.yourdomain.com

เพิ่ม VictoriaMetrics เป็น Data Source ใน Grafana

# เปิด Grafana ที่ https://grafana.yourdomain.com
# login: admin / รหัสที่ตั้งไว้

# เพิ่ม Data Source:
# Home → Connections → Data sources → Add data source
# ค้นหา "Prometheus" (VictoriaMetrics ใช้ Prometheus protocol ทั้งหมด)
# ตั้งค่า:
#   Name: VictoriaMetrics
#   URL: http://127.0.0.1:8428
#   Auth: ไม่ต้อง (localhost)
#   Save & Test → ต้องได้ "datasource is working"

# ทำให้เป็น default data source สำหรับ dashboard เก่า
# ไปที่ dashboard เก่า → Dashboard settings → ไปที่ panel ใดๆ → Edit
# เปลี่ยน data source จาก Prometheus ไปเป็น VictoriaMetrics ได้ทันที
Tip: VictoriaMetrics มีเอกสารการตั้งค่า retention ด้วยตัวเลือก -retention=12 (12 เดือน) คำเริ่มต้น อาจลดลงตามขนาด disk ได้ เช่น -retention=1 สำหรับเก็บแค่ 1 เดือน ดูขนาด disk ที่ใช้ไปได้จาก VictoriaMetrics stats page: http://localhost:8428/api/v1/status/tsdb

ตรวจสอบว่า VictoriaMetrics ทำงานถูกต้อง

# ตรวจ service status
sudo systemctl status victoria-metrics
sudo systemctl status node-exporter

# ตรวจ API endpoint
curl -s http://127.0.0.1:8428/api/v1/status/tsdb | python3 -m json.tool

# ดู metrics ที่ scrape ได้
curl -s http://127.0.0.1:8428/api/v1/labels | python3 -m json.tool | head -30

# Query metrics จาก Node Exporter (ต้องรอสักครู่หลังเพิ่ม job)
curl -s 'http://127.0.0.1:8428/api/v1/query?query=node_cpu_seconds_total' | python3 -m json.tool | head -20

# ดูขนาด disk storage ที่ใช้
du -sh /var/lib/victoria-metrics

# ดู log file (ถ้า verbose)
journalctl -u victoria-metrics -n 50 --no-pager
Tip: ถ้า metrics ยังไม่ปรากฏ ให้รอสักครู่ (Node Exporter ต้องสักสัก 15-30 วินาที) หรือตรวจ sudo systemctl status node-exporter ว่า port 9100 opened หรือไม่ ด้วย netstat -tulpn | grep 9100

แก้ปัญหาที่พบบ่อย

Error: "cannot open directory /var/lib/victoria-metrics"

VictoriaMetrics ไม่มีสิทธิ์อ่าน directory เก็บข้อมูล — เกิดจาก ownership หรือ permission ผิด

# ตรวจสิทธิ์
ls -ld /var/lib/victoria-metrics

# ถ้าเป็น root ให้เปลี่ยนเป็น nobody
sudo chown -R nobody:nogroup /var/lib/victoria-metrics
sudo chmod -R 755 /var/lib/victoria-metrics

# Restart service
sudo systemctl restart victoria-metrics

Error: "addr already in use" port 8428

Port 8428 ถูกใช้งานโดย process อื่น อาจเป็น VictoriaMetrics ที่ติดไว้ก่อนหน้า

# ดูว่าอะไรใช้ port 8428
sudo netstat -tulpn | grep 8428
sudo lsof -i :8428

# ถ้าเป็น VictoriaMetrics เก่า ให้ kill
sudo pkill -9 victoria-metrics

# แล้ว restart service ใหม่
sudo systemctl restart victoria-metrics

VictoriaMetrics consume disk space เพิ่มขึ้นเรื่อยๆ

การ scrape metrics ที่เยอะเกินไป หรือ retention period ที่ยาวนานทำให้ disk ใช้มากขึ้น

# ตรวจดู metrics จำนวนเท่าไหร่
curl -s http://127.0.0.1:8428/api/v1/status/tsdb | python3 -m json.tool | grep "Total series"

# ลดลง retention period (เช่นจาก 12 เดือน เป็น 3 เดือน)
sudo systemctl edit victoria-metrics
# แล้วแก้ -retention=12 เป็น -retention=3
sudo systemctl restart victoria-metrics

# หรือลดจำนวน scrape jobs ใน prometheus.yml
sudo nano /etc/victoria-metrics/prometheus.yml
sudo systemctl restart victoria-metrics

Grafana query ขึ้น "No data" แม้ VictoriaMetrics มี metrics

ปัญหาอาจมาจาก data source URL ที่ไม่ถูกต้อง หรือ Grafana ไม่สามารถเข้าถึง VictoriaMetrics

# ตรวจ Grafana data source settings:
# Connections → Data sources → VictoriaMetrics
# ต้อง Save & Test ให้ได้ "datasource is working"

# ตรวจจาก VPS หากเข้าได้จริง
curl -s http://127.0.0.1:8428/api/v1/status/tsdb

# ถ้า Grafana อยู่ container อื่นต้องใช้ IP address ของ host แทน localhost
# เช่น http://172.17.0.1:8428 (สำหรับ Docker default bridge)

Error: "too many samples in memory" หรือ OOM (Out of Memory)

VictoriaMetrics ใช้ memory เกินไป เกิดจาก metrics เยอะหรือ retention period ยาวเกินไป

# ดูขนาด memory ที่ใช้
ps aux | grep victoria-metrics
free -h

# ลดลง retention period
sudo systemctl edit victoria-metrics
# แก้ -retention=12 เป็น -retention=1 (1 เดือน)
sudo systemctl restart victoria-metrics

# หรือลด scrape interval
sudo nano /etc/victoria-metrics/prometheus.yml
# แล้วแก้ scrape_interval จาก 15s เป็น 60s (เก็บน้อยลง)
sudo systemctl restart victoria-metrics

คำถามที่พบบ่อย

VictoriaMetrics กับ Prometheus ต่างกันอย่างไร?

Prometheus เป็น pull-based monitoring ที่ scrape metrics จาก targets ทั้ง 2 ตัวรองรับ PromQL ได้ แต่ VictoriaMetrics ออกแบบให้ประหยัด resource มากกว่า โดยเฉพาะ memory และ disk space VictoriaMetrics ใช้ compression ที่ดี index ที่เร็ว ส่วน Prometheus เก่า optimize เพื่อความถูกต้องมากกว่าประสิทธิภาพ สำหรับ VPS ขนาดเล็ก VictoriaMetrics ดีกว่า เพราะไม่ต้องจ่ายเงินสำหรับ resource เพิ่มเติม

สามารถ migrate จาก Prometheus ไปยัง VictoriaMetrics ได้ไหม?

ได้ แต่ไม่ได้ผ่านการ import data โดยตรง เพื่อเริ่มใช้ VictoriaMetrics ให้แค่ตั้ง scrape configs ด้วยเดียวกับ Prometheus config ไฟล์ VictoriaMetrics จะเริ่มเก็บ metrics ใหม่จากตอนนี้ ข้อมูล Prometheus เก่าจะแยกออกจากกัน ถ้าต้องการเก็บ historical data ต้อง export จาก Prometheus ก่อน (โดยใช้ remote_write) แล้วส่งเข้า VictoriaMetrics

ประหยัด resource ไปเท่าไหร่ถ้าใช้ VictoriaMetrics?

ลดลง 7 เท่าใน memory, 3-5 เท่าใน disk space, query speed เร็วขึ้น 20 เท่า โดยเฉลี่ย server 2GB RAM กับ Prometheus ต่อได้ metrics ประมาณ 50 กว่าพัน ตัว แต่ VictoriaMetrics ข้อเดียวกันสามารถเก็บ 250-500 พันตัว ได้ ถ้าต้องการเก็บ metrics หลายล้านตัว VictoriaMetrics เป็นทางเลือกที่ประหยัดกว่าการอัปเกรด hardware