# Vận hành và giám sát

> Cách ZoPanel giám sát server: watchdog dịch vụ, cảnh báo qua email, Telegram hoặc webhook, uptime, lịch sử tài nguyên, trang Tối ưu, doctor và log.

Source: https://zopanel.net/vi/docs/operations  
Updated: 2026-10-07

ZoPanel giám sát server thay bạn. Watchdog tự khởi động lại dịch vụ bị dừng hoặc bị treo. Kiểm tra uptime phát hiện website không còn phản hồi. Cảnh báo được gửi tới bạn qua email, Telegram hoặc webhook. Khi có sự cố, `zopanel ctl doctor` cho biết chỗ nào hỏng và cách sửa.

## Watchdog dịch vụ

Agent của ZoPanel kiểm tra các dịch vụ đã cài mỗi phút. Nó chỉ theo dõi các unit đã cài và đang **enabled** (khởi động cùng hệ thống):

- Dịch vụ **không chạy** sẽ được bật lại.
- Dịch vụ vẫn chạy nhưng **không phản hồi** sẽ được khởi động lại khi bài kiểm tra sức khoẻ lỗi **3 lần liên tiếp**. Cách này bắt được dịch vụ bị treo hoặc cạn file descriptor.

| Dịch vụ | Cách kiểm tra |
| --- | --- |
| nginx | Kết nối TCP tới 127.0.0.1:80 |
| mariadb | Unix socket `/run/mysqld/mysqld.sock` |
| postfix | Lời chào SMTP (`220`) trên 127.0.0.1:25 |
| dovecot | Lời chào IMAP (`* OK`) trên 127.0.0.1:143 |
| rspamd | TCP 127.0.0.1:11332 |
| redis-server | TCP 127.0.0.1:6379 |
| pdns | API của nó trên 127.0.0.1:8081 |
| zopanel | Health check `/healthz` của panel |
| pure-ftpd, postgresql, mongod, docker, fail2ban, cron, ssh, zp-webmail | Chỉ kiểm tra trạng thái chạy |

Các quy tắc an toàn:

- **Tối đa 3 lần khởi động lại mỗi dịch vụ mỗi giờ.** Quá mức này, watchdog dừng can thiệp, để lại dịch vụ cho quản trị viên xử lý và gửi cảnh báo. Khi dịch vụ chạy lại bình thường, watchdog tiếp tục theo dõi nó.
- **nginx chỉ được khởi động lại khi `nginx -t` hợp lệ.** Nếu cấu hình sai, bạn nhận cảnh báo kèm lỗi thay vì một lần restart thất bại.
- **Ưu tiên cập nhật gói.** Watchdog tạm dừng khi `apt` hoặc `dpkg` đang chạy.
- systemd tự khởi động lại daemon bị crash trong vài giây (ZoPanel thêm drop-in cho việc này, tối đa 5 lần trong 10 phút). Watchdog xử lý những trường hợp systemd không thấy, ví dụ dịch vụ bị treo.

### Dịch vụ đang được giữ dừng

Dịch vụ bạn dừng ở trang **Dịch vụ** sẽ được watchdog để yên, kể cả sau khi agent khởi động lại. Khi bạn bật lại dịch vụ, từ panel hoặc bằng `systemctl start`, watchdog tiếp tục theo dõi nó. Muốn tắt hẳn một dịch vụ, hãy tắt **Khởi động cùng hệ thống**.

Mọi hành động của watchdog (khởi động lại, lỗi, bỏ cuộc, đã phục hồi) đều được ghi vào **Nhật ký hoạt động**.

## Cảnh báo

Cấu hình cảnh báo tại **Cài đặt → Cảnh báo**. Bật một hoặc nhiều kênh:

| Kênh | Thông tin cần nhập |
| --- | --- |
| Telegram | Bot token (tạo bot bằng @BotFather) và Chat ID (lấy từ @userinfobot) |
| Email (SMTP) | SMTP host, cổng (mặc định 587; cổng 465 dùng TLS ngay từ đầu), tên đăng nhập, mật khẩu, **Người gửi**, **Người nhận** (cách nhau bởi dấu phẩy) |
| Webhook (Discord / Slack) | **Loại** (Discord, Slack hoặc JSON) và URL `https://` |

Chọn các sự kiện trong mục **Sự kiện** và đặt ngưỡng. Bấm **Lưu**, rồi bấm **Gửi thử** để kiểm tra. Sau khi lưu, bot token, mật khẩu SMTP và URL webhook không bao giờ hiển thị lại.

| Sự kiện | Khi nào được gửi |
| --- | --- |
| Website không truy cập được | Website lỗi hai lần kiểm tra liên tiếp. Có thêm thông báo khi website hoạt động lại. |
| Dịch vụ ngừng hoặc được khởi động lại | Watchdog đã restart một dịch vụ, restart thất bại hoặc đã bỏ cuộc |
| CPU quá tải / RAM quá tải | Mức trung bình trong phút gần nhất chạm ngưỡng CPU % hoặc RAM % (mặc định 90%) |
| Ổ đĩa sắp đầy | Phân vùng gốc chạm ngưỡng ổ đĩa % (mặc định 90%), hoặc dự báo sẽ đạt 90% trong vòng 14 ngày |
| SSL sắp hết hạn / Gia hạn SSL thất bại | Chứng chỉ hết hạn trong vòng 14 ngày, hoặc gia hạn bị lỗi |
| Sao lưu thất bại | Một bản sao lưu bị lỗi, hoặc có tài khoản lâu chưa được sao lưu tự động |
| Hàng đợi mail tăng bất thường | Có từ 300 thư trở lên đang chờ trong hàng đợi |
| IP máy chủ bị đưa vào blacklist | Kiểm tra mỗi ngày một lần |
| Tài khoản chạm giới hạn gửi mail | Một tài khoản dùng hết hạn mức email theo giờ |
| Cập nhật panel lỗi hoặc đã tự lùi bản | Bản cập nhật lỗi, đã tự rollback hoặc không kiểm tra được |
| Tên miền sắp hết hạn | 30, 7 và 1 ngày trước khi tên miền hết hạn đăng ký |
| Máy chủ trong fleet mất kết nối | Một server ở trang **Máy chủ** không còn phản hồi |
| Đăng nhập từ IP mới, Đăng nhập panel thất bại | Sự kiện đăng nhập |
| Phát hiện mã độc, Deploy thất bại, Có bản cập nhật | Như tên gọi |

Mọi sự kiện đều bật sẵn, trừ **Đăng nhập panel thất bại** và **Có bản cập nhật**. Cùng một cảnh báo chỉ được gửi tối đa một lần mỗi 30 phút.

Khách hàng và đại lý có thể tự nhận cảnh báo của mình qua email hoặc Telegram tại **Tài khoản của tôi → Thông báo**. Các cảnh báo này gồm website sập, SSL, sao lưu, giới hạn gửi mail, mã độc và dung lượng đĩa.

Để kết nối hệ thống billing và tự động hoá, dùng **Cài đặt → Hook**. Mục này gửi webhook JSON có chữ ký khi tài khoản, website, database, mail hoặc chứng chỉ thay đổi, và tách biệt với cảnh báo.

## Uptime và lịch sử tài nguyên

**Uptime.** Mỗi phút, ZoPanel gửi request tới từng website đang hoạt động qua nginx trên chính server. Lỗi 5xx hoặc không có phản hồi được tính là sập. Website chỉ bị đánh dấu sập sau hai lần lỗi liên tiếp. Tab **Tên miền** của website hiển thị uptime 24 giờ, 7 ngày, 30 ngày và một cột cho mỗi ngày trong 90 ngày gần nhất.

Kiểm tra uptime không đánh thức website đang ngủ: website có PHP đã dừng vì rảnh sẽ không bị kiểm tra, và lượt kiểm tra không được tính là lượt truy cập. Khi RAM dành cho khách đang thiếu, việc kiểm tra tạm dừng; bạn nhận cảnh báo RAM thay vào đó.

**Lịch sử tài nguyên.** Cứ 5 phút, ZoPanel ghi lại CPU (% của một nhân) và RAM của từng tài khoản. Biểu đồ có giá trị trung bình và đỉnh cho 24 giờ, 7 ngày, 30 ngày hoặc 1 năm.

- Quản trị viên: vào **Tài khoản**, chọn **Lịch sử tài nguyên** trong menu của tài khoản.
- Khách hàng và đại lý: trang **Tài nguyên**.

## Trang Tối ưu

Trang **Tối ưu** (menu quản trị) đưa ra gợi ý dựa trên số liệu đo trên chính server này, tính toán tại chỗ:

- PHP-FPM: tổng số PHP worker được phép có vừa RAM hay không;
- kích thước buffer pool của MariaDB (khoảng 20% RAM là hợp lý cho server shared hosting);
- thiếu swap;
- OPcache đang tắt ở một phiên bản PHP;
- nén bộ nhớ, kèm lệnh nâng kernel để bật được (xem [Hiệu năng và sức chứa](/vi/docs/performance));
- `worker_processes` của nginx so với số nhân CPU, và tải CPU cao;
- website WordPress chưa bật page cache;
- dung lượng đĩa, kèm dự báo khi đã có đủ số liệu 5 ngày.

Một số gợi ý có nút **Áp dụng**:

- buffer MariaDB: MariaDB khởi động lại, database tạm gián đoạn vài giây;
- tạo file swap;
- nginx worker: nginx tải lại, không gián đoạn;
- bật page cache cho các website WordPress.

## zopanel ctl doctor

Chạy lệnh này đầu tiên khi thấy có gì bất thường. Lệnh chỉ kiểm tra và không thay đổi gì:

```bash
zopanel ctl doctor
```

Doctor kiểm tra:

- `zopanel-agent`, `zopanel`, `nginx` và `mariadb` đang chạy;
- agent và health check của panel phản hồi (mặc định cổng 8888);
- database của panel còn nguyên vẹn;
- `/`, `/home` và `/var` còn ít nhất 10% dung lượng trống;
- RAM khả dụng trên 200 MB;
- chứng chỉ panel còn hạn trên 14 ngày;
- đồng hồ đã đồng bộ NTP;
- kết quả lần cập nhật gần nhất;
- nhật ký hoạt động không bị sửa.

Mỗi dòng `[FAIL]` kèm lệnh hoặc trang trong panel để khắc phục. Lệnh trả mã thoát 1 khi phát hiện lỗi, nên có thể dùng trong script.

## zopanel ctl support-bundle

```bash
zopanel ctl support-bundle
```

Lệnh tạo file `/root/zopanel-support-YYYYMMDD-HHMMSS.tar.gz`, chỉ root đọc được. File gồm:

- báo cáo doctor và phiên bản phần mềm;
- các unit bị lỗi, mức dùng RAM và đĩa;
- 500 dòng log gần nhất của `zopanel`, `zopanel-agent`, nginx, MariaDB, Postfix, Dovecot và `/var/log/nginx/error.log`;
- cấu hình panel, đã loại bỏ mật khẩu, secret, token và khoá.

## Log

| Nội dung | Vị trí |
| --- | --- |
| Panel và agent | `journalctl -u zopanel -u zopanel-agent -n 200` |
| Đăng nhập panel thất bại (fail2ban dùng) | `/var/log/zopanel/auth.log` |
| Access log và error log của website | `/var/log/zopanel/sites/<domain>.access.log`, `<domain>.error.log`; hoặc tab **Nhật ký** của website |
| Lỗi PHP của một tài khoản | `~/logs/php<phiên bản>_errors.log` trong thư mục home của tài khoản |
| Pool PHP-FPM | `/var/log/zopanel/php/<user>-<phiên bản>.log` |
| nginx | `/var/log/nginx/error.log` |
| Thao tác trong panel | **Nhật ký hoạt động** |

Trong tab **Nhật ký** của website, mục **Chẩn đoán** (**Chạy chẩn đoán**) phân tích lỗi gần đây và gợi ý cách sửa. Xem [Xử lý sự cố](/vi/docs/troubleshooting) cho các lỗi thường gặp.
