Tôi đưa ra một giải pháp mà bây giờ tôi đã chọn cho mình. Đó không phải là câu trả lời mà tôi đang tìm kiếm, mà là câu trả lời dường như trôi theo dòng chảy.
Tôi vẫn tò mò liệu điều này có thể được xử lý bằng một số lệnh Unix phổ biến hay không.
Dù sao, đây là những gì tôi đã làm:
Cách phổ biến dường như sử dụng một công cụ gọi là lưu loát, cho phép bạn thu thập nhật ký từ nhiều nguồn khác nhau và
vận chuyển chúng đến bất cứ nơi nào bạn thấy phù hợp - loại ETL cho nhật ký.
Tôi đã chọn gửi nhật ký đến máy chủ nhật ký hệ thống vì tôi đã có một máy chủ đang chạy, nhưng bạn có thể chọn bất kỳ plugin đầu ra nào từ đây: plugin đầu ra.
Ngoài ra còn có một bộ lớn các plugin bổ sung: Tất cả các plugin
Bước 1
Nhận thiết lập Fluentd đã cài đặt plugin remote_syslog. Điều đó không đi kèm với hình ảnh docker chính thức, nhưng bạn có thể tự thiết lập nó.
TỪ thông thạo/lưu loát:v1.14.0-1.0
NGƯỜI DÙNG gốc
# https://github.com/fluent-plugins-nursery/fluent-plugin-remote_syslog
CHẠY thông thạo-đá quý cài đặt thông thạo-plugin-remote_syslog
NGƯỜI DÙNG thành thạo
Xây dựng hình ảnh và đẩy vào sổ đăng ký của bạn.
Bước 2
Tiếp theo, hãy thiết lập tệp kê khai triển khai Fluentd với xác nhận quyền sở hữu khối lượng chỉ đọc để truy cập nhật ký nhóm. Các tệp thực tế nằm trong /var/log/pods/* và /var/log/containers thực sự chứa các liên kết tượng trưng. Chúng tôi cần các tập tin thực tế.
Những nhật ký đó được sở hữu bởi root trên máy chủ và người dùng thông thạo sẽ không có quyền truy cập để đọc chúng.
Chúng ta cần thiết lập một số bối cảnh bảo mật. Để mọi thứ hoạt động, tôi đã sử dụng nhóm gốc cho fsGroup.
Vui lòng tìm hiểu sâu hơn và tìm/nhận xét giải pháp tối ưu nhất cho vấn đề bảo mật này.
apiVersion: ứng dụng/v1
loại: Triển khai
...
thông số kỹ thuật:
...
thông số kỹ thuật:
bối cảnh bảo mật:
nhóm fs: 0
khối lượng:
- tên: varlogpods-pv
liên tụcVolumeClaim:
tên yêu cầu: pvc-var-log-pods
...
hộp đựng:
- tên: lưu loát
hình ảnh: your/fluentd-image
Xem bảng kê khai đầy đủ của tôi trong ý chính này: triển khai trôi chảy
Bước 3
Trước khi triển khai, bạn cũng cần thiết lập lưu loát.conf
và mô tả một số quy tắc ở đó.
Của tôi được đặt để khớp với một dòng nhật ký như thế này:
2022-04-26T20:05:00.847016854+03:00 stderr F time="2022-04-26 17:05:00" level=info msg="đang xử lý 3 bản ghi ..."
Để biết thêm về plugin đuôi: đuôi
<source>
@type tail
@id in_tail_container_logs
path "/var/log/pods/default_cron-*/*/*.log"
pos_file "/tmp/cron_.log.pos"
read_from_head true
tag cron
<parse>
@type regexp
expression /^(?<logtime>[^ ]*) .* level=(?<level>[^ ]*) msg="(?<message>[^"]*)"$/
time_key logtime
time_format %FT%T.%N%:z
</parse>
</source>
<match cron>
@type remote_syslog
host 172.16.3.10
port 514
protocol udp
severity info
program "fluentd"
hostname "k3sserver"
<buffer>
</buffer>
<format>
@type single_value
message_key message
</format>
</match>
Một thuộc tính cấu hình quan trọng ở đây là read_from_head đúng
đọc các tệp nhật ký từ đầu.
Điều này là cần thiết cho kịch bản này vì nhật ký nhóm đang quay, chúng tôi muốn Fluentd đọc toàn bộ nhật ký nhóm chứ không chỉ vài dòng cập nhật cuối cùng. Đối với công việc định kỳ ngắn, tệp nhật ký chỉ xuất hiện và đuôi sẽ không báo cáo bất kỳ dòng ban đầu nào trong đó.
Bước 4
Fiddle với cấu hình và thử, thử lại.
Đừng quên khởi động lại quá trình triển khai của bạn sau khi bạn đã cập nhật cấu hình trong configMap.
Vài bit từ đường mòn tìm kiếm: