−25%

Windows รายปี ถึง 31 ต.ค. ดูแพ็กเกจ

EQVPS

VPS สำหรับมอนิเตอร์เซิร์ฟเวอร์ด้วย Grafana + Prometheus

รวบรวมเมตริก CPU, RAM, ดิสก์ และบริการจากทุกเซิร์ฟเวอร์ไว้ในที่เดียว: Prometheus, node_exporter และ Grafana บน VPS หลัง HTTPS

“เซิร์ฟเวอร์ช้า” เป็นรายงานบั๊กที่ไร้ประโยชน์ เว้นแต่คุณจะเปิดกราฟแล้วเห็นว่าหน่วยความจำไต่ขึ้นมาสามวันก่อนระบบล่ม นั่นคือสิ่งที่ Prometheus และ Grafana มอบให้: CPU, RAM, ดิสก์ และเครือข่ายของทุกเซิร์ฟเวอร์ บันทึกทุก 15 วินาทีและวาดเป็นกราฟที่คุณเลื่อนย้อนหลังได้ วางมันไว้บน VPS เล็ก ๆ ของมันเอง แล้วมันจะยังเฝ้าดูต่อแม้เครื่อง production ล้มลง

ส่วนประกอบ

สิ่งที่คุณต้องมี

1. 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 ให้ทั้งโลกเข้าถึงเด็ดขาด เพราะมันเปิดเผยข้อมูลเกี่ยวกับเซิร์ฟเวอร์ของคุณมากเกินไป

2. Prometheus และ Grafana บน VPS มอนิเตอร์

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

HTTPS หน้า Grafana:

echo 'grafana.example.com {
    reverse_proxy 127.0.0.1:3000
}' > /etc/caddy/Caddyfile && systemctl reload caddy

ล็อกอิน (admin / admin แล้วเปลี่ยนรหัสผ่าน) เพิ่ม Prometheus เป็นแหล่งข้อมูลที่ http://prometheus:9090 แล้วนำเข้าแดชบอร์ดชุมชน “Node Exporter Full” (ID 1860) ภายในราวหนึ่งนาทีคุณจะได้แดชบอร์ดระบบที่ครบถ้วน

เซิร์ฟเวอร์ที่ใช้แพ็กเกจ NAT

เซิร์ฟเวอร์ NAT รับการเชื่อมต่อขาเข้าเฉพาะที่พอร์ต SSH ส่วนตัว Prometheus จึงดึงข้อมูลจาก exporter ของมันไม่ได้ ให้กลับทิศทาง: รัน Prometheus ใน โหมด agent บนเครื่อง NAT แล้วผลักข้อมูลไปยังเซิร์ฟเวอร์มอนิเตอร์ ซึ่งรับการเขียนจากระยะไกลอยู่แล้ว (แฟล็ก --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

เปิดปลายทางรับข้อมูลนั้นผ่าน Caddy พร้อม basic auth แทนการเปิดพอร์ต 9090 ตรง ๆ

หมายเหตุตามจริง

Prometheus ทำงานแบบดึง (pull): ยอดเยี่ยมสำหรับกลุ่มเครื่องที่คุณควบคุม และไม่สะดวกสำหรับทุกอย่างที่อยู่หลัง NAT จึงต้องใช้เทคนิค agent พื้นที่จัดเก็บภายในของมันไม่ได้ออกแบบมาสำหรับประวัติหลายปี หากต้องเก็บนานคุณค่อยเพิ่มที่เก็บระยะไกลภายหลัง และแดชบอร์ดเป็นเพียงครึ่งหนึ่งของคุณค่า: ตั้งการแจ้งเตือนอย่างน้อยสามรายการตั้งแต่วันแรก (ดิสก์เกิน 85% หน่วยความจำตึงตัว เครื่องเป้าหมายล่ม) ไม่เช่นนั้นคุณจะดูกราฟก็ต่อเมื่อมีอะไรพังไปแล้ว

ที่เกี่ยวข้อง

พร้อม deploy แล้วหรือยัง? จ่ายด้วยคริปโต ไม่ต้อง KYC — ใช้งานได้ในราวหนึ่งนาที

Deploy เลย →

FAQ

ต่างจาก Uptime Kuma อย่างไร?

Uptime Kuma ตอบคำถามว่า “ยังออนไลน์อยู่ไหม?” ส่วน Prometheus และ Grafana ตอบว่า “ทำไมช้า และช้าตั้งแต่เมื่อไร?”: เมตริก CPU หน่วยความจำ ดิสก์ เครือข่าย และแอปพลิเคชันตามช่วงเวลา หลายคนใช้ทั้งคู่: Kuma สำหรับแจ้งเตือนเมื่อระบบล่ม Grafana สำหรับดูแนวโน้มและวางแผนทรัพยากร

Prometheus ใช้ดิสก์เท่าไร?

ประมาณ 1–2 ไบต์ต่อตัวอย่างหลังบีบอัด เซิร์ฟเวอร์สิบเครื่องที่ส่งออกเครื่องละหนึ่งพันซีรีส์ เก็บทุก 15 วินาที ได้ราว 60 ล้านตัวอย่างต่อวัน หรือประมาณ 100 MB เมื่อเก็บไว้ 15 วันตามค่าเริ่มต้นจะใช้พื้นที่ไม่กี่กิกะไบต์

มอนิเตอร์เซิร์ฟเวอร์ที่ใช้แพ็กเกจ NAT ได้ไหม?

ได้ แต่ไม่ใช่ด้วยการดึงข้อมูล: เซิร์ฟเวอร์ NAT ไม่รับการเชื่อมต่อขาเข้ามายัง exporter ให้รัน Prometheus ในโหมด agent บนเครื่อง NAT แล้วผลักเมตริกไปยังเซิร์ฟเวอร์มอนิเตอร์ด้วย remote_write ส่วนตัวเซิร์ฟเวอร์มอนิเตอร์เองควรอยู่บนแพ็กเกจที่มี IP เฉพาะ

เซิร์ฟเวอร์มอนิเตอร์ควรใช้แพ็กเกจไหน?

Micro-IP (RAM 2 GB, $10/เดือน) รองรับหนึ่งถึงสองโหลโฮสต์ได้สบาย หากเพิ่มเมตริกแอปที่มี cardinality สูงหรือเก็บข้อมูลหลายเดือน ให้ขยับไป Small-IP IP เฉพาะทำให้คุณมี HTTPS สำหรับ Grafana และมีที่อยู่คงที่ไว้ใส่ในรายการอนุญาตบนเครื่องเป้าหมาย

เซิร์ฟเวอร์มอนิเตอร์ควรแยกจากสิ่งที่มันเฝ้าดูไหม?

ควร หาก Grafana รันบนเซิร์ฟเวอร์ที่เพิ่งหน่วยความจำหมด คุณจะมองไม่เห็นปัญหาในตอนที่ต้องการมากที่สุด VPS ขนาดเล็กที่แยกไว้ยังทำงานต่อได้เมื่อเครื่อง production ล่ม

ความคิดเห็น

ยังไม่มีความคิดเห็น เป็นคนแรกสิ

แสดงความคิดเห็น

ความคิดเห็นจะถูกตรวจสอบก่อนแสดง