Logstash - สถาปัตยกรรมภายใน
ในบทนี้เราจะพูดถึงสถาปัตยกรรมภายในและส่วนประกอบต่างๆของ Logstash
สถาปัตยกรรมบริการ Logstash
Logstash ประมวลผลบันทึกจากเซิร์ฟเวอร์และแหล่งข้อมูลที่แตกต่างกันและทำหน้าที่เป็นผู้จัดส่ง ผู้ขนส่งจะใช้ในการรวบรวมบันทึกและสิ่งเหล่านี้จะถูกติดตั้งในแหล่งอินพุตทุกแห่ง โบรกเกอร์เช่นRedis, Kafka หรือ RabbitMQ เป็นบัฟเฟอร์ในการเก็บข้อมูลสำหรับตัวทำดัชนีอาจมีมากกว่าหนึ่งโบรกเกอร์ที่ล้มเหลวในอินสแตนซ์
ดัชนีเช่น Luceneใช้เพื่อสร้างดัชนีบันทึกเพื่อประสิทธิภาพการค้นหาที่ดีขึ้นจากนั้นเอาต์พุตจะถูกเก็บไว้ใน Elasticsearch หรือปลายทางเอาต์พุตอื่น ๆ ข้อมูลในหน่วยเก็บข้อมูลเอาต์พุตมีให้สำหรับ Kibana และซอฟต์แวร์การแสดงภาพอื่น ๆ
สถาปัตยกรรมภายใน Logstash
ไปป์ไลน์ Logstash ประกอบด้วยสามองค์ประกอบ Input, Filters และ Output. ส่วนอินพุตมีหน้าที่ระบุและเข้าถึงแหล่งข้อมูลอินพุตเช่นโฟลเดอร์บันทึกของไฟล์Apache Tomcat Server.
ตัวอย่างการอธิบาย Logstash Pipeline
ไฟล์คอนฟิกูเรชัน Logstash มีรายละเอียดเกี่ยวกับส่วนประกอบสามอย่างของ Logstash ในกรณีนี้เรากำลังสร้างชื่อไฟล์ที่เรียกว่าLogstash.conf.
การกำหนดค่าต่อไปนี้จะรวบรวมข้อมูลจากบันทึกการป้อนข้อมูล“ inlog.log” และเขียนลงในบันทึกการส่งออก“ outlog.log” โดยไม่มีตัวกรองใด ๆ
Logstash.conf
ไฟล์กำหนดค่า Logstash เพียงแค่คัดลอกข้อมูลจากไฟล์ inlog.log ไฟล์โดยใช้ปลั๊กอินอินพุตและล้างข้อมูลบันทึกไปที่ outlog.log ไฟล์โดยใช้ปลั๊กอินเอาต์พุต
input {
file {
path => "C:/tpwork/logstash/bin/log/inlog.log"
}
}
output {
file {
path => "C:/tpwork/logstash/bin/log/outlog.log"
}
}
เรียกใช้ Logstash
Logstash ใช้ –f ตัวเลือกเพื่อระบุไฟล์กำหนดค่า
C:\logstash\bin> logstash –f logstash.conf
inlog.log
บล็อกรหัสต่อไปนี้แสดงข้อมูลบันทึกการป้อนข้อมูล
Hello tutorialspoint.com
outlog.log
เอาต์พุต Logstash มีข้อมูลอินพุตในฟิลด์ข้อความ Logstash ยังเพิ่มฟิลด์อื่น ๆ ให้กับเอาต์พุตเช่น Timestamp, Path of the Input Source, Version, Host และ Tags
{
"path":"C:/tpwork/logstash/bin/log/inlog1.log",
"@timestamp":"2016-12-13T02:28:38.763Z",
"@version":"1", "host":"Dell-PC",
"message":" Hello tutorialspoint.com", "tags":[]
}
ดังที่คุณทำได้ผลลัพธ์ของ Logstash มีมากกว่าข้อมูลที่ให้มาผ่านบันทึกการป้อนข้อมูล เอาต์พุตประกอบด้วย Source Path, Timestamp, Version, Hostname และ Tag ซึ่งใช้เพื่อแสดงข้อความพิเศษเช่นข้อผิดพลาด
เราสามารถใช้ตัวกรองเพื่อประมวลผลข้อมูลและทำให้เป็นประโยชน์สำหรับความต้องการของเรา ในตัวอย่างถัดไปเราใช้ตัวกรองเพื่อรับข้อมูลซึ่ง จำกัด ผลลัพธ์ไว้เฉพาะข้อมูลที่มีคำกริยาเช่น GET หรือ POST ตามด้วยUnique Resource Identifier.
Logstash.conf
ในการกำหนดค่า Logstash นี้เราจะเพิ่มตัวกรองชื่อ grokเพื่อกรองข้อมูลที่ป้อนออก เหตุการณ์บันทึกการป้อนข้อมูลซึ่งตรงกับบันทึกการป้อนข้อมูลลำดับรูปแบบไปที่ปลายทางเอาต์พุตที่มีข้อผิดพลาดเท่านั้น Logstash เพิ่มแท็กชื่อ "_grokparsefailure" ในเหตุการณ์เอาต์พุตซึ่งไม่ตรงกับลำดับรูปแบบตัวกรอง grok
Logstash มีรูปแบบ regex ในตัวมากมายสำหรับการแยกวิเคราะห์บันทึกเซิร์ฟเวอร์ยอดนิยมเช่น Apache รูปแบบที่ใช้ในที่นี้คาดว่าจะเป็นคำกริยาเช่น get, post ฯลฯ ตามด้วยตัวระบุทรัพยากรที่เหมือนกัน
input {
file {
path => "C:/tpwork/logstash/bin/log/inlog2.log"
}
}
filter {
grok {
match => {"message" => "%{WORD:verb} %{URIPATHPARAM:uri}"}
}
}
output {
file {
path => "C:/tpwork/logstash/bin/log/outlog2.log"
}
}
เรียกใช้ Logstash
เราสามารถเรียกใช้ Logstash โดยใช้คำสั่งต่อไปนี้
C:\logstash\bin> logstash –f Logstash.conf
inlog2.log
ไฟล์อินพุตของเรามีสองเหตุการณ์ที่คั่นด้วยตัวคั่นเริ่มต้นนั่นคือตัวคั่นบรรทัดใหม่ เหตุการณ์แรกตรงกับรูปแบบที่ระบุใน GROk และเหตุการณ์ที่สองไม่ตรงกัน
GET /tutorialspoint/Logstash
Input 1234
outlog2.log
เราจะเห็นว่าเหตุการณ์ผลลัพธ์ที่สองมีแท็ก "_grokparsefailure" เนื่องจากไม่ตรงกับรูปแบบตัวกรอง grok ผู้ใช้ยังสามารถลบเหตุการณ์ที่ไม่ตรงกันเหล่านี้ออกได้โดยใช้ไฟล์‘if’ เงื่อนไขในปลั๊กอินเอาต์พุต
{
"path":"C:/tpwork/logstash/bin/log/inlog2.log",
"@timestamp":"2016-12-13T02:47:10.352Z","@version":"1","host":"Dell-PC","verb":"GET",
"message":"GET /tutorialspoint/logstash", "uri":"/tutorialspoint/logstash", "tags":[]
}
{
"path":"C:/tpwork/logstash/bin/log/inlog2.log",
"@timestamp":"2016-12-13T02:48:12.418Z", "@version":"1", "host":"Dell-PC",
"message":"t 1234\r", "tags":["_grokparsefailure"]
}