Zabbix: ติดตั้งระบบมอนิเตอร์เซิร์ฟเวอร์ด้วย Docker Compose

ติดตั้ง Zabbix 7.0 LTS ด้วย Docker Compose จาก image ทางการ ครบทั้ง server หน้าเว็บ PostgreSQL และ agent 2 เปลี่ยนรหัส Admin แล้วเพิ่มเครื่อง Linux เครื่องแรก

โดย ทีมงาน THAI DATA CLOUD อัปเดต อ่าน 11 นาที

แชร์FacebookXLINELinkedIn
Zabbix — Zabbix: ติดตั้งระบบมอนิเตอร์เซิร์ฟเวอร์ด้วย Docker Compose
Zabbix: ติดตั้งระบบมอนิเตอร์เซิร์ฟเวอร์ด้วย Docker Compose

คำตอบสั้น ๆ: ติดตั้ง Zabbix 7.0 LTS ด้วย Docker Compose จาก image ทางการ ครบทั้ง server หน้าเว็บ PostgreSQL และ agent 2 เปลี่ยนรหัส Admin แล้วเพิ่มเครื่อง Linux เครื่องแรก

คู่มือนี้อธิบาย Zabbix ทีละขั้นตอน พร้อมคำสั่งที่ใช้ได้จริงและปัญหาที่พบบ่อย

Zabbix คือระบบมอนิเตอร์ระดับองค์กรแบบโอเพนซอร์สที่เฝ้าดูได้ทั้งเซิร์ฟเวอร์ Linux และ Windows อุปกรณ์เครือข่ายผ่าน SNMP ฐานข้อมูล และเว็บไซต์ เก็บค่าย้อนหลัง แสดงกราฟ และแจ้งเตือนเมื่อค่าเกินเกณฑ์ที่ตั้งไว้ผ่านอีเมลหรือ webhook เหมาะกับฝ่าย IT ที่ดูแลเครื่องจำนวนมากและต้องการเห็นปัญหาก่อนผู้ใช้โทรมาแจ้ง

คู่มือนี้ติดตั้งรุ่น 7.0 LTS ด้วย image ทางการ ประกอบด้วย server, หน้าเว็บ, PostgreSQL และ agent สำหรับตัวเครื่องมอนิเตอร์เอง เมื่อจบคุณจะเข้าหน้าเว็บผ่าน HTTPS เปลี่ยนรหัสผ่านเริ่มต้นแล้ว และเห็นข้อมูลของเครื่อง Linux เครื่องแรกที่ติดตั้ง agent

สิ่งที่ต้องเตรียม

  • Cloud Server ที่ใช้ Ubuntu 24.04 พร้อม Docker Engine และ Compose plugin ขนาดเริ่มต้นราว 2 vCPU / RAM 4 GB และดิสก์ SSD 50 GB สำหรับไม่เกิน 100 โฮสต์ เป็นค่าประมาณ ฐานข้อมูลจะโตตามจำนวน item และระยะเก็บประวัติ
  • ซับโดเมน เช่น monitor.example.com และ Nginx Proxy Manager พร้อมเครือข่าย proxy
  • สิทธิ์ sudo บนเครื่องที่จะมอนิเตอร์ เพื่อติดตั้ง agent 2
  • บัญชี SMTP สำหรับส่งอีเมลแจ้งเตือน

ถ้าต้องการแค่ตรวจว่าเว็บไซต์ล่มหรือไม่ Uptime Kuma ติดตั้งง่ายกว่า ระบบนี้เหมาะเมื่อต้องการดูภายในเครื่อง เช่น CPU ดิสก์ บริการที่หยุดทำงาน และ log พร้อมระบบแจ้งเตือนแบบมีลำดับขั้น

แผนภาพผู้ดูแลเข้าหน้าเว็บ Zabbix ผ่าน Nginx Proxy Manager ส่วน server ดึงค่าจาก agent ปลายทางพอร์ต 10050 และเก็บลง PostgreSQL
หน้าเว็บผ่าน HTTPS ส่วน server คุยกับ agent ที่ 10050 (passive) และรับข้อมูลที่ 10051 (active)

ขั้นตอนที่ 1: เตรียมโฟลเดอร์และรหัสผ่านฐานข้อมูล

sudo install -d -o $USER /opt/monitor
cd /opt/monitor
echo "POSTGRES_PASSWORD=$(openssl rand -hex 24)" > .env
chmod 600 .env

ขั้นตอนที่ 2: เขียน compose.yaml ด้วย image ทางการ

x-db: &db
  DB_SERVER_HOST: db
  POSTGRES_DB: zbx
  POSTGRES_USER: zbx
  POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}

