ทำ Dashboard เฝ้าดูเซิร์ฟเวอร์ด้วย Grafana และ Prometheus
Prometheus เก็บข้อมูลได้ดีแต่แสดงผลได้พื้นฐานมาก Grafana คือส่วนที่ทำให้ข้อมูลเหล่านั้นกลายเป็น Dashboard ที่ดูแล้วเข้าใจสถานะทั้งระบบได้ในหน้าจอเดียว
คู่มือนี้ต่อยอดจากการติดตั้ง Prometheus และ Node Exporter โดยเพิ่ม Grafana นำเข้า Dashboard สำเร็จรูปที่ชุมชนทำไว้แล้ว และตั้งการแจ้งเตือน
สิ่งที่ต้องเตรียม
- Prometheus ที่ทำงานอยู่แล้วและเก็บข้อมูลจาก Node Exporter
- Docker และโดเมนย่อยสำหรับเข้าหน้าจอ
curl -s http://127.0.0.1:9090/-/healthy
ขั้นตอนที่ 1: ติดตั้ง Grafana
sudo mkdir -p /opt/grafana/data
sudo chown -R 472:472 /opt/grafana/data
cd /opt/grafana
sudo nano docker-compose.yml
services:
grafana:
image: grafana/grafana-oss:latest
container_name: grafana
restart: unless-stopped
ports:
- "127.0.0.1:3000:3000"
volumes:
- ./data:/var/lib/grafana
- ./provisioning:/etc/grafana/provisioning
environment:
GF_SECURITY_ADMIN_USER: admin
GF_SECURITY_ADMIN_PASSWORD: รหัสผ่านที่แข็งแรง
GF_SERVER_ROOT_URL: https://grafana.example.com
GF_USERS_ALLOW_SIGN_UP: "false"
GF_ANALYTICS_REPORTING_ENABLED: "false"
TZ: Asia/Bangkok
extra_hosts:
- "host.docker.internal:host-gateway"
sudo docker compose up -d
sudo docker compose logs -f grafana
บรรทัด extra_hosts ทำให้คอนเทนเนอร์เรียก Prometheus ที่รันบนเครื่องแม่ได้ผ่านชื่อ host.docker.internal
ขั้นตอนที่ 2: ตั้ง Data Source อัตโนมัติ
แทนที่จะคลิกตั้งเองในหน้าเว็บ ให้เขียนเป็นไฟล์ ซึ่งทำให้สร้างเครื่องใหม่ได้เหมือนเดิมทุกครั้ง
sudo mkdir -p /opt/grafana/provisioning/datasources
sudo nano /opt/grafana/provisioning/datasources/prometheus.yml
apiVersion: 1
datasources:
- name: Prometheus
type: prometheus
access: proxy
url: http://host.docker.internal:9090
isDefault: true
editable: false
jsonData:
timeInterval: 15s
sudo docker compose restart grafana
ขั้นตอนที่ 3: ตั้ง Nginx และ SSL
sudo nano /etc/nginx/sites-available/grafana
server {
listen 80;
server_name grafana.example.com;
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_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
sudo ln -s /etc/nginx/sites-available/grafana /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d grafana.example.com --agree-tos -m [email protected] --redirect
ขั้นตอนที่ 4: นำเข้า Dashboard สำเร็จรูป
เข้าหน้าเว็บแล้วไปที่ Dashboards แล้ว New แล้ว Import ใส่หมายเลขแล้วกด Load เลือก Data Source เป็น Prometheus
- 1860 Node Exporter Full ครอบคลุมทุกเมตริกของเซิร์ฟเวอร์ เป็นตัวที่ควรมีก่อนอื่น
- 7362 MySQL Overview
- 9628 PostgreSQL Database
- 12708 Nginx
- 193 Docker และ Container
Dashboard 1860 มีกราฟกว่าร้อยแผง ซึ่งอาจมากเกินไปสำหรับการดูประจำวัน แนะนำให้สร้าง Dashboard ของตัวเองที่มีเฉพาะสิ่งที่ดูจริง แล้วใช้ 1860 เมื่อต้องเจาะลึก
ขั้นตอนที่ 5: สร้างกราฟเอง
กด New Dashboard แล้ว Add visualization เลือก Prometheus แล้วใส่คำสั่ง PromQL
# การใช้งาน CPU เป็นเปอร์เซ็นต์
100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
# หน่วยความจำที่ใช้
100 * (1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)
# พื้นที่ดิสก์ที่เหลือ
100 * node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}
# ทราฟฟิกเครือข่าย
rate(node_network_receive_bytes_total{device!="lo"}[5m]) * 8
ตั้งหน่วยให้ถูกต้องในแท็บ Standard options เช่น percent (0-100) สำหรับเปอร์เซ็นต์ และ bits/sec สำหรับเครือข่าย ไม่เช่นนั้นตัวเลขจะอ่านยาก
ใช้ตัวแปรเพื่อให้เลือกเซิร์ฟเวอร์จากรายการดรอปดาวน์ได้ ในหน้า Dashboard settings แล้ว Variables เพิ่มตัวแปรชนิด Query
label_values(node_uname_info, instance)
แล้วอ้างถึงในคำสั่งด้วย {instance="$instance"}
ขั้นตอนที่ 6: ตั้งการแจ้งเตือน
ไปที่ Alerting แล้ว Alert rules แล้ว New alert rule
- ตั้งคำสั่ง เช่น
100 * (1 - node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}) > 85 - ตั้งเงื่อนไขว่าค่าต้องเกินเกณฑ์ติดต่อกันกี่นาทีจึงแจ้ง เช่น 5 นาที ลดการแจ้งเตือนจากค่าที่พุ่งชั่วคราว
- เลือก Contact point ที่จะส่งไป
ตั้ง Contact point ที่ Alerting แล้ว Contact points รองรับอีเมล Telegram Slack และ Webhook ซึ่งใช้ส่งเข้า LINE Notify ได้
URL: https://notify-api.line.me/api/notify
HTTP Method: POST
Authorization Header: Bearer <LINE_NOTIFY_TOKEN>
ขั้นตอนที่ 7: สำรองและย้ายเครื่อง
sudo tar czf /var/backups/grafana-$(date +%F).tar.gz -C /opt/grafana data provisioning
ส่งออก Dashboard เป็น JSON เก็บใน Git ด้วย ที่หน้า Dashboard settings แล้ว JSON Model ทำให้กู้คืนและทำซ้ำบนเครื่องอื่นได้
ปัญหาที่พบบ่อย
Data Source ทดสอบแล้วเชื่อมต่อไม่ได้
ตรวจว่าใช้ host.docker.internal ไม่ใช่ localhost เพราะ localhost ในคอนเทนเนอร์คือตัวคอนเทนเนอร์เอง และตรวจว่า Prometheus ฟังที่ IP ที่เข้าถึงได้
กราฟว่างเปล่า
ทดสอบคำสั่งใน Prometheus โดยตรงที่ http://127.0.0.1:9090/graph ก่อน หากที่นั่นก็ว่าง แปลว่าปัญหาอยู่ที่การเก็บข้อมูล ไม่ใช่ Grafana
เข้าหน้าเว็บแล้ว CSS เพี้ยน
ตั้ง GF_SERVER_ROOT_URL ให้ตรงกับที่อยู่จริง และตรวจว่า Nginx ส่ง X-Forwarded-Proto มาให้
ลืมรหัสผ่าน admin
sudo docker compose exec grafana grafana-cli admin reset-admin-password ใหม่
ต้องการระบบเฝ้าระวังพร้อม Dashboard ที่ออกแบบให้เหมาะกับระบบของคุณ ติดต่อ THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/
- Categories:
- Cloud
- Tags:
- Cloud
- Cloud Server
Related Posts
หมวดหมู่ที่น่าสนใจ
- Account Settings
- AD Server
- AI
- Alibaba Cloud
- Anti-Spam Gateway
- AWS Amazon Web Services
- Campaign
- CentOS/AlmaLinux
- Cloud
- Cloud Backup
- Cloud Communication
- Cloud Migration
- Cloud Security
- Cloud Server Management
- Cloud Solution
- Cloud Solution for Government
- Cloud Solutions by Industry
- Cloud Storage
- Cloud VPS App Plus +
- Cloud VPS DirectAdmin
- Cloud VPS Plesk
- CSR
- Cyber Security
- Cybersecurity
- Data Sovereignty
- Database Server
- DDoS
- Digital Tranformation
- Digital Transformation
- Direct Mail
- Directadmin
- Domainname
- Ecommerce
- ERP
- Generative AI
- Getting Started
- Google Cloud
- Google G Suite
- Huawei Cloud
- IT News
- Linux Server
- Managed Cloud Services
- Managed Service Provider
- Manual
- Microsoft
- Microsoft 365
- Microsoft Azure
- News
- On-premise
- Private Mail Server
- Promotion
- Recommend Solution (Enterprise)
- Server
- Sovereign Cloud
- THAI DATA CLOUD Platform
- Ubuntu
- Ubuntu
- Uncategorized
- VMware
- VPS Server
- Web Design
- Web Hosting
- Web Hosting (DirectAdmin)
- Web Hosting (Plesk)
- Web Technologies
- Windows Server
- Wordpress
- Zimbra
- เรื่องราวความประทับใจ
- โซลูชันสำหรับธุรกิจการผลิตและยานยนต์
- โซลูชันสำหรับธุรกิจการศึกษา
- โซลูชันสำหรับธุรกิจการเงิน
- โซลูชันสำหรับธุรกิจขนส่งและกระจายสินค้า
- โซลูชันสำหรับธุรกิจค้าปลีก
- โซลูชันสำหรับธุรกิจท่องเที่ยว
- โซลูชันสำหรับธุรกิจบริการสุขภาพและโรงพยาบาล
- โซลูชันสำหรับธุรกิจประกันภัย
- โซลูชันสำหรับธุรกิจพลังงานและสาธารณูปโภค
- โซลูชันสำหรับธุรกิจสื่อสารมวลชนและเอ็นเตอร์เทนเมนท์
- โซลูชันสำหรับธุรกิจอสังหาริมทรัพย์
- โซลูชันสำหรับธุรกิจเทคโนโลยี








