[ad_1]
Các thùng chứa Docker hoạt động lâu dài có thể nhanh chóng tích lũy một số lượng lớn các dòng nhật ký. Những điều này tiêu tốn dung lượng lưu trữ và giảm hiệu suất khi truy cập và lọc dữ liệu. Mặc dù Docker bao gồm các công cụ tích hợp để xem nhật ký, nhưng không có cơ chế tích hợp nào để làm sạch chúng.
Trong bài viết này, bạn sẽ học cách xóa nhật ký của các vùng chứa Docker đang chạy mà không cần khởi động lại hoặc thay thế chúng. Bạn cũng sẽ thấy một số kỹ thuật để xử lý hiệu quả hơn các bản ghi lớn trong khi vẫn giữ lại dữ liệu cũ.
Hiểu vấn đề
Docker thu thập nhật ký từ các luồng lỗi và đầu ra tiêu chuẩn của các quy trình nền trước của vùng chứa. Các docker logs
lệnh được sử dụng để truy xuất các bản ghi này nhưng nó không cho phép bạn xóa các dòng cũ.
Docker hỗ trợ nhiều trình điều khiển ghi nhật ký khác nhau nên không thể cung cấp cơ chế dọn dẹp tiêu chuẩn hóa. Bài viết này tập trung vào tiêu chuẩn json-file
trình điều khiển ghi nhật ký, nơi các dòng nhật ký được lưu trữ trong tệp JSON trên hệ thống tệp của máy chủ lưu trữ vùng chứa của bạn. Tham khảo tài liệu trình điều khiển lưu trữ của bạn nếu bạn cần xóa các nhật ký được truyền trực tuyến đến máy chủ lưu trữ từ xa.
Các tệp nhật ký được tạo bởi json-file
trình điều khiển được lưu trữ dưới /var/lib/docker/containers
danh mục. Mỗi vùng chứa có tệp nhật ký riêng được sử dụng trong suốt thời gian tồn tại của nó. Không có xoay vòng nhật ký được định cấu hình theo mặc định.
Chỉ xóa tệp nhật ký không phải là một giải pháp hiệu quả. Docker hy vọng tệp sẽ có sẵn liên tục và sẽ không tự động tạo lại nếu tệp bị xóa. Nó an toàn hơn để xa lạ nội dung của nhật ký hiện có để tránh ảnh hưởng đến bất kỳ ghi hiện tại nào.
Khám phá đường dẫn của tệp nhật ký
Trước tiên, hãy tìm đường dẫn đến tệp nhật ký của vùng chứa mục tiêu của bạn. Bạn có thể truy xuất đường dẫn tệp nhật ký cho vùng chứa được gọi là my-app
bằng cách chạy lệnh sau:
$ docker inspect --format="{{.LogPath}}" my-app /var/lib/containers/1380d936...-json.log
Xóa tệp nhật ký
Bạn có thể xóa nội dung của nhật ký mà không cần xóa nó bằng cách lặp lại một chuỗi trống vào nội dung của nó. Tệp sẽ được sở hữu bởi root
vì vậy bạn sẽ cần thực hiện thao tác này trong trình bao gốc. Lệnh sau sẽ làm trống tệp nhật ký cho bạn:
$ sudo sh -c 'echo "" > $(docker inspect --format="{{.LogPath}}" my-app)'
Nội suy Shell đang được sử dụng để truy xuất động đường dẫn tệp nhật ký cho my-app
thùng đựng hàng. Thay vào đó, bạn có thể thay thế theo cách thủ công trong đường dẫn được truy xuất trước đó.
Khi bạn chạy docker logs my-app
bây giờ bạn sẽ thấy đầu ra trống trừ khi vùng chứa tiếp tục viết các dòng trong thời gian tạm thời.
Giới hạn đầu ra nhật ký
Các docker logs
lệnh chấp nhận một số đối số có thể được sử dụng để giới hạn đầu ra từ các bản ghi nhiễu. Những điều này giúp giảm thiểu nhu cầu làm sạch nhật ký trong khi ngăn thiết bị đầu cuối của bạn không bị ngập các dòng cũ mỗi khi bạn truy cập tệp.
--tail
– Cờ này hướng dẫn Docker chỉ phát ra một số dòng nhật ký cũ cụ thể, bắt đầu với dòng mới nhất.--until
và--since
– Các cờ này hạn chế đầu ra cho các dòng nhật ký được phát ra trong một khoảng thời gian cụ thể. Chúng hữu ích khi bạn biết khung thời gian gần đúng mà một sự kiện đã xảy ra.
Đây là vài ví dụ:
Hiển thị 100 dòng nhật ký gần đây nhất
docker logs my-app --tail 100
Hiển thị các dòng nhật ký được viết trong một giờ qua
docker logs my-app --since 1h
Hiển thị tối đa 100 dòng nhật ký được viết trong một giờ qua
docker logs my-app --tail 100 --since 1h
Thiết lập xoay vòng nhật ký
Thường xuyên phải dọn dẹp các tệp nhật ký theo cách này thường báo hiệu rằng nhật ký ứng dụng của bạn quá dài hoặc đơn giản là có quá nhiều hoạt động để lưu trữ trong một tệp.
Nhiều trình điều khiển ghi nhật ký Docker, bao gồm json-file
có hỗ trợ xoay vòng nhật ký tùy chọn mà bạn có thể bật trên toàn cầu cho daemon Docker hoặc trên cơ sở mỗi vùng chứa.
Cài đặt Daemon được định cấu hình trong /etc/docker/daemon.json
. Đây là một ví dụ xoay vòng nhật ký vùng chứa khi chúng đạt đến 8MB. Tối đa năm tệp sẽ được giữ lại bất kỳ lúc nào, với các tệp cũ sẽ tự động bị xóa khi các lần quay mới xảy ra.
{ "log-opts": { "max-size": "8m", "max-file": "5" } }
Khởi động lại daemon Docker để áp dụng thay đổi:
$ sudo service docker restart
Xoay cấp Daemon áp dụng cho tất cả các vùng chứa mới được tạo. Các thay đổi sẽ không ảnh hưởng đến bất kỳ vùng chứa nào đã tồn tại trên máy chủ của bạn.
Xoay vòng có thể được định cấu hình cho từng vùng chứa bằng cách sử dụng --log-opts
cờ. Những thứ này sẽ ghi đè cài đặt daemon Docker mặc định của bạn.
docker run --name app --log-driver json-file --log-opts max-size=8M --log-opts max-file=5 app-image:latest
Bản tóm tắt
Các bản ghi vùng chứa Docker có thể bị nhiễu khi các ứng dụng bận rộn ghi đầu ra rộng rãi. Quyền truy cập vào nhật ký dài dòng rất hữu ích cho việc gỡ lỗi nhưng chúng tiêu tốn không gian lưu trữ, khó sàng lọc dữ liệu hơn và có thể làm giảm hiệu suất.
Bạn có thể dọn dẹp các tệp nhật ký theo yêu cầu bằng cách sử dụng các lệnh shell để làm trống nội dung của chúng. Tuy nhiên, thực hành tốt hơn là thiết lập xoay vòng nhật ký để điều này xảy ra tự động khi tệp đạt đến kích thước cụ thể. Các docker logs
Lệnh cũng hỗ trợ các cờ có thể giúp chế ngự các bản ghi khó sử dụng tại điểm truy cập.
[ad_2]