ฉันมีเครื่องไคลเอนต์ที่ส่งต่อไฟล์บันทึกไปยังเซิร์ฟเวอร์ rsyslog ส่วนกลาง ฉันสามารถดูบันทึกบนเซิร์ฟเวอร์ syslog ส่วนกลางได้ที่นี่:
root@server:/var/log# ls -al /var/log/client/
รวม 2495
drwxr-xr-x 2 syslog syslog 4096 19 มิ.ย. 07:06 น.
drwxrwxr-x 14 root syslog 4096 19 มิ.ย. 10:26 น.
-rw-r----- 1 syslog adm 324895 19 มิ.ย. 16:02 auth.log
-rw-r----- 1 syslog adm 31787 19 มิ.ย. 15:17 น. authpriv.log
-rw-r----- 1 syslog adm 3859 19 มิ.ย. 15:17 cron.log
-rw-r----- 1 syslog adm 96770 19 มิ.ย. 15:38 daemon.log
-rw-r----- 1 syslog adm 1475044 19 มิ.ย. 16:03 น. kern.log
-rw-r----- 1 syslog adm 11019 มิ.ย. 19 12:50 น. local0.log
-rw-r----- 1 syslog adm 15883 19 มิ.ย. 12:49 น. syslog.log
-rw-r----- 1 syslog adm 1688 19 มิ.ย. 07:16 user.log
ฉันสนใจ local0.log มากที่สุด
ฉันได้กำหนดค่าเซิร์ฟเวอร์ rsyslog ส่วนกลางเพื่อส่งต่อบันทึกไปยัง logstash:
root@server:/etc/rsyslog.d# cat /etc/rsyslog.d/70-output.conf
แม่แบบ(ชื่อ="json-แม่แบบ"
ประเภท = "รายการ") {
ค่าคงที่ (ค่า = "{")
ค่าคงที่ (value="\"@timestamp\":\"") คุณสมบัติ (ชื่อ="timereported" dateFormat="rfc3339")
ค่าคงที่ (value="\",\"@version\":\"1")
ค่าคงที่ (ค่า="\",\"ข้อความ\":\"") คุณสมบัติ (ชื่อ="msg" รูปแบบ="json")
ค่าคงที่ (ค่า = "\",\"sysloghost\":\"") คุณสมบัติ (ชื่อ = "ชื่อโฮสต์")
ค่าคงที่ (value="\",\"severity\":\"") คุณสมบัติ (ชื่อ="syslogseverity-text")
ค่าคงที่ (value="\",\"facility\":\"") คุณสมบัติ (ชื่อ="syslogfacility-text")
ค่าคงที่ (ค่า="\",\"ชื่อโปรแกรม\":\"") คุณสมบัติ (ชื่อ="ชื่อโปรแกรม")
ค่าคงที่ (ค่า="\",\"procid\":\"") คุณสมบัติ (ชื่อ="procid")
ค่าคงที่ (ค่า="\"}\n")
}
*.* action(type="omfwd" target="localhost" port="10514" protocol="udp" template="json-template")
Logstash ได้รับการกำหนดค่าให้ส่งต่อบันทึกไปยัง elasticsearch:
root@server:/etc/rsyslog.d# cat /etc/logstash/conf.d/logstash.conf
ป้อนข้อมูล {
ทีซีพี {
โฮสต์ => "127.0.0.1"
พอร์ต => 10514
ตัวแปลงสัญญาณ => "json"
พิมพ์ => "rsyslog"
}
}
กรอง { }
เอาต์พุต {
ถ้า [ประเภท] == "rsyslog" {
การค้นหาแบบยืดหยุ่น {
โฮสต์ => [ "127.0.0.1:9200" ]
}
}
}
ฉันเห็นว่า elasticsearch มีบันทึกแล้ว:
root@server:/etc/rsyslog.d# curl -XGET 'http://localhost:9200/logstash-*/_search?q=*&pretty'
{
"เอา" : 4,
"timed_out" : เท็จ
...
"ฮิต" : [
{
"_index": "logstash-2021.06.19-000001",
"_type" : "_doc",
"_id" : "3YxQJHoBrZHyFIavQWQZ",
"_คะแนน" : 1.0,
"_แหล่งที่มา" : {
"ข้อความ" : " [20468.211706] [UFW BLOCK] IN=eth0 OUT= MAC=<snip> SRC=<snip> DST=<snip> LEN=40 TOS=0x00 PREC=0x00 TTL=245 ID=15690 PROTO=TCP SPT=43024 DPT=6780 WINDOW=1024 RES=0x00 SYN URGP=0 ",
...
อย่างไรก็ตาม ดูเหมือนว่ามีเพียงไฟล์บันทึกบางไฟล์เท่านั้นที่ถูกส่งต่อไปยัง logstash (หรือ logstash ไม่ได้ส่งต่อไปยังelasticsearch)
ดูบันทึกทั้งหมดใน elasticsearch (หรือภายใน kibana) ฉันเห็น /var/log/client/local0.log
กำลังถูกเพิกเฉยอย่างสมบูรณ์
มีวิธีบังคับให้รวมไฟล์บันทึกนี้หรือไม่ ฉันจะแก้ไขปัญหานี้ได้อย่างไร
ขอบคุณ!