Máy chủ OpenVPN nên ghi nhật ký ở đâu, và vì sao
log, log-append và syslog khác nhau, và trình quản lý dịch vụ giữ bản sao riêng. Chọn một luồng có thẩm quyền, giữ vòng đời dễ đọc và đặt thời hạn lưu.
Thiết kế nhật ký trả lời ba câu hỏi: tiến trình nào tạo ra bản ghi, bản ghi đó rơi vào đâu và nó tồn tại bao lâu. OpenVPN có thể ghi vào tệp, chuyển thông điệp cho bộ ghi hệ thống hoặc để chúng cho những gì trình quản lý dịch vụ bắt được, và đó không phải là ba bản sao của một luồng. Mỗi lựa chọn thay đổi ai sở hữu việc luân chuyển, người dùng nào có thể đọc kết quả và điều gì xảy ra khi khởi động. Hãy chốt câu trả lời trước một sự cố, vì sau đó bạn chỉ thừa kế những gì đã được cấu hình.
Daemon thực sự làm gì với chỉ thị
Các chỉ thị không phải trừu tượng; mỗi chỉ thị quyết định tiến trình ghi thông điệp ở đâu. log /path mở tệp đó, log-append /path mở tệp để ghi thêm, và syslog chuyển thông điệp tới bộ ghi hệ thống cục bộ qua socket của nó. Không có chỉ thị nào, đầu ra đi vào đầu ra chuẩn và trình quản lý dịch vụ quyết định điều gì xảy ra tiếp theo. Hãy đọc unit hiệu lực và hồ sơ cùng nhau trước khi kết luận rằng daemon bỏ qua cấu hình của bạn.
Trường hợp cuối thường gặp khi cài từ gói, và nó giải thích vì sao hai quản trị viên bất đồng về chỗ ở của nhật ký. Một người đọc journal của unit, người kia đọc một tệp mà daemon chưa bao giờ ghi.
Hãy kiểm tra cấu hình đang chạy thay vì tệp trên đĩa. Một phần ghi đè unit kiểu drop-in hoặc tệp môi trường có thể đổi chỉ thị hiệu lực mà không chạm vào hồ sơ bạn đang đọc.
log cắt bớt, log-append thì không
log cắt bớt tệp hiện có khi chỉ thị có hiệu lực, nên khởi động lại sẽ xóa bằng chứng trước đó. log-append giữ lại những gì có và ghi thêm. Không lựa chọn nào luân chuyển gì, và không lựa chọn nào tự mở lại tệp sau đó, vì thế luân chuyển cần sự phối hợp.
Nếu luân chuyển đổi tên tệp trong khi daemon vẫn ghi vào bộ mô tả cũ, tệp mới sẽ rỗng và dung lượng đĩa tiếp tục tăng trong tệp đã đổi tên. Hãy gửi tín hiệu để tiến trình mở lại, hoặc luân chuyển theo chiến lược sao chép-rồi-cắt và chấp nhận khoảng thời gian sao chép.
Thư mục, quyền sở hữu và quyền truy cập là một phần của thiết kế. Daemon có thể chạy dưới người dùng không đặc quyền sau khi khởi động, và thư mục do root tạo lúc cài đặt có thể không ghi được khi đó. Hãy chuẩn bị nó qua đóng gói hoặc quy trình triển khai thay vì sửa quyền giữa sự cố.
Trình quản lý dịch vụ giữ bản sao thứ hai
systemd bắt đầu ra chuẩn và đầu ra lỗi theo mặc định, nên một unit không chuyển hướng rõ ràng đã có nhật ký. Thêm một chỉ thị tệp cho ra hai luồng với thời hạn lưu, người đọc và dấu thời gian khác nhau.
Điều đó không tự động sai, nhưng nó phải là một quyết định. Hãy giữ bản ghi khởi động trong journal, vì lỗi trước khi tệp đã cấu hình tồn tại không xuất hiện ở đâu khác. Sau đó biến tệp thành nguồn có thẩm quyền cho các sự kiện ở trạng thái ổn định và ghi điều đó vào runbook. Hai luồng có thẩm quyền nghĩa là hai câu trả lời cho mọi câu hỏi.
Hãy xác nhận lựa chọn bằng một bài kiểm tra cố ý thất bại. Khởi động daemon với chứng chỉ không đọc được và xem luồng nào ghi lại lỗi.
Độ chi tiết không giống với chi tiết dùng được
Mức verb cao hơn thêm nhiều dòng, và qua một điểm nào đó là những dòng không ai đọc. Mức 3 là trạng thái ổn định hợp lý cho hầu hết triển khai, còn mức 4 trở lên phù hợp với một cuộc điều tra có giới hạn và câu hỏi đã biết. Việc chặn lặp giảm nhiễu, nhưng không được che giấu tần suất một sự kiện tái diễn. Hãy đặt mức bạn duy trì được, và chỉ nâng nó cho một cuộc điều tra có tên và có kết thúc.
Hãy giữ danh tính phiên bản và dấu thời gian trong bản ghi. Một lần kết nối lại trông y hệt lần kết nối đầu khi tệp đã được ghi thêm nhiều tháng và thiếu tên phiên bản.
Hãy cẩn thận với những gì khác rơi vào tệp đó. Đầu ra được chuyển hướng có thể chứa văn bản từ các script được gọi, và một chương trình phụ in môi trường của nó sẽ đặt thông tin xác thực và đường dẫn khóa vào nhật ký đọc được. Hãy coi quyền truy cập nhật ký là một quyết định bảo mật ngay cả khi bản thân daemon không in gì nhạy cảm.
Luân chuyển, thời hạn lưu và các tín hiệu nạp lại
Hãy quyết định thời hạn lưu với người sở hữu đĩa, và đặt nó trước khi ổ đĩa quyết định thay bạn. Tín hiệu nạp lại không phải lệnh bảo trì nhật ký: gửi nhầm tín hiệu sẽ khởi động lại đường hầm và ngắt mọi người dùng. Hãy viết quy trình mở lại bên cạnh quy tắc luân chuyển để hai thứ không lệch nhau.
Kết quả phải là một dịch vụ mà người vận hành mô tả được: một luồng có thẩm quyền, mỗi sự kiện được đặt trong vòng đời, và một bản ghi có được mà không phải thu thập mọi tệp chứa bí mật trên máy chủ. Mô tả đó chính là bài kiểm tra chấp nhận của thiết kế, và kiểm tra nó trước sự cố tiếp theo là rẻ.