Lỗi broken pipe từ Node Exporter

🧠 Tổng quan.

Trong quá trình giám sát hệ thống Linux sử dụng PrometheusNode Exporter, bạn có thể gặp lỗi sau trong log của node_exporter:

Jun 19 16:45:16 SOC-DAILYBACKUP-17-16 node_exporter[1987641]: ts=2025-06-19T09:45:16.643Z caller=stdlib.go:105 level=error caller="error encoding and sending metric family: write tcp 10.166.17.16:9100" msg="->10.10.16.16:58878: write: broken pipe"

Đây là một lỗi khá phổ biến nhưng nhiều người chưa hiểu rõ nguyên nhân và cách xử lý dứt điểm. Bài viết này sẽ giúp bạn:

  • Hiểu rõ lỗi broken pipe là gì.
  • Xác định nguyên nhân cụ thể trong hệ thống Prometheus + Node Exporter.
  • Cách khắc phục và phòng tránh.
  • Bonus: Sơ đồ hoạt động và minh họa ASCII.

🧠 Lỗi broken pipe là gì?

“Broken pipe” là lỗi xảy ra khi một tiến trình cố ghi dữ liệu vào một kết nối (thường là TCP) nhưng đầu bên kia đã đóng kết nối.

🔧 Trong trường hợp này:

  • node_exporter (ở 10.166.17.16) đang gửi metrics về cho client (thường là Prometheus ở 10.10.16.16).
  • Nhưng client đã đóng socket TCP trước khi nhận đủ dữ liệu.
  • Kết quả: Node Exporter ghi vào socket → lỗi broken pipe.

🕸️ Mô hình hoạt động Node Exporter & Prometheus

 +----------------+         Scrape metrics        +---------------------+
 |                | <---------------------------- |                     |
 | Prometheus     |                               | Node Exporter       |
 | 10.10.16.16     |         HTTP over TCP         | 10.166.17.16:9100   |
 |                | ----------------------------> |                     |
 +----------------+                               +---------------------+

                     1. Prometheus mở kết nối HTTP GET
                     2. Node Exporter phản hồi /metrics
                     3. Nếu kết nối bị đóng quá sớm → broken pipe

⚠️ Nguyên nhân chính

Nguyên nhânMô tả chi tiết
❌ Prometheus đóng kết nối sớmDo timeout hoặc user bấm hủy query.
❌ Scrape timeout quá ngắnNode Exporter chưa phản hồi kịp → Prometheus timeout → đóng socket.
❌ Quá tải hệ thốngCPU hoặc Disk quá tải khiến Node Exporter phản hồi chậm.
❌ Mạng bất ổn / firewallNAT timeout, mất kết nối TCP giữa 2 IP.
❌ Prometheus query quá nặngTốc độ xử lý chậm, không giữ socket lâu.

🧪 Cách kiểm tra và khắc phục

✅ Kiểm tra cấu hình Prometheus

Trong file prometheus.yml:

scrape_configs:
  - job_name: 'node'
    static_configs:
      - targets: ['10.166.17.16:9100']
    scrape_interval: 15s
    scrape_timeout: 10s   # nên để >5s để tránh timeout sớm

👉 Gợi ý: tăng scrape_timeout từ mặc định (10s) lên 15s hoặc 20s nếu máy yếu.

✅ Kiểm tra tình trạng máy chạy Node Exporter

Trên 10.166.17.16:

top
iostat -x 1 5
vmstat 1 5

Kiểm tra:

  • CPU load có cao không?
  • Disk I/O có đang nghẽn?
  • RAM còn đủ không?

✅ Kiểm tra mạng và firewall

ping 10.10.16.16
mtr -rwzc 100 10.10.16.16
  • Kiểm tra packet loss.
  • Kiểm tra session timeout của firewall hoặc NAT (thường chỉ vài giây với HTTP).
  • Xem có bị chặn port 9100 TCP hoặc reset kết nối không.

✅ Theo dõi lỗi bằng log hoặc cảnh báo

Nếu bạn có tích hợp node_exporter với Grafana/Loki hoặc hệ thống log khác:

  • Tạo biểu đồ theo dõi số lượng lỗi broken pipe theo thời gian.
  • Cảnh báo nếu xuất hiện liên tục trong 5 phút.

🛠️ Cách xử lý thực tế trong prod.

✔️ Check real-time log:

journalctl -u node_exporter -f

✔️ Thử scrape thủ công:

curl http://10.166.17.16:9100/metrics

→ Nếu bạn thấy phản hồi chậm, hoặc bị treo → có vấn đề từ Node Exporter hoặc hệ thống bên dưới.

📌 Kết luận

Lỗi broken pipe trong Node Exporter là dấu hiệu cho thấy Prometheus hoặc mạng không giữ được kết nối đủ lâu để lấy dữ liệu.

👉 Tóm lại, bạn nên:

  • Tăng scrape_timeout
  • Tối ưu hệ thống máy đích
  • Kiểm tra mạng nội bộ và firewall
  • Theo dõi log để phát hiện sớm

📚 Tham khảo thêm

Chúc bạn sớm xử lý dứt điểm lỗi này và giữ hệ thống monitoring luôn ổn định!
Nếu bạn thấy bài viết hữu ích, đừng quên chia sẻ cho đồng nghiệp nhé. 😊

Bài viết gần đây

spot_img

Related Stories

Leave A Reply

Please enter your comment!
Please enter your name here

Đăng ký nhận thông tin bài viết qua email