Điểm:0

Aggregate multiple log files in a directory

lá cờ ru

I have k3s single node cluster running on a machine. I do not have any logging infrastructure set up yet and I'd leave this as a future learning experience for now.

On that k3s I run some cron jobs which create logs for each of the jobs into a separate file. I can observe them in /var/log/containers/cron-job-* on the host machine. These logs disappear after a certain amount of time(successfulJobsHistoryLimit: 3). New job instances create new log files.

I'm unable to find a simple tool that could watch that logs directory, preferably with a file name pattern, and stream/join those small job logs into a single log file, including new files that are being created. I don't mind if file name is lost, I just want the log lines to end up in one file serving as an archive of all the job runs.

What I have considered?

I could just add a script to cat those files and append into a target file with an interval, but I'd have to keep track which files have already been inserted in case of the jobs get out of sync or the cron interval changes. Also I might like to extend this functionality for pods that are "long-running" and in this case I'd have to start tracking updated lines in logs.

All examples I have found deal with real-time tailing on screen, which Is not what I need. I kind of need multi-tailing into a target log file.

Any ideas? (I'd also accept some kind of simple Kubernetes logging hook example)

lá cờ us
Rob
Việc chạy một máy chủ nhật ký hệ thống là vô cùng tầm thường. Thông thường, cron đã đăng nhập vào nhật ký hệ thống và nhật ký hệ thống đó có thể dễ dàng được cấu hình lại để chuyển hướng/sao chép các thông báo đó đến máy chủ nhật ký hệ thống trung tâm đó. Điều đó hoàn toàn tránh được việc hợp nhất các tệp nhật ký
Klamber avatar
lá cờ ru
@Rob Bạn có tình cờ biết cách kết nối nhật ký công việc định kỳ k3s gửi tới syslog không?
Điểm:1
lá cờ ru

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:

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.