จะบังคับให้ Logstash แยกวิเคราะห์ไฟล์ได้อย่างไร?


91

ฉันติดตั้ง Logstash เพื่อแยกวิเคราะห์ไฟล์ apache ฉันใช้เวลาพอสมควรในการตั้งค่าให้ถูกต้องและฉันก็ลองใช้บันทึกจริงเสมอ ฉันสังเกตเห็น (ตามที่เอกสารบอก) ว่า logstash "จำ" ได้ว่าอยู่ที่ไหนในไฟล์ ตอนนี้การตั้งค่าของฉันเรียบร้อยและฉันต้องการให้ Logstash "ลืม" ดูเหมือนจะยากกว่าที่ฉันคิด ฉันได้ทำสิ่งต่อไปนี้แล้ว:

  • ใช้แล้ว: start_position => "beginning"

  • ลบโฟลเดอร์ "data" ที่สมบูรณ์จาก elastissearch (และหยุดก่อน)

  • ดูว่าไฟล์ใดที่เปิดโดย logstash lsof -p PIDและลบทุกอย่างที่มีแนวโน้ม (ในกรณีของฉัน/tmp/jffi*.tmp)

Logstash ยังคงไม่ลืมและแยกวิเคราะห์เฉพาะไฟล์ "ใหม่" ในโฟลเดอร์ที่มีบันทึก

ความคิดใด ๆ ?


logstash เวอร์ชันล่าสุดที่ฉันพบใน:/opt/logstash/data/plugins/inputs/file
Tim Smith

คำตอบ:


135

โดยค่าเริ่มต้น logstash เขียนตำแหน่งที่ผ่านมาเพื่อ logfile $HOME/.sincedbซึ่งมักจะอาศัยอยู่ใน Logstash สามารถถูกหลอกให้เชื่อว่าไม่เคยแยกวิเคราะห์ไฟล์บันทึกโดยระบุ/dev/nullเป็นไฟล์sincedb_pathไฟล์.

นี่เป็นส่วนหนึ่งของเอกสารการป้อนข้อมูลไฟล์

ตำแหน่งที่จะเขียนฐานข้อมูลตั้งแต่ (ติดตามตำแหน่งปัจจุบันของไฟล์บันทึกที่ตรวจสอบ) ค่าเริ่มต้นเป็นค่าของตัวแปรสภาพแวดล้อม "$ SINCEDB_PATH" หรือ "$ HOME / .sincedb"

ตัวอย่างการกำหนดค่า

input {
    file {
        path => "/tmp/logfile_to_analyse"
        start_position => "beginning"
        sincedb_path => "/dev/null"
    }
}

29
บน windows คุณสามารถใช้sincedb_path => "NUL"เพื่อให้ได้ผลเช่นเดียวกัน รายละเอียดที่นี่
Chris Magnuson

11
หากไฟล์ค่อนข้างเก่า (มากกว่า 24 ชั่วโมง) มีประโยชน์มากคือการเพิ่มตัวเลือกingnore_older => 0เพื่อให้ logstash ใช้งานได้ไม่ว่าจะเป็นวันใดก็ตาม โดยค่าเริ่มต้นหากไฟล์เก่ากว่า 24 ชั่วโมงจะถูกละเว้น
mtfk

1
@mtfk: ว้าวสุดยอดการค้นหา! ขอบคุณที่ชี้ให้เห็นignore_older => 0ผลงานใน logstash! ฉันเคยติดขัดจากปัญหาเดียวกันกับผู้ถาม ดูเหมือนจะเป็นการค้นพบที่ไม่ชัดเจน! (googling "Ignore_older" และ "logstash" แสดงเฉพาะหน้าเว็บใน filebeat ฉันไม่พบร่องรอยของวิธีจัดการกับสิ่งนี้ใน logstash)
Mike Lutz

วิธีเพิ่มสิ่งนี้ขณะใช้ filebeat
Sunilkumar Ramamurthy

@SunilkumarRamamurthy ผมเชื่อว่าถ้าคุณออกจากตัวเลือกignore_olderในการกำหนดค่า filebeat ของคุณ filbeat ถูกบังคับให้อ่านไฟล์ทั้งหมดอีกครั้งelastic.co/guide/en/beats/filebeat/current/...
flazzarini

19

ไฟล์ปลั๊กอินเก็บประวัติของ "tailing" ในไฟล์ sincedb ค่าเริ่มต้น: ภายใต้ $ HOME / .sincedb * โปรดดูhttp://logstash.net/docs/1.3.3/inputs/file#sincedb_path

ไฟล์ since db มีลักษณะเป็นเส้น:

[inode] [major device number] [minor device number] [byte offset]

ดังนั้นหากคุณต้องการแยกวิเคราะห์ไฟล์ที่สมบูรณ์อีกครั้งคุณต้อง:

  • ลบไฟล์ sindedb
  • หรือลบเฉพาะบรรทัดที่เกี่ยวข้องในไฟล์ sincedb ตรวจสอบหมายเลข inode ก่อนไฟล์ของคุณ ( ls -i yourFile | awk '{print $1}')
  • และรีสตาร์ท Logstash

ด้วยคีย์start_position => "beginning"Logstash จะวิเคราะห์ไฟล์ทั้งหมด