services:
  db:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_DB: zbx
      POSTGRES_USER: zbx
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
    volumes:
      - ./pgdata:/var/lib/postgresql/data

  server:
    image: zabbix/zabbix-server-pgsql:ubuntu-7.0-latest
    restart: unless-stopped
    environment: *db
    ports:
      - "10051:10051"
    depends_on:
      - db

  web:
    image: zabbix/zabbix-web-nginx-pgsql:ubuntu-7.0-latest
    container_name: zbx-web
    restart: unless-stopped
    environment:
      <<: *db
      ZBX_SERVER_HOST: server
      PHP_TZ: Asia/Bangkok
    depends_on:
      - server
    networks:
      - default
      - proxy

  agent:
    image: zabbix/zabbix-agent2:ubuntu-7.0-latest
    restart: unless-stopped
    environment:
      ZBX_HOSTNAME: Zabbix server
      ZBX_SERVER_HOST: server

networks:
  proxy:
    external: true

บล็อก x-db คือค่าที่ใช้ซ้ำระหว่าง server กับหน้าเว็บ ตอนเริ่มครั้งแรก server จะสร้างโครงสร้างฐานข้อมูลและข้อมูลตั้งต้นให้เอง แท็ก ubuntu-7.0-latest ทำให้ได้รุ่นแก้ไขล่าสุดของสาย 7.0 LTS โดยไม่ข้ามไปเวอร์ชันหลักใหม่เอง

พอร์ต 10051 เปิดไว้ให้ agent ที่ทำงานแบบ active ส่งข้อมูลเข้ามา จำไว้ว่าพอร์ตที่ Docker publish จะไม่ถูกกรองด้วย UFW ให้จำกัด IP ต้นทางที่ไฟร์วอลล์ระดับคลาวด์ หรือผูกกับ IP ภายใน เช่น "192.0.2.10:10051:10051" ถ้าเครื่องทั้งหมดอยู่ในเครือข่ายภายในเดียวกัน

docker compose up -d
docker compose logs -f server

ขั้นตอนที่ 3: เปิด HTTPS และเปลี่ยนรหัสผ่าน Admin

ใน Nginx Proxy Manager เพิ่ม Proxy Host กรอก Domain Names monitor.example.com, Forward Hostname zbx-web, Forward Port 8080 (หน้าเว็บในคอนเทนเนอร์ฟังที่พอร์ตนี้) เปิด Block Common Exploits ขอใบรับรองพร้อม Force SSL และแนะนำให้ผูก Access List จำกัดเฉพาะ IP สำนักงานหรือ VPN

เปิด https://monitor.example.com ล็อกอินด้วยบัญชีเริ่มต้น Username Admin รหัสผ่าน zabbix แล้วไปที่ Users → Users → Admin → Change password ตั้งรหัสผ่านใหม่ทันที เพราะค่านี้เป็นที่รู้กันทั่วไป จากนั้นสร้างบัญชีของผู้ดูแลแต่ละคนแยกกัน ไม่ใช้บัญชีร่วม

ขั้นตอนที่ 4: ติดตั้ง agent 2 บนเครื่องที่ต้องการมอนิเตอร์

บนเครื่อง Ubuntu 24.04 ปลายทาง ติดตั้ง agent จาก repository ทางการของรุ่น 7.0 ไฟล์ .deb แรกมีหน้าที่เพิ่มแหล่งแพ็กเกจให้ระบบ

cd /tmp
wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.0+ubuntu24.04_all.deb
sudo dpkg -i zabbix-release_latest_7.0+ubuntu24.04_all.deb
sudo apt update
sudo apt install -y zabbix-agent2

แก้ไฟล์คอนฟิกของ agent (zabbix_agent2.conf ใต้ /etc) สามบรรทัดนี้ ค่า Server ต้องเป็น IP ที่ปลายทางมองเห็นว่าคำขอมาจากไหน ซึ่งคือ IP สาธารณะของเครื่องมอนิเตอร์ (คอนเทนเนอร์ออกอินเทอร์เน็ตผ่าน IP ของโฮสต์)

Server=203.0.113.10
ServerActive=203.0.113.10
Hostname=web01
sudo systemctl restart zabbix-agent2
sudo systemctl enable zabbix-agent2
sudo ufw allow from 203.0.113.10 to any port 10050 proto tcp

agent บนเครื่องปลายทางติดตั้งแบบแพ็กเกจปกติ ไม่ได้อยู่ใน Docker กฎ UFW บรรทัดสุดท้ายจึงมีผลจริง และเปิดพอร์ต 10050 ให้เฉพาะเครื่องมอนิเตอร์เท่านั้น

ขั้นตอนที่ 5: เพิ่มโฮสต์ในหน้าเว็บ

ไปที่ Data collection → Hosts → Create host แล้วกรอก

  • Host name: web01 ต้องตรงกับค่า Hostname ในไฟล์คอนฟิกของ agent ทุกตัวอักษร
  • Templates: Linux by Zabbix agent
  • Host groups: Linux servers
  • Interfaces: กด Add → Agent ใส่ IP 198.51.100.21 พอร์ต 10050
ภาพจำลองหน้า New host ของ Zabbix 7.0 กรอก Host name web01 template Linux by Zabbix agent และ interface แบบ Agent
Host name ต้องตรงกับ Hostname ในไฟล์คอนฟิกของ agent ทุกตัวอักษร (ภาพจำลอง)

กด Add แล้วรอ 1–2 นาที ไอคอน ZBX ในรายการโฮสต์ต้องเป็นสีเขียว และเมนู Monitoring → Latest data ต้องเริ่มมีค่า CPU หน่วยความจำ และดิสก์ของเครื่อง web01

ขั้นตอนที่ 6: ตั้งการแจ้งเตือน สำรองข้อมูล และอัปเดต

ตั้ง SMTP ที่ Alerts → Media types → Email แล้วเพิ่มอีเมลของผู้รับในแท็บ Media ของผู้ใช้แต่ละคน จากนั้นเปิด action ชื่อ Report problems to Zabbix administrators ใน Alerts → Actions → Trigger actions และเพิ่มผู้ดูแลเข้ากลุ่มนั้น

sudo mkdir -p /var/backups/monitor
docker compose exec -T db pg_dump -U zbx -Fc zbx \
  | sudo tee /var/backups/monitor/db-$(date +%F).dump > /dev/null

ฐานข้อมูลเก็บทั้งการตั้งค่าและประวัติค่าทั้งหมด จึงเป็นส่วนเดียวที่ต้องสำรอง ควบคุมขนาดด้วยระยะเก็บประวัติในหน้า Administration → Housekeeping อัปเดตภายในสาย 7.0 ด้วย docker compose pull && docker compose up -d หลังสำรองข้อมูล ส่วนการขึ้นเวอร์ชันหลักใหม่ server จะอัปเกรดโครงสร้างฐานข้อมูลอัตโนมัติ จึงต้องสำรองและอ่าน upgrade notes ก่อนเสมอ

ผลคำสั่ง docker compose ps ของ Zabbix ครบสี่บริการ และการทดสอบพอร์ต 10050 ของเครื่องปลายทาง
ทุกบริการต้องขึ้น Up และเครื่องมอนิเตอร์ต้องต่อพอร์ต 10050 ของปลายทางได้

ปัญหาที่พบบ่อยเกี่ยวกับ Zabbix

โฮสต์ Zabbix server ขึ้น ZBX สีแดง cannot connect to 127.0.0.1:10050?

โฮสต์ตั้งต้นชี้ agent ไปที่ 127.0.0.1 ซึ่งในคอนเทนเนอร์ของ server ไม่มี agent อยู่ แก้ที่ Data collection → Hosts → Zabbix server ในส่วน Interfaces เปลี่ยน DNS name เป็น agent (ชื่อบริการใน compose) และเลือก Connect to เป็น DNS แล้วกด Update ไอคอนจะเป็นสีเขียวภายในไม่กี่นาที

ล็อกของ agent ปลายทางขึ้นว่า connection rejected, allowed hosts?

ค่า Server ในไฟล์คอนฟิกของ agent ไม่ตรงกับ IP ที่คำขอเข้ามาจริง ดู IP ในข้อความล็อกนั้น แล้วใส่ IP นั้นในบรรทัด Server (ใส่หลายค่าได้โดยคั่นด้วยจุลภาค) จากนั้นรีสตาร์ต agent

Active checks ไม่ทำงานและล็อกขึ้น host not found?

ชื่อใน Host name บนหน้าเว็บต้องตรงกับ Hostname ในไฟล์คอนฟิกแบบตัวพิมพ์เล็กใหญ่ตรงกัน และเครื่องปลายทางต้องเชื่อมต่อพอร์ต 10051 ของเครื่องมอนิเตอร์ได้ ทดสอบด้วย nc -vz 203.0.113.10 10051

ดิสก์ของเครื่องมอนิเตอร์เต็มเร็วผิดปกติ?

ลดระยะเก็บ history และ trends ในหน้า Housekeeping ลดความถี่ของ item ที่ไม่จำเป็น และปิด item ที่ไม่ได้ใช้ใน template เมื่อจำนวนโฮสต์มากขึ้น พิจารณาใช้ TimescaleDB ตาม เอกสาร Installation from containers

เช็กลิสต์หลังติดตั้ง Zabbix เช่น เปลี่ยนรหัส Admin จำกัดพอร์ต 10051 ตั้ง Housekeeping และทดสอบอีเมลแจ้งเตือน
ทำครบทุกข้อก่อนนำเครื่องสำคัญเข้าระบบมอนิเตอร์

ต้องการเครื่องสำหรับระบบมอนิเตอร์ที่แยกจากระบบงานหลัก ดู Cloud Server หรือ ติดต่อทีมงาน THAI DATA CLOUD เพื่อช่วยออกแบบการมอนิเตอร์และการแจ้งเตือนขององค์กร

อ่านเพิ่มเติมเกี่ยวกับ Zabbix

แชร์FacebookXLINELinkedIn

มีคำถามเรื่องบริการ? ติดต่อทีมงาน