Log OpenVPN thuộc về ai: daemon, rsyslog hay logrotate?
Một người ghi, một bộ xoay, một chính sách lưu trữ. Chọn đường đi trước, đặt tên cho daemon để có bộ lọc hẹp, và chứng minh việc mở lại bằng một tệp đã xoay duy nhất.
Việc xoay log hỏng theo một cách có thể đoán trước: ba thành phần mỗi bên đều tin mình sở hữu tệp, và kết quả là một log đã xoay vẫn tiếp tục lớn lên trong khi tệp mới vẫn rỗng. Daemon giữ một bộ mô tả, logrotate đổi tên đường dẫn, và rsyslog ghi ở một nơi hoàn toàn khác. Hãy chọn một người ghi và một bộ xoay trước khi thêm một quy tắc nữa vào đống. Danh sách kiểm tra bên dưới đi theo thứ tự đó vì mọi bước sau đều phụ thuộc vào nó.
Quyết định ai là người ghi tệp
Hai thiết kế là hợp lệ. Ở thiết kế thứ nhất, tiến trình VPN tự ghi tệp qua tùy chọn log hoặc log-append của chính nó. Ở thiết kế thứ hai, nó gửi bản ghi tới bộ ghi log của hệ thống và rsyslog hoặc journald quyết định nơi chúng đáp xuống.
Chúng là những lựa chọn thay thế, không phải các tầng. Một máy chủ bật cả hai sẽ kết thúc với hai tệp không khớp nhau, và tệp bạn đang đọc thường là tệp cũ. Hãy chọn đường đi một cách có chủ ý, rồi loại bỏ người ghi còn lại.
Đọc cấu hình hiệu lực của dịch vụ trước khi thay đổi bất cứ điều gì, kể cả các tệp drop-in có thể ghi đè tệp unit. Một chỉ thị có trong hồ sơ bạn đã sửa không chứng minh rằng đó là chỉ thị mà tiến trình đang chạy đã nạp. So sánh unit với các đối số của tiến trình, rồi với những tệp mà nó thực sự đã mở.
Đặt tên cho daemon để bộ lọc có thể hẹp
Trên đường syslog, hãy cấp cho daemon một danh tính riêng và lọc theo danh tính đó. Một quy tắc khớp với tên chương trình của phiên bản VPN này giữ các bản ghi của nó ra khỏi một tệp dùng chung mà chính sách lưu trữ thuộc về thứ khác.
Các quy tắc hẹp cũng làm cho câu hỏi tiếp theo có thể trả lời được: dịch vụ nào đã tạo ra dòng này? Một bộ lọc khớp với mọi thứ chứa từ VPN sẽ sẵn lòng thu thập lưu lượng của đường hầm thứ hai và làm mờ cả hai. Khớp với định danh chính xác mà unit truyền cho bộ ghi log.
Đóng quy tắc sau hành động để các bản ghi không rơi tiếp vào đích mặc định. Các dòng trùng lặp trong hai tệp trông giống một lỗi ghi log nhưng thực ra là một điểm dừng bị thiếu. Chính sự thiếu sót duy nhất đó cũng nhân đôi chi phí đĩa của chính sách lưu trữ.
Xoay mà không mất bộ mô tả
Khi daemon ghi tệp, logrotate đổi tên đường dẫn nhưng tiến trình vẫn giữ bộ mô tả đang mở của nó. Các bản ghi mới tiếp tục đi vào tệp đã đổi tên cho đến khi có gì đó buộc tiến trình mở lại đường dẫn gốc; vì vậy một lần xoay có thể trông như đang hoạt động trong khi tệp mới vẫn rỗng.
Giải pháp là một hành động postrotate kích hoạt hành vi nạp lại hoặc khởi động lại đã được ghi trong tài liệu của dịch vụ. Gửi tín hiệu tới bộ ghi log là một hành động hoàn toàn khác và không làm gì cho một daemon tự giữ tệp của mình.
Nơi không thể mở lại, copytruncate là phương án dự phòng: sao chép tệp, rồi cắt ngắn tại chỗ. Nó giữ bộ mô tả hợp lệ với cái giá là mất mọi thứ được ghi giữa lúc sao chép và lúc cắt, nên đây là một sự đánh đổi chứ không phải giải pháp. Dưới tải, khoảng trống đó có thể nuốt đúng cái sự cố mà bạn đang cố bắt.
Chọn một trong hai cho mỗi tệp và ghi lại lựa chọn, vì trộn chúng trên cùng một đường dẫn tạo ra những khoảng trống rất khó quy trách nhiệm về sau. Một người đọc tìm thấy cả hai mẫu trong một thư mục không thể nói mẫu nào là chủ đạo.
Đặt thời gian lưu trữ từ cửa sổ sự cố
Thời gian lưu trữ, nén và kích thước tối đa nên xuất phát từ việc bạn thực sự điều tra ngược bao xa. Một cửa sổ bảy ngày có nén và giới hạn kích thước là điểm khởi đầu hợp lý cho nhiều lần triển khai; một con số sao chép từ hướng dẫn thì không.
Giữ chính sách ở một nơi. Nếu logrotate xoay tệp và rsyslog cũng xoay nó, lần xoay thứ hai thắng và sơ đồ đặt tên của lần đầu tồn tại như một mớ lộn xộn. Chọn chủ sở hữu, tắt lần xoay còn lại và ghi lại quyết định đó bên cạnh chính sách.
Tài liệu của rsyslog bao quát mô hình định tuyến và hành động của nó, trong khi tài liệu của dịch vụ OpenVPN vẫn là căn cứ cho các tùy chọn ghi log của chính daemon. Không bên nào quyết định chính sách lưu trữ thay bạn.
Thử một lần xoay và một sự kiện mới
Buộc thực hiện một lần xoay duy nhất rồi tạo một sự kiện mới, chẳng hạn một lần xác thực thất bại. Xác nhận rằng bản ghi mới xuất hiện trong tệp mới và tệp cũ đã ngừng lớn.
Cũng hãy kiểm tra quyền trên tệp mới, vì một lần xoay tạo lại nó với chủ sở hữu khác sẽ phá vỡ người ghi ở lần ghi tiếp theo và tạo ra một khoảng trống trông như sự cố sụp. So sánh chủ sở hữu và chế độ với tài khoản dịch vụ trước khi rời đi. Sau đó xác nhận kho lưu trữ nén đọc được, vì một kho lưu trữ không ai mở được thì không phải là lưu trữ. Đọc nhanh bản ghi mới nhất trong tệp cũ chứng minh cả việc nén và quyền.
Kết thúc bằng việc ghi lại chủ sở hữu của từng bước: thành phần nào ghi, thành phần nào xoay và chính sách lưu trữ sống ở đâu. Chính bản ghi đó biến sự cố ghi log tiếp theo thành một lần kiểm tra năm phút thay vì cả một buổi chiều đoán xem tầng nào đã làm rơi dòng.