Bộ đếm lưu lượng OpenVPN và I/O đĩa: ba con số khác nhau
Byte giao diện, bộ đếm ký tự của tiến trình và các lần ghi lên đĩa đo những công việc khác nhau. Hãy so sánh chúng trước khi định cỡ đĩa từ lưu lượng đường hầm.
Cho một tệp lớn đi qua đường hầm và bộ đếm giao diện tăng đúng bằng kích thước tệp. Không có gì trong con số đó cho thấy cùng lượng dữ liệu ấy đã tới đĩa. Trong những cuộc thảo luận này, ba phép đo khác nhau được so sánh, và chúng trả lời ba câu hỏi khác nhau: bao nhiêu lưu lượng đã đi qua một tầng mạng, tiến trình đọc và ghi bao nhiêu byte qua các lời gọi hệ thống, và bao nhiêu công việc đã tới tầng lưu trữ.
So sánh cái thứ nhất với cái thứ ba là sai lầm thường gặp, và nó tạo ra hoặc một vấn đề đĩa ma hoặc một kế hoạch dung lượng bỏ qua những lần ghi thực sự diễn ra. Ba thứ đó tách biệt được, và mỗi thứ có cách dùng đúng.
Ba con số bị nhầm lẫn
Bộ đếm giao diện mô tả lưu lượng được xử lý ở một tầng mạng. Đó là con số đúng cho băng thông, cho kích thước của một đường hầm và cho các mô hình tính cước đặt giá cho việc truyền qua.
Bộ đếm ký tự của tiến trình mô tả các byte được chuyển qua lời gọi đọc và ghi trên bất kỳ bộ mô tả nào, kể cả ống, thiết bị đầu cuối và thiết bị ký tự. Đó là con số đúng để hỏi một tiến trình bận đến đâu ở ranh giới lời gọi hệ thống, và nó không phải hóa đơn lưu trữ.
Bộ đếm lưu trữ mô tả các byte mà nhân hệ điều hành đã cố chuyển tới hoặc từ một thiết bị khối. Đó là con số đúng cho việc lập kế hoạch dung lượng, với lưu ý rằng nhân tự ghi lại các giới hạn hạch toán của nó: các lần đọc trong bộ nhớ đệm không trở thành lần đọc lưu trữ, và một lần ghi bị hủy sau đó không trở thành lần ghi thiết bị hoàn tất.
| Measurement | Question it answers |
|---|---|
| Interface bytes | How much traffic crossed this layer |
rchar and wchar | How much data the process moved through system calls |
read_bytes and write_bytes | How much work reached the storage layer |
Vì sao bộ mô tả tệp không phải là ghi đĩa
Một VPN trong không gian người dùng trao đổi gói tin với nhân qua thiết bị TUN, đây là thiết bị ký tự chứ không phải tệp thường. Đọc từ nó chuyển giao một gói; ghi vào nó đưa một gói vào. Không có trang nội dung tệp nào được chuẩn bị cho lưu trữ, và không có đường dẫn hệ thống tệp nào liên quan.
Vì thế một đường hầm bận rộn có thể hiển thị bộ đếm ký tự khổng lồ mà gần như không có bộ đếm lưu trữ. Tiến trình thực sự đã chuyển những byte đó, và nhân thực sự không cần đĩa để làm việc đó.
cat /proc/$(pgrep -n openvpn)/io
ip -s link show tun0
Hãy đọc kết quả đầu tiên như số lũy kế từ khi tiến trình khởi động, không phải như tốc độ. Kết quả thứ hai cho góc nhìn giao diện của cùng lưu lượng đó. Khoảng cách lớn giữa hai bên là điều dự kiến và không chỉ ra rò rỉ, hàng đợi hay cấu hình sai.
Byte thực sự đến từ đâu
Kết quả liên tục có ngân sách riêng, và nó được điều khiển bởi các thao tác chứ không phải bởi tải trọng. Một mức nhật ký chi tiết, một danh sách khách hàng thay đổi thường xuyên, hoặc một lỗi lặp lại trong vòng lặp chặt có thể tạo ra những lần ghi đáng kể trong khi đường hầm chở rất ít.
Tệp trạng thái là một ảnh chụp được ghi lại theo khoảng thời gian, nên chi phí của nó phụ thuộc vào khoảng thời gian và số bản ghi chứa trong đó. Nó không phải bản sao đang chạy của lưu lượng từng khách hàng, và rút ngắn khoảng thời gian làm thay đổi lượng ghi mà không thay đổi lượng lưu lượng.
Quyền sở hữu quan trọng khi bạn tìm những lần ghi đó. Nếu dịch vụ chuyển thông điệp cho một daemon ghi nhật ký, thì nhật ký hoặc tệp log do daemon đó ghi, và các byte xuất hiện trong hạch toán của daemon chứ không phải trong bộ đếm riêng của tiến trình VPN. Chỉ nhìn vào tiến trình VPN không giải thích được hoạt động đĩa cũng như sự vắng mặt của nó.
Những nguồn đóng góp khác dễ bị bỏ qua: đọc chứng chỉ và cấu hình khi khởi động, các hook tự ghi bản ghi, plugin hạch toán, kết xuất sự cố và khối lượng công việc không liên quan trên cùng máy chủ. Không nên ước tính bất kỳ nguồn nào bằng cách đánh đồng lưu lượng đường hầm với số byte đã ghi.
Đọc từng bộ đếm cho đúng
Ba chi tiết quyết định một phép so sánh có ý nghĩa hay không. Danh tính của tiến trình quan trọng, vì một dịch vụ khởi động lại sẽ đặt lại bộ đếm của nó. Khoảng thời gian quan trọng, vì một con số lũy kế và một biểu đồ theo giây là những phép đo khác nhau. Và đơn vị cũng quan trọng, vì kích thước hiện tại của một tệp log cũng không phải tốc độ.
grep -E 'rchar|wchar|read_bytes|write_bytes' /proc/$(pgrep -n openvpn)/io
du -sh /var/log/openvpn 2>/dev/null
journalctl --disk-usage
Nếu bạn nghi ngờ có những lần ghi tải trọng thật, hãy tìm một thành phần mà nhiệm vụ là lưu tải trọng: công cụ bắt gói tin, proxy lưu nội dung vào bộ nhớ đệm, plugin lưu trữ. Chúng tạo ra lưu lượng tới kho lưu trữ tăng theo những gì được yêu cầu ghi lại, và chúng thuộc về một quyết định chính sách riêng về lưu giữ và truy cập.
Lập kế hoạch dung lượng với con số đúng
Đo đường đi của gói tin bằng các con số mạng: thông lượng, xử lý mật mã và chuyển động bộ nhớ. Đo lưu trữ bằng những lựa chọn khả năng quan sát mà bạn thực sự đã làm: mức log, thời gian lưu giữ, khoảng trạng thái và mọi hoạt động bắt gói được bật có chủ đích.
Giữ hai ngân sách đó tách biệt cũng giúp đọc sự cố dễ hơn. Một đĩa đầy với lưu lượng đường hầm vừa phải chỉ vào log, bản bắt gói hoặc một thứ không liên quan, và bộ đếm giao diện sẽ không bao giờ giải thích được điều đó. Một liên kết bão hòa với log yên tĩnh chỉ theo hướng ngược lại.
Phép so sánh đáng làm là giữa những phép đo cùng loại. Byte giao diện so với byte giao diện theo thời gian cho bạn biết về đường đi. Các lần ghi lưu trữ so với dung lượng lưu trữ cho bạn biết về thời gian lưu giữ. Phép so sánh chéo, lưu lượng so với đĩa, chỉ có vẻ có ý nghĩa và không bao giờ đúng như vậy.