Cách sử dụng PHP-FPM exporter
Trong lúc triển khai một trong các ứng dụng mà tôi đang phát triển lên server, tôi gặp phải hành vi rất kỳ lạ của tiến trình php-fpm. Việc tái hiện lại hành vi đó có thể mất hàng giờ, nên nếu dùng phương pháp "thử rồi ngồi chờ một cách ngớ ngẩn" thì sẽ mất quá nhiều thời gian để sửa lỗi. Việc đầu tiên tôi làm là cài đặt hệ thống giám sát (monitoring), vì nó cho phép bạn theo dõi những gì đang diễn ra trên máy trong lúc bạn ngủ.
Tôi rất thích Prometheus và Grafana, nên việc chọn hai công cụ này gần như là điều hiển nhiên.
Nếu bạn đang đọc hướng dẫn này, nhiều khả năng bạn đang gặp vấn đề khi thiết lập, nhưng tôi sẽ giả định rằng bạn đã cài đặt Prometheus rồi.
Thiết lập
Bắt đầu thôi. Tôi sẽ giả định là bạn đã SSH vào server/container mà bạn muốn giám sát. Tôi sẽ dùng PHP FPM Exporter từ repository này.
Tải exporter về và di chuyển nó vào /usr/local/bin (vì đây là một gói bình thường, không được quản lý bởi trình quản lý gói của bản phân phối) bằng lệnh sau:
wget https://github.com/hipages/php-fpm_exporter/releases/download/v2.2.0/php-fpm_exporter_2.2.0_linux_amd64
mv php-fpm_exporter_* /usr/local/bin/php-fpm_exporter
chmod 755 /usr/local/bin/php-fpm_exporter
Cấu hình
Phần này khiến tôi khá vất vả (tôi xin bào chữa là lúc đó đã khuya), và chính điều đó đã thôi thúc tôi viết hướng dẫn này vào sáng hôm sau, ngay sau khi thiết lập xong.
-
Mở file cấu hình PHP-FPM của bạn (thay
8.3bằng phiên bản PHP bạn đang dùng):vi /etc/php/8.3/fpm/pool.d/www.conf -
Thực hiện các thay đổi sau:
-
Bỏ dấu comment ở listen mode:
listen.mode = 0660 -
Bỏ dấu comment ở status URI:
pm.status_path = /status -
Đảm bảo cấu hình socket trỏ đúng đường dẫn (nếu cần, thay
8.3bằng phiên bản PHP bạn đang dùng):listen = /run/php/php8.3-fpm.sock
-
Bỏ dấu comment ở listen mode:
- Lưu các thay đổi và thoát khỏi trình soạn thảo.
-
Khởi động lại dịch vụ PHP-FPM để áp dụng cấu hình:
systemctl restart php8.3-fpm
Giờ đây, instance PHP-FPM của bạn đã được cấu hình để cung cấp số liệu (metrics) qua đường dẫn /status trên socket đã định nghĩa.
Dịch vụ
Tiếp theo, hãy tạo một dịch vụ (service) cho PHP-FPM exporter để nó có thể chạy nền và tự động khởi động khi hệ thống boot.
Mở một file dịch vụ mới cho exporter:
vi /etc/systemd/system/php-fpm_exporter.service
Thêm nội dung sau vào file:
# Service file for PHP-FPM Exporter:
[Unit]
Description=PHP-FPM Exporter Service
After=network.target
[Service]
User=www-data
Group=www-data
Type=simple
ExecStart=/usr/local/bin/php-fpm_exporter server --phpfpm.fix-process-count=true --phpfpm.scrape-uri "unix:///run/php/php8.3-fpm.sock;/status"
[Install]
WantedBy=multi-user.target
Khởi động và bật dịch vụ
Nạp lại systemd daemon để nó nhận cấu hình dịch vụ mới:
sudo systemctl daemon-reload
Bật dịch vụ PHP-FPM exporter để tự động khởi động khi hệ thống boot
sudo systemctl enable php-fpm_exporter
Khởi động dịch vụ PHP-FPM exporter:
sudo systemctl start php-fpm_exporter
Kiểm tra trạng thái dịch vụ để đảm bảo nó đang chạy đúng cách:
sudo systemctl status php-fpm_exporter
Nếu mọi thứ được thiết lập đúng, bạn sẽ thấy dịch vụ được liệt kê là active (running). Nếu có vấn đề gì đó, bạn có thể xem log bằng lệnh:
journalctl -u php-fpm_exporter -f
Thu thập số liệu
Giờ đây PHP-FPM exporter đã chạy, đã đến lúc cấu hình Prometheus để thu thập (scrape) số liệu.
-
Mở file cấu hình Prometheus của bạn (thường là
prometheus.yml). -
Thêm cấu hình job sau:
- job_name: 'php-fpm-exporter' scrape_interval: 15s # Adjust based on your needs static_configs: - targets: ['ip_of_your_server:9253'] -
Lưu các thay đổi và khởi động lại Prometheus:
sudo systemctl restart prometheus -
Xác minh rằng Prometheus đang thu thập số liệu bằng cách truy cập trang targets:
http://<your-prometheus-server>:9090/targets. Bạn sẽ thấy target php-fpm-exporter được liệt kê là up. Nếu không, hãy đảm bảo rằng exporter đang chạy và không có quy tắc tường lửa nào đang chặn kết nối.
Kiểm tra thiết lập trong Grafana
Khi Prometheus đã thu thập số liệu thành công, bạn có thể tạo các biểu đồ trực quan (visualization) trong Grafana.
Thêm Prometheus làm nguồn dữ liệu
- Đăng nhập vào instance Grafana của bạn.
- Vào Settings → Data Sources.
- Nhấp Add Data Source và chọn Prometheus.
-
Nhập URL của Prometheus (ví dụ:
http://<your-prometheus-server>:9090). - Nhấp Save & Test để xác nhận kết nối.
Nếu mọi thứ hoạt động tốt, bạn sẽ thấy thông báo cho biết nguồn dữ liệu đã được thêm thành công.
Chúc bạn giám sát vui vẻ