ตัวอย่างไฟล์ sincedb:


1
เกี่ยวกับstart_position => "beginning"เอกสารระบุว่า:> ตัวเลือกนี้แก้ไขเฉพาะสถานการณ์ "ผู้ติดต่อครั้งแรก" ที่ไฟล์ใหม่และไม่เคยเห็นมาก่อน หากเคยเห็นไฟล์มาก่อนตัวเลือกนี้จะไม่มีผล
Brad

10

Logstash จะเก็บบันทึก$HOME/.sincedb_*ไว้ คุณสามารถลบ.sincedblogstash ทั้งหมดและรีสตาร์ท Logstash จะแยกวิเคราะห์ไฟล์ใหม่


9

เมื่อรวมคำตอบทั้งหมดเดาว่านี่เป็นวิธีที่ดีที่สุดในการแยกวิเคราะห์ไฟล์ ฉันทำแบบเดียวกันกับการทดสอบของฉัน

input {
  file {
    path => "/tmp/access_log"
    start_position => beginning
    sincedb_path => "/dev/null"
    ignore_older => 0
  }
}

สำหรับการทดสอบอย่างรวดเร็วignore_olderคุณยังสามารถtouch /tmp/access_logเปลี่ยนการประทับเวลาของไฟล์ได้


โปรดทราบว่าการเพิ่ม config ignore_older => 0จะทำตรงกันข้าม
panchicore

5

หากคุณใช้ logstash-forwarder ให้ตรวจสอบ.logstash-forwarderไฟล์ที่บ้านของคุณแทน:

{
  "/var/log/messages": {
    "source": "/var/log/messages",
    "offset": 43715,
    "inode": 12967,
    "device": 51776
  }
}

3
/var/lib/logstash-forwarder/หากติดตั้งเป็นแพคเกจตรวจสอบ
Wesley Baugh

3

หลังจากลบ$HOME/.sincedb_*แล้วก็ยังไม่ได้นำเข้าข้อมูลให้ฉัน

หลังจากลองทำหลายอย่างฉันลบทั้งหมดยกเว้น.confไฟล์หลักจาก/etc/logstash/conf.dและรีสตาร์ท Logstash และทุกอย่างก็ใช้ได้ ฉันสามารถสันนิษฐานได้ว่ามีบางอย่างอยู่ใน.confไฟล์ใดไฟล์หนึ่งที่ logstash ค้างอยู่เงียบ ๆ


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

1

การแยกวิเคราะห์แต่ละครั้งมีค่าใช้จ่ายสูงมากหากไฟล์มีข้อมูลขนาดใหญ่อยู่ในนั้น ดังนั้นคุณต้องระมัดระวังก่อนดำเนินการนี้ หากเราต้องการบังคับให้แยกวิเคราะห์อีกครั้งให้ตั้งค่าพารามิเตอร์ภายในบล็อกอินพุต

sincedb_path => "/dev/null" 

ตัวเลือกนี้จะไม่จัดเก็บไฟล์. sincedb และ logstash จะแยกวิเคราะห์ใหม่ทุกครั้ง แต่ถ้าคุณต้องการแยกวิเคราะห์เป็นครั้งคราวไม่ใช่ทุกครั้งสิ่งที่คุณสามารถทำได้คือการลบพา ธ .inceDb ด้วยตนเองซึ่งสร้างขึ้นจากการแยกวิเคราะห์ไฟล์ โดยทั่วไปจะมีอยู่ในโฮมไดเร็กทอรีเป็นไฟล์ที่ซ่อนอยู่ถ้าคุณไม่ใช่ผู้ใช้รูทในไดเรกทอรีราก คุณยังสามารถตั้งค่า sincedb_path เป็นตำแหน่งอื่นเพื่อติดตามไฟล์นี้ได้อย่างง่ายดาย

sincedb_path => "/home/shubham/sinceDB/productsSince.db"

1

หากคุณต้องการหลีกเลี่ยงการยุ่งกับตัวเลือก logstash ฉันพบว่าการเปลี่ยนชื่อหรือลบไฟล์บันทึกที่มีอยู่และสร้างไฟล์ใหม่จากเนื้อหาไฟล์เก่าจะหลอกให้ logstash ทำดัชนีใหม่


0

ฉันพบมันใน dir บ้านของฉัน แต่หลังจากลบแล้ว logstash ปฏิเสธที่จะเลือกไฟล์บันทึกที่มีอยู่อีกครั้ง วิธีที่ฉันได้ผลคือการเพิ่ม

sincedb_path => "/opt/elk/sincedb/"  

ไปยังปลั๊กอินไฟล์ของฉัน ฉันคิดว่าจะรีเซ็ตทุกครั้งเพียงแค่เปลี่ยนเส้นทางของ sincedb_path


0

หากคุณใช้ tar.gz ติดตั้ง filebeat คุณสามารถลบไฟล์นี้$FilebeatPath/data/registry/filebeat/data.jsonและเรียกใช้ filebeat ใหม่ได้



-1

ไดเรกทอรีใหม่ logstash เวอร์ชัน 5 อยู่ใน

<path.data>/plugins/inputs/file

นิยาม path.data อยู่ใน logstash.yml

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.