Tại sao bạn không nên để Jenkins chạy ‘tự do’?
Có lần, team mình rơi vào cảnh dở khóc dở cười: Pipeline CI/CD bỗng nhiên chậm rì rì. Một bản build thông thường chỉ mất 10 phút nay vọt lên tận 45 phút. Cả team nháo nhào lục lại log từng node, kiểm tra từng commit nhưng vẫn không thấy điểm bất thường. Lúc đó mình mới nhận ra, Jenkins nếu thiếu monitoring thì chẳng khác nào một “chiếc hộp đen” đầy bí ẩn.
Khi hệ thống phình to với hàng chục slave node và hàng trăm job chạy gối đầu, việc kiểm tra thủ công là bất khả thi. Prometheus kết hợp cùng Jenkins Prometheus Exporter chính là giải pháp cứu cánh. Bộ đôi này sẽ giúp bạn soi sáng những góc khuất như:
- Lượng job đang kẹt trong hàng đợi (Queue time) là bao nhiêu?
- Node nào đang ngốn sạch RAM khiến build bị treo?
- Dự án nào có tỷ lệ build thất bại cao bất thường trong 24 giờ qua?
Thiết lập giám sát sớm giúp bạn chủ động xử lý trước khi sếp kịp phàn nàn. Đặc biệt, nó giúp loại bỏ tình trạng “thả gà ra đuổi” mỗi khi hệ thống gặp sự cố nghẽn cổ chai.
Cài đặt Jenkins Prometheus Exporter
Thay vì cài agent rời, chúng ta sẽ sử dụng plugin Prometheus metrics. Plugin này cực kỳ gọn nhẹ, tự động chuyển hóa dữ liệu nội bộ của Jenkins sang định dạng mà Prometheus có thể hiểu được.
Bước 1: Cài đặt Plugin
Đầu tiên, bạn truy cập Manage Jenkins > Plugins. Tại tab Available plugins, hãy tìm từ khóa: Prometheus metrics. Sau khi nhấn cài đặt, mình khuyên bạn nên restart lại Jenkins để đảm bảo plugin khởi tạo mọi class cần thiết.
Bước 2: Kiểm tra Endpoint Metrics
Sau khi cài đặt thành công, Jenkins sẽ mở một cổng dữ liệu tại: http://<your-jenkins-url>:8080/prometheus/. Hãy thử truy cập link này. Nếu màn hình hiện ra hàng loạt dòng text như jenkins_builds_duration_milliseconds_summary thì chúc mừng, bạn đã đi đúng hướng.
Mẹo nhỏ về bảo mật: Nếu gặp lỗi 403 Forbidden, bạn hãy vào Manage Jenkins > System. Tại mục cấu hình Prometheus, bạn có thể tích chọn Path authentication disabled. Tuy nhiên, trong môi trường Production, tốt nhất hãy dùng API Token để Prometheus xác thực khi lấy dữ liệu.
Cấu hình Prometheus thu thập dữ liệu
Bây giờ là lúc kết nối hai hệ thống. Bạn mở file prometheus.yml và thêm đoạn cấu hình sau vào mục scrape_configs:
scrape_configs:
- job_name: 'jenkins-ci'
metrics_path: '/prometheus/'
scrape_interval: 15s # Thu thập dữ liệu mỗi 15 giây
static_configs:
- targets: ['192.168.1.50:8080']
basic_auth:
username: 'monitor-user'
password: 'your-api-token-here'
Để áp dụng cấu hình mà không cần restart service, bạn hãy chạy lệnh:
curl -X POST http://localhost:9090/-/reload
Lưu ý, hãy tạo một User riêng trong Jenkins chỉ có quyền View cho Prometheus. Việc dùng tài khoản Admin để scrape dữ liệu là một lỗ hổng bảo mật nghiêm trọng mà nhiều bạn thường mắc phải.
3 chỉ số “vàng” cần đưa lên Dashboard
Khi dữ liệu đã đổ về, đừng sa đà vào việc vẽ quá nhiều biểu đồ. Hãy tập trung vào 3 chỉ số cốt lõi sau:
1. Sức khỏe của Build Agents
Sử dụng metric jenkins_node_online_status. Giá trị 1 là ổn định, 0 là mất kết nối. Mình thường đặt cảnh báo nếu node build chính (như node chạy Docker hoặc iOS) offline quá 3 phút.
2. Độ dài hàng đợi (Queue Size)
Dùng metric jenkins_queue_size_value. Nếu con số này liên tục lớn hơn 5 trong vòng 15 phút, team bạn đang thiếu Executor trầm trọng. Đây là lúc cần nâng cấp CPU hoặc bổ sung thêm slave node.
3. Tốc độ build thành công
Metric jenkins_builds_last_build_result_ordinal giúp bạn theo dõi sức khỏe của code. Một dự án có tỷ lệ fail liên tục thường do môi trường build không ổn định hoặc unit test quá lỏng lẻo.
Kết nối Grafana để trực quan hóa
Thay vì tự thiết kế, bạn hãy tận dụng Dashboard có sẵn. Hãy dùng ID 9964 trong mục Import của Grafana. Dashboard này cung cấp đầy đủ từ biểu đồ thời gian build trung bình đến tình trạng executor hiện tại chỉ trong vài giây setup.
Kinh nghiệm xử lý “Bão cảnh báo” (Alert Fatigue)
Lúc mới làm, mình từng nhận 100 tin nhắn Telegram mỗi đêm chỉ vì mạng chập chờn khiến Prometheus mất kết nối tạm thời. Đó là sai lầm kinh điển. Để tránh bị “loãng” thông tin, bạn nên:
- Sử dụng hàm
avg_over_timeđể lọc bỏ các đỉnh nhọn dữ liệu tức thời. - Chỉ bắn cảnh báo khi sự cố kéo dài (ví dụ: Queue > 10 trong 10 phút liên tục).
- Phân cấp thông báo: Cảnh báo qua Slack cho lỗi nhẹ, gọi điện/SMS cho lỗi hệ thống chết hoàn toàn.
Giám sát Jenkins không chỉ là cài đặt công cụ, mà là cách bạn hiểu hệ thống đang vận hành ra sao. Nếu bạn gặp khó khăn khi viết query PromQL, hãy để lại bình luận phía dưới để mình hỗ trợ nhé!

