Score:0

Aggregate multiple log files in a directory

ธง 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)

us flag
Rob
การรันเซิร์ฟเวอร์ syslog นั้นเป็นเรื่องเล็กน้อยมาก โดยปกติแล้ว cron จะบันทึกไปยัง syslog และ syslog นั้นสามารถกำหนดค่าใหม่ได้อย่างง่ายดายเพื่อเปลี่ยนเส้นทาง/คัดลอกข้อความเหล่านั้นไปยังเซิร์ฟเวอร์ syslog กลางนั้น ที่หลีกเลี่ยงการรวมไฟล์บันทึกอย่างสมบูรณ์
Klamber avatar
ru flag
@Rob คุณจะรู้วิธีเชื่อมต่อบันทึกงาน k3s cron ที่ส่งไปยัง syslog หรือไม่
Score:1
ธง ru

ฉันเสนอทางออกหนึ่งซึ่งตอนนี้ฉันได้เลือกเองแล้ว ไม่ใช่คำตอบที่ฉันกำลังมองหา แต่เป็นคำตอบที่ดูเหมือนจะแล่นไปตามกระแส ฉันยังสงสัยว่าสิ่งนี้สามารถจัดการได้ด้วยคำสั่ง Unix ทั่วไปหรือไม่

อย่างไรก็ตาม นี่คือสิ่งที่ฉันทำ:

วิธีทั่วไปดูเหมือนจะใช้เครื่องมือที่เรียกว่า คล่องแคล่วซึ่งช่วยให้คุณสามารถรวบรวมบันทึกจากแหล่งต่าง ๆ และ ขนส่งพวกเขาไปยังทุกที่ที่คุณเห็นว่าเหมาะสม - ประเภทของ ETL สำหรับบันทึก

ฉันเลือกที่จะส่งบันทึกไปยังเซิร์ฟเวอร์ syslog เนื่องจากฉันมีอันหนึ่งทำงานอยู่ แต่คุณสามารถเลือกปลั๊กอินเอาต์พุตใดก็ได้จากที่นี่: ปลั๊กอินเอาต์พุต. นอกจากนี้ยังมีปลั๊กอินเพิ่มเติมชุดใหญ่: ปลั๊กอินทั้งหมด

ขั้นตอนที่ 1

รับการตั้งค่า Fluentd ที่ติดตั้งปลั๊กอิน remote_syslog ที่ไม่ได้มาพร้อมกับอิมเมจนักเทียบท่าอย่างเป็นทางการ แต่คุณสามารถตั้งค่าได้ด้วยตัวเอง

จากคล่องแคล่ว / คล่องแคล่ว: v1.14.0-1.0
รากผู้ใช้

# https://github.com/fluent-plugins-nursery/ Fluent-plugin-remote_syslog
RUN คล่องแคล่วอัญมณีติดตั้ง คล่องแคล่ว-ปลั๊กอิน-remote_syslog

USER ได้อย่างคล่องแคล่ว

สร้างอิมเมจและพุชไปที่รีจิสตรีของคุณ

ขั้นตอนที่ 2

ตั้งค่าถัดไป รายการการปรับใช้ Fluentd พร้อมการอ้างสิทธิ์ไดรฟ์ข้อมูลแบบอ่านอย่างเดียวเพื่อเข้าถึงบันทึกของพ็อด ไฟล์จริงอยู่ใน /var/log/pods/* และ /var/log/containers มี symlinks เราต้องการไฟล์จริง บันทึกเหล่านั้นเป็นของรูทบนเครื่องโฮสต์และผู้ใช้ที่คล่องแคล่วธรรมดาจะไม่สามารถเข้าถึงเพื่ออ่านได้ เราจำเป็นต้องตั้งค่าบริบทความปลอดภัยบางอย่าง เพื่อให้สิ่งต่าง ๆ ใช้งานได้ฉันใช้กลุ่มรูทสำหรับ fsGroup อย่าลังเลที่จะเจาะลึกลงไปและค้นหา/แสดงความคิดเห็นเกี่ยวกับโซลูชันที่เหมาะสมที่สุดสำหรับการรักษาความปลอดภัยนี้

apiVersion: แอป/v1
ประเภท: การปรับใช้
...
ข้อมูลจำเพาะ:
  ...
    ข้อมูลจำเพาะ:
      บริบทความปลอดภัย:
        fsGroup: 0
      ปริมาณ:
        - ชื่อ: varlogpods-pv
          ถาวรVolumeClaim:
            ชื่อการอ้างสิทธิ์: pvc-var-log-pods
            ...
      ตู้คอนเทนเนอร์:
        - ชื่อ: คล่อง
          ภาพ: ภาพของคุณ / คล่องแคล่ว

ดูรายการทั้งหมดของฉันในส่วนสำคัญนี้: การปรับใช้อย่างคล่องแคล่ว

ขั้นตอนที่ 3

ก่อนที่คุณจะปรับใช้ คุณต้องตั้งค่า คล่อง.conf และอธิบายกฎบางอย่างที่นั่น

ของฉันถูกตั้งค่าให้ตรงกับบรรทัดบันทึกดังนี้:

2022-04-26T20:05:00.847016854+03:00 stderr F time="2022-04-26 17:05:00" level=info msg="กำลังประมวลผล 3 ระเบียน ..."

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับปลั๊กอินหาง: หาง

    <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>

แอตทริบิวต์การกำหนดค่าที่สำคัญอย่างหนึ่งที่นี่คือ read_from_head จริง ซึ่งอ่านไฟล์บันทึกจากด้านบน จำเป็นสำหรับสถานการณ์นี้เนื่องจากบันทึกของพ็อดกำลังหมุน เราต้องการให้ Fluentd อ่านบันทึกของพ็อดทั้งหมด ไม่ใช่แค่การอัปเดตไม่กี่บรรทัดในตอนท้าย สำหรับงาน cron แบบสั้น ไฟล์บันทึกจะปรากฏขึ้นและส่วนท้ายจะไม่รายงานบรรทัดเริ่มต้นใดๆ ในนั้น

ขั้นตอนที่ 4

เล่นกับ config แล้วลอง ลองอีกครั้ง อย่าลืมรีสตาร์ทการปรับใช้หลังจากที่คุณอัปเดตการกำหนดค่าใน configMap

ไม่กี่บิตจากเส้นทางการค้นหา:

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